2011-09-13 12 views
8

私は自分の書籍にConstantiaフォント(Windows 7に付属)を使用しており、Mathematicaで同じフォントを使ってこの本のグラフィックを作成したいと考えています。問題はConstantiaがデフォルトで出力するのはoldstyle digitsです。私はそれを知っています。 XeTeXでは、古い形式の数字と通常の数字を出力に使用するかどうかを制御することができます。Mathematicaの数字のスタイルを制御することは可能ですか?

Mathematicaの数字のスタイルを制御することはできますか?

+0

「oldstyle」とはどういう意味ですか?数字があなたに魅力的なフォントを探してみませんか? – DavidC

+0

@Davidテキストに挿入されたリンクを参照してください –

+0

@Sjoerd Thanks。それは事を明確にするのに役立ちます。 – DavidC

答えて

3

ダニの場合、回避策がありますが、少しのプログラミングが必要です。 まず、補助機能があります。

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}} 

そこで、このような関数: enter image description here

これは、その後FrameTicksまたはTicksオプションで使用することができます

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}])} 

には、以下の結果が得られます。もちろん、Mathematicaの値を自動的に計算させるのではなく、目盛りを指定することを意味します。 ConstantiaTicksに別の引数を指定しない限り、デフォルトのティックの長さを取ることも意味します。

9

これはむしろ難しいと思います。コンスタンはMathematicaで直接使用可能である:

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

enter image description here

しかし、フォントは、特にこのようにバランスされるように設計されています。あなたがFontSizeを使用して、文字のサイズや位置を微調整し、AdjustmentBox場合は、この取得:

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

をあなたはシフトし、スケールされた文字が異なる体重を持っている参照してください。フォントの太さは調整できますが、大まかには大まかです。通常、プレーンとボールドのスタイルしかありません。

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

やや良く

、それでも醜い:だから、あなたは、この限り近くに取得することができます。私は文字の完全な新しいデザインがこれが動作するために必要であると仮定します。おそらく、通常の文字はフォントテーブルのどこかにあるのでしょうか?


UPDATE

設定代替番号を見つけました。フォントテーブルの8320〜8329の位置にあります。あなたはフォントユーティリティを使用してそれらを切り替えることができるはずです。

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

enter image description here

+1

回答ありがとうございます。もちろん、この方法はAxesのティックに対しては機能しませんPlot、Plot3Dなどのコマンドで自動的に生成されます。 – Igor

+0

@Igor私の更新を参照してください –

+0

@ Sjoerd C. de Vriesありがとう! – Igor

2

私はFontForgeをつかむと思います。より新しいバージョン(私は覚えているようです)は、マッピングを適用してフォントにフラット化するための深く隠されたメニューオプションを持っていますので、lnum(大文字の数字)を選択して、Constantiaのバージョンを、 Mathematicaの外部ですでに作成されたスタイルの数字。代わりに、少し控えめなハイテクフォントフォージでは、小文字の上にライニングまたは表形式の数字をコピーして貼り付けることができます。

Font-forgeはかなり見栄えが悪いですが、実際には非常に優れており、フォントの調整に非常に便利です。

代替策として、Mathematicaのデータをフラットファイルにエクスポートし、XeTeXでTikZでネイティブにレンダリングすることを考えましたか?それは私が普段使っているアプローチであり、その出力は本当に優れています。

関連する問題