2011-09-13 4 views
8

Tôi sử dụng phông chữ Constantia (đi kèm với Windows 7) cho sách của tôi và muốn chuẩn bị đồ họa cho cuốn sách này bằng cách sử dụng cùng một phông chữ trong Mathematica. Vấn đề là rằng Constantia theo mặc định kết quả đầu ra oldstyle digits. Tôi biết điều đó, ví dụ trong XeTeX, có thể kiểm soát xem kiểu chữ cũ hoặc chữ số thông thường có được sử dụng cho đầu ra hay không.Có thể kiểm soát kiểu chữ số trong Mathematica không?

Có thể kiểm soát kiểu chữ số trong Mathematica không?

+0

Bạn có ý nghĩa gì với "kiểu cũ"? Tại sao bạn không chỉ tìm kiếm một phông chữ mà các chữ số hấp dẫn hơn đối với bạn? – DavidC

+0

@David xem liên kết tôi đã chèn vào văn bản –

+0

@Sjoerd Cảm ơn. Điều đó giúp làm rõ mọi thứ. – DavidC

Trả lời

3

Đối với bọ ve, có một giải pháp thay thế, nhưng nó đòi hỏi một chút lập trình. Đầu tiên, có một chức năng phụ trợ.

getDigits[n_Integer] := IntegerDigits[n] 
getDigits[0.] := {0} 
getDigits[n_Real] := 
With[{rd = RealDigits[n]}, 
    Join[Take[rd[[1]], rd[[2]]], {"."}, 
    Drop[rd[[1]], rd[[2]]] ] /. {".", z___} -> {0, ".", z} /. {a__, 
    0 ..} -> {a} /. {a__, Repeated[0, {4, 150}], q__} -> {a} /. 
    {b__, "."} -> {b}] 
Attributes[getDigits] = Listable 

getDigits[{14.3, 2, 274, 2345.67}] 
    {{1, 4, ".", 3}, {2}, {2, 7, 4}, {2, 3, 4, 5, ".", 6, 7}} 

Sau đó, một chức năng như thế này:

ConstantiaTicks[a_?VectorQ, opts : OptionsPattern[Style]] := 
[email protected]{a, 
    Style[#, FontFamily -> "Constantia", 
     Sequence @@ {opts}] & /@ (StringJoin /@ 
     Map[ToString[ 
     Style[Which[IntegerQ[#], 
      FromCharacterCode[# + 8320], # === ".", "."]]] &, 
    (getDigits[a]), {2}])} 

sản lượng các kết quả sau: enter image description here

này sau đó có thể được sử dụng trong một lựa chọn FrameTicks hoặc Ticks. Tất nhiên nó có nghĩa là chỉ định ve của bạn thay vì để Mathematica tự động tính toán giá trị của chúng. Nó cũng có nghĩa là lấy chiều dài đánh dấu mặc định trừ khi bạn muốn có một đối số khác để ConstantiaTicks chỉ định điều đó.

9

Tôi nghĩ điều này khá khó khăn. Constantia là sử dụng trực tiếp trong Mathematica:

Style["", FontFamily -> "Constantia", FontSize -> 100] 

enter image description here

Tuy nhiên, phông chữ được thiết kế đặc biệt để được cân bằng cách này. Nếu bạn tinh chỉnh kích thước và vị trí của các chữ cái bằng FontSizeAdjustmentBox bạn có được điều này:

shift = {0, 0, 0, -1, -1, -1, 0.0, -1, 0.0, -1} 0.5; 
s = 0.65; 
sizeScale = {1, 1, 1, s, s, s, s, s, s, s, s}; 
Row[Table[ 
    AdjustmentBox[ 
    Style[num, FontFamily -> "Constantia", 
    FontSize -> 100 sizeScale[[num + 1]]], 
    BoxBaselineShift -> shift[[num + 1]]], {num, 0, 
    9}] 
] // DisplayForm 

enter image description here

Bạn thấy các chữ cái chuyển và quy mô có một trọng lượng cơ thể khác nhau. Trọng lượng phông chữ có thể được điều chỉnh, nhưng chỉ rất gần. Thông thường bạn chỉ có phong cách Plain và Bold. Vì vậy, bạn có thể nhận được càng gần như thế này:

body = {Plain, Plain, Plain, Bold, Bold, Bold, Bold, Bold, Bold, Bold}; 
Row[Table[ 
    AdjustmentBox[ 
    Style[num, FontFamily -> "Constantia" , 
    FontWeight -> body[[num + 1]], 
    FontSize -> 100 sizeScale[[num + 1]]], 
    BoxBaselineShift -> shift[[num + 1]]], {num, 0, 
    9}]] // DisplayForm 

enter image description here

Hơi tốt hơn, nhưng vẫn xấu xí. Tôi cho rằng một thiết kế hoàn toàn mới của các chữ cái là cần thiết để làm việc này. Có lẽ các chữ cái bình thường có thể được tìm thấy ở đâu đó trong bảng chữ cái?


CẬP NHẬT

Tìm thấy số lượng thay thế thiết. Họ đang ở vị trí 8320 - 8329 trong bảng phông chữ. Bạn có thể chuyển đổi chúng bằng tiện ích phông chữ.

Style[FromCharacterCode[Range[8320, 8329]],FontFamily -> "Constantia", FontSize -> 100] 

enter image description here

+1

Cảm ơn câu trả lời nhưng, tất nhiên, phương pháp này sẽ không hoạt động đối với các rìu rìu khi chúng được tạo tự động bằng lệnh như Plot, Plot3D, v.v. – Igor

+0

@Igor Vui lòng xem cập nhật của tôi –

+0

Cảm ơn bạn @Sjoerd C. de Vries! – Igor

2

Tôi muốn lấy FontForge. Các phiên bản mới hơn (dường như tôi nhớ) có một tùy chọn menu ẩn sâu để áp dụng ánh xạ và làm phẳng nó thành phông chữ, vì vậy bạn có thể chọn lnum (chữ số trên) và dễ dàng xuất ra phiên bản Constantia với sự thay thế lớp lót cho cũ- các số kiểu đã được tạo, bên ngoài Mathematica. Ngoài ra, một chút ít công nghệ cao, trong Font-forge bạn chỉ có thể sao chép và dán trong các lớp lót hoặc bảng số trên đầu trang của những trường hợp thấp hơn.

Phông chữ giả mạo không đẹp, nhưng cắt bớt một chút vì nó thực sự rất tốt và rất tiện dụng để chỉnh phông chữ.

Là một giải pháp thay thế, bạn có nghĩ đến việc xuất dữ liệu trong Mathematica thành tệp phẳng và hiển thị nó nguyên bản trong XeTeX của bạn với TikZ không? Đó là cách tiếp cận tôi thường sử dụng, và đầu ra thực sự là tuyệt vời.