新しいフォントを設定する方法| Java用のAspose.TeX
LaTeXで使用する新しいフォントを設定するには、基本的に、内部フォント選択テーブルに、文書内のフォントリクエストと、LaTeXで使用される文字情報を含む外部ファイル.tfm
を関連付けるために必要な情報を設定する必要があります。つまり、これらのテーブルは、外部ファイルcmdunh10.tfm
を以下のリクエストに関連付ける役割を果たします。
1\fontencoding{OT1}\fontfamily{cmdh}\fontseries{m}\fontshape{n}%
2\fontsize{10}{12pt}\selectfont
新しいフォントを追加するには、プロセスを逆にする必要があります。新しい外部フォントごとに、5つの質問に答える必要があります。
- フォントエンコードとは何ですか?つまり、どのキャラクターがどの位置にありますか?
- その姓は何ですか?
- そのシリーズ(重量と幅)とは何ですか?
- その形は何ですか?
- そのサイズは?
これらの質問に対する回答は、LaTex規則に従って外部フォントを分類するために必要な情報を提供します。次のいくつかのセクションでは、NFSSテーブルに新しいフォントを入力して、メインテキストで使用できるようにする方法について説明します。通常、新しいフォントファミリにアクセスするための短いパッケージファイルを作成するなど、新しいフォントを使用したい場合は、この情報が必要です。後のセクションでは、たとえば標準的なフォントの代わりに数学のための特別なフォントを使用したい場合に重要な、より複雑な概念について説明します。
6.1。外部フォントの命名規則
Tex Worldの事実上の標準フォント命名スキームは、ケースが重要ではない8つの英数字を使用してすべてのフォントファイル名を分類します。この8文字制限は、すべてのコンピュータープラットフォームで同じファイル名を使用できることを保証します。スキームの原則については、以下の表に記載されています。ここでは、デフォルトに対応する場合は括弧内の部品を省略できます。たとえば、設計サイズは、フォントが線形にスケーリングされていない場合にのみ与えられます。
以下は、LaTexのフォントインターフェイスに従って、35の「基本」PostScriptフォントの分類です。各フォントについて、完全なAdobe名と対応する短いファイル名(現在議論されている分類)が示されています。 ot1
、 t1
、または ts1
の場合、完全なファイル名を取得するには、それぞれ 7t
、 8t
、または 8c
を追加する必要があります。たとえば、「T1」エンコーディングのユートピアレギュラーの「putr8t」。 これは、さらなる議論に役立ちます。
命名規則は、フォントの内部Tex名(つまり、次のセクションで説明されている「\ declareFontshape」宣言)、仮想フォントとそのコンポーネントの名前(たとえば、物理フォントの特定の再エンコード)、および物理フォントの名前をカバーしています。 PostScriptフォントの場合、物理フォント名はTexが内部で使用するものとは異なることがよくあります。
後者の場合、ラテックスの実行の結果が表示または印刷されている場合、内部フォント名を対応する外部フォントにマッピングする必要があります。たとえば、PostScriptドライバー「DVIPS」は、次のような行を含むマッピングファイル(デフォルトの拡張機能 .map
)を使用します。
1putr8r Utopia-Regular "TeXBase1Encoding ReEncodeFont " <8r.enc <putr8a.pfb
特別なエンコードベクトル( 8r.enc
)を介して再エンコードすることにより、フォント「putr8r」は外部フォント putr8a.pfb
から取得できることを伝えます。ただし、「t1put.fd`ファイルに「putr8r」への言及はありません。これには、「t1」エンコードのユートピアファミリーの「\ declarefontshape」宣言が含まれています。その理由は、「putr8t」が「putr8r」を参照する仮想フォント(「fontinst」ユーティリティの助けを借りて構築)であるためです。後者のリンクは、仮想フォントのソースにのみ見つけることができます。
6.2。新しいフォントファミリを宣言する方法とフォント形状グループ
各家族/エンコーディングの組み合わせは、3つの議論を撮るコマンド「\ DeclareFontfamily」の助けを借りて、LaTexに紹介する必要があります。最初の2つは、エンコードスキームと姓です。 3番目は通常空ですが、フォントロードのための特別なオプションが含まれている場合があり、この記事でさらに説明しています。だから、あなたが新しい家族を宣言したいなら - たとえば、古いTexをエンコードするコンピューターモダンなダンヒル - あなたは書くでしょう
1\DeclareFontFamily{OT1}{cmdh}{}
通常、フォントファミリには多くの個別のフォントがあります。宣言の数を減らすには、サイズのみが異なるフォントを組み合わせて、各家族を個別に発表する代わりにグループとして宣言する必要があります。
このようなグループは、6つの引数を撮影するコマンド「\ declareFontshape」を使用して、LaTexの内部テーブルに入力されます。最初の4つの引数は、エンコードスキーム、姓、シリーズ名、およびこれらのフォントにアクセスする形状名です。 5番目の引数は、以下で説明する特別な形式で与えられるサイズと外部フォント名のリストです。 6番目の引数は通常空であり、その使用についてはこの記事でさらに説明します。
たとえば、古いTexエンコーディングスキームのコンピューターモダンダンヒル媒体のNFSSテーブルエントリを次のように入力できます
1\DeclareFontShape{OT1}{cmdh}{m}{n}{ <10> cmdunh10 }{}
サイズ10ptの外部フォントは1つだけであると仮定します。このフォントも12pt(10ptからスケーリング)で利用できる場合、宣言は
1\DeclareFontShape{OT1}{cmdh}{m}{n}{ <10> <12>cmdunh10 }{}
外部ファイルがすべての可能なサイズで利用可能である場合、宣言は非常に簡単になります。これは、タイプ1のPostscript(概要)フォントの場合、またはMetafontを呼び出してドライバープログラムがオンデマンドでフォントを生成できる場合です。
たとえば、ラテックスでローマの大胆な直立時間「T1」エンコードスキームは、次のように紹介できます
1\DeclareFontShape{T1}{ptm}{b}{n}{ <-> ptm8t }{}
この例では、2つのオープンエンドのサイズ範囲を宣言しています。その結果、同じ外部 ptmb8t.tfm
ファイルがすべてのサイズに使用され、目的のサイズにスケーリングされます。フォント用の複数の .tfm
ファイルがある場合 - たとえば、テキストサイズの emtt10
、ディスプレイサイズ(ヨーロッパの最新のタイプライター)の「emtt12」の場合、宣言は
1\DeclareFontShape{T1}{emtt}{m}{n}{<-12> emtt10 <12-> emtt12}{}
この場合、 emtt10.tfm
ファイルは、12ptより小さいサイズに、 emtt12.tfm
に12pt以上のサイズに emtt12.tfm
を使用します。
上記の例は、「\ DeclareFontshape」コマンドの5番目の議論は、個々のサイズ(フォント名など)の読み込み情報と混ざった角度ブラケットに囲まれたサイズ仕様で構成されていることを示しています。角度ブラケット内の部分は *サイズ情報 *と呼ばれ、閉じた角度ブラケットに続く部品は *font info *と呼ばれます。 フォント情報は、さらに *サイズ関数 *(多くの場合空)とその引数に構造化されています。 「\ declareFontshape」の引数の中で、エントリをより読みやすくするために、Whitespacesは無視されます。異常な状況では、実際のスペースを入力する必要がある場合、「\ Space」コマンドを使用できます。
シンプルなサイズとサイズの範囲
サイズのinfosは、 *シンプルなサイズ *および *サイズの範囲 *に分割できます。シンプルなサイズは、 <10>
または <17.28>
のような単一の(小数)数で与えられ、正の値を持つことができます。ただし、数値はポイントで測定されたフォントサイズを表すため、おそらく4または12を超える値を見つけることはありません。サイズの範囲は、ハイフンで区切られた2つの単純なサイズで与えられ、同じフォント情報を共有するさまざまなフォントサイズを示します。下の境界は範囲に含まれ、上限は除外されます。たとえば、 <5-10>
は、5pt以上のサイズと10pt未満のサイズを表しています。サイズの範囲でハイフンのいずれかのサイズの数を省略することができます。「<->」は、すべての可能なサイズを表し、 <-10>
は10pt未満のすべてのサイズに立っており、 <12->
は12ptに等しいすべてのサイズに立っています。
いくつかの単純なサイズには、多くの場合、同じフォント情報があります。その場合、便利な速記は、最後の情報以外のすべてを省略することです。
1\DeclareFontShape{OT1}{panr}{m}{n}{ <5> <6> <7> <8> <9> <10>
2 <10.95> <12> <14.4> <17.28> <20.74> <24.88> pan10 }{}
これにより、フォントパンドラミディアムローマはいくつかのサイズで利用可能であると宣言されています。それらはすべて、同じデザインサイズからスケーリングすることによって生成されます。
サイズ関数
上記のように、フォント情報はさらにサイズ関数とその引数に構造化されています。 *
がフォント情報文字列に表示される場合、左側のすべてが関数名を形成し、右側のすべてが引数です。アスタリスクがない場合、これまでのすべての例のように、文字列全体が引数と見なされ、関数名は *空 *です。
サイズ関数は、LaTexが外部フォントを見つけて目的のサイズにロードするために必要な仕様を生成します。このプロセスは、ユーザーが要求したサイズと「\ declareFontshape」コマンドの情報に基づいています。サイズ関数は、特別なイベントについてユーザーに通知する責任もあります。たとえば、一部の関数は、警告を発行するかどうかのみが異なります。この機能により、システムメンテナーは、特定のサイトに最適な方法でラテックスをセットアップできます。
サイズ関数の名前は、ゼロ以上の文字で構成されています。サイズ関数の一部は、1つのオプションと1つの必須の2つの引数を実行できます。オプションのパラメーターは、四角い括弧で囲む必要があります。たとえば、次の仕様では、すべての可能なサイズに対して、オプションの引数「0.9」と必須の引数「CMFBI10」を使用してサイズ関数「S」を選択します。
1<-> s * [0.9] cmfib8
\ declareFontshape
のサイズ仕様は、指定された順序で検査されます。サイズ情報が要求されたサイズと一致する場合、対応するサイズ関数が実行されます。このプロセスが有効なフォントを生成する場合、それ以上のエントリは検査されません。それ以外の場合、検索は次のエントリで続きます。標準サイズ関数を以下に示します。
「空の」関数空の関数は、単純なサイズの場合、要求されたサイズで正確にフォント情報をロードします。サイズ範囲があり、ユーザーが要求するサイズがその範囲内に収まる場合、ユーザーサイズでフォントを正確にロードします。
たとえば、ユーザーが 14.4
を要求した場合、仕様
1<-> panr10
panr10.tfm
ファイルを14.4ptにロードします。 .tfm
ファイルのすべての値は1.44でスケーリングされます。このフォントは10pt用に設計されているためです。
ユーザーが要求したサイズとはわずかに異なるサイズでフォントをロードする場合があります。このような調整は、同じドキュメントで使用されている他のファミリのフォントに比べて、ある家族のフォントが大きすぎるように見える場合に必要になる場合があります。この目的のために、空のサイズ関数を使用すると、オプションの引数が要求されたサイズを掛けたスケール係数を指定して、実際のサイズをロードする実際のサイズを生成します。
したがって、
1<-> [0.95] phvr8t
要求されたサイズの95%に、 phvr8t.tfm
ファイル( t1
エンコードのヘルベティカ)を常にロードします。オプションの引数が使用されている場合、空のサイズ関数は、フォントが意図したサイズでロードされていないことをユーザーに通知する警告を発行します。
「s」関数「s」関数は、端子にメッセージが生成されないことを除いて、空の関数と同じことを行います。メッセージは引き続きトランスクリプトファイルに書き込まれるため、何か問題が発生した場合はどのフォントが使用されたかを確認できます。
「gen」関数外部フォント名は、多くの場合、フォントサイズを書体を表す文字列に追加することによって構築されます。たとえば、 cmtt8
、 cmtt9
、および cmtt10
は、それぞれ8、9、および10ptのFonts Computer Modern Typewriterの外部名です。このようなスキームに従って編成されたフォント名を使用すると、「gen」関数を使用してエントリを短くすることができます。この関数は、フォント情報と要求されたサイズを組み合わせて、外部フォント名を生成します。したがって、あなたが書くなら
1<8> <9> <10> gen * cmtt
これは速記です
1<8> cmtt8 <9> cmtt9 <10> cmtt10
内部NFSSテーブルに8文字を保存します。この関数は文字通り両方の部分を組み合わせているため、 14.4
などの小数サイズで使用しないでください。また、外部フォント名の数字が実際にデザインサイズを表していることを確認する必要があります(たとえば、「CMR17」は実際には17.28ptのコンピューターモダンローマです)。
他のすべての点で、「gen」関数は空の関数のように動作します。つまり、オプションの引数は、指定されている場合、スケール係数を表し、使用すると情報メッセージを生成します。
「sgen」関数「sgen」関数は、Gen関数のサイレントバージョンです。メッセージをトランスクリプトファイルにのみ書き込みます。
「GenB」関数このサイズ関数はGENに似ていますが、サイズがECフォントなどの数百点のフォント名でエンコードされるフォントを対象としています。結果として、次のような行
1<9> <10> <10.95> <12> genb * ecrm
速記として機能します
1<9> ecrm0900 <10> ecrm1000 <10.95> ecrm1095 <12> ecrm1200
オプションの引数は、存在する場合、空の関数と同じ効果をもたらします。
「sgenb」関数「sgenb」関数は、「genb」関数のサイレントバージョンです。メッセージをトランスクリプトファイルにのみ書き込みます。
「sub」関数「sub」関数は、現在のフォント形状グループに外部フォントが存在しない場合、異なるフォント形状グループを代用するために使用されます。この場合、引数は外部のフォント名ではなく、スラッシュによって分離された別の家族、シリーズ、形状の組み合わせです。たとえば、コンピューターのモダンなサンズは斜体の形状ではなく、斜めの形状だけです。したがって、斜めの形状を斜体のものの代替として宣言することは合理的です。
1\DeclareFontShape{OT1}{cmss}{m}{it}{ <-> sub * cmss/m/sl }{}
この宣言がなければ、ラテックスの自動代替メカニズムは、デフォルトの形状であるコンピューターモダンな直立を代用します。
「sub」関数には他にも良い用途があります。次のコードを見てください。
1\DeclareFontShape{OT1}{cmss}{m}{sl}{ <-8> sub * cmss/m/n
2 <8> cmssi8 <9> cmssi9 <10><10.95> cmssi10 <12><14.4> cmssi12
3 <17.28><20.74><24.88> cmssi17 }{}
この宣言によると、サイズは8pt以下のサイズでは、ラテックスは「OT1/CMSS/m/n`のフォント形状宣言を見る必要がある」と述べています。そのような置換は連鎖することができます。たとえば、コンピューターモダンなsansフォントは8pt未満であるため、置換されたフォント形状グループにはおそらく別の置換エントリが含まれます。ただし、この方法を使用すると、追加のフォントを取得すると、1つのフォントシェイプグループ宣言のみを変更する必要があるという利点があります。このフォントを使用する他の宣言は自動的に利益を得ることがあります。
「SSUB」関数「SSUB」関数は、サブ関数と同じ機能を持っていますが、画面上の警告を生成しません(最初の「S」は「サイレント」を意味します)。
「subf」関数「subf」関数は空の関数と同じ方法でフォントをロードしますが、要求されたフォント形状が利用できないため、この操作が置換として行われたという警告が生成されます。この関数は、「サブ」関数の場合のように、それらのために別のフォント形状グループを宣言する必要なく、いくつかの外部フォントを置き換えるために使用できます。例えば、
1\DeclareFontShape{OT1}{ptm}{bx}{n}{ <-> subf * ptmb7t }{}
要求された組み合わせが利用できないこと、したがって、フォント ptmb7t
が代わりにロードされたことをユーザーに警告します。これは「sub」関数を使用するよりも有益ではないため、後者を好むはずです。
「ssubf」関数「subf」のサイレントバージョン、この関数はそのメッセージをトランスクリプトファイルにのみ書き込みます。
「固定」関数この関数は、要求されたサイズを無視し、代わりに引数として指定された外部フォントをロードします。存在する場合、オプションの引数は、フォントがロードされるサイズ(ポイント内)を示します。したがって、この関数を使用すると、一部の固定サイズの1つのフォントがロードされるサイズ範囲を指定できます。
「sfixed」関数「sixed」のサイレントバージョン、この関数は、たとえば、1つのサイズでのみ利用可能な大きな数学記号を含むフォントをロードするために使用されます。
フォントロードオプション
上記のように、各フォントファミリは \ declareFontfamily
コマンドを使用して宣言する必要があります。このコマンドへの引数と、「\ DeclareFontshape」に対する6番目の議論は、フォントがロードされたときに実行される特殊操作を指定するために使用できます。このようにして、フォント全体に関連付けられているパラメーターを変更できます。
各文字に関する情報に加えて、Texはすべての外部フォントに対して、フォントに関連付けられたグローバルな寸法およびその他の値のセットを維持します。たとえば、すべてのフォントには独自の「ハイフンキャラクター」があります。これは、Texが単語をハイフネートするときに挿入されるキャラクターです。別の例は、通常の幅と単語間の空白の伸縮性です。すべてのフォントに対して値が維持され、Texが新しいフォントに切り替えるたびに変更されます。これらの値を変更すると、フォントが読み込まれ、特殊効果を実現できます。
通常、変更はフォントファミリー全体に適用されます。例えば、タイプライターフォントファミリーでタイプセットされるすべての単語のハイフネーションを禁止したいとします。この場合、\DeclareFontFamily
の 3 番目の引数を使用する必要があります。特定のフォントシェイプグループにのみ変更を適用する場合は、\DeclareFontShape
の 6 番目の引数を使用する必要があります。つまり、フォントがロードされると、NFSS はまず \DeclareFontFamily
の引数を適用し、次に \DeclareFontShape
の 6 番目の引数を適用します。これにより、必要に応じてフォントファミリー全体に指定されたロードオプションを上書きできます。
\hyphenchar\font=<number>
で、TeXはハイフネーションに使用する文字を指定します。<number>
は、エンコード方式におけるこの文字の位置を表します。デフォルトは \defaulthyphenchar
の値である 45
で、これはほとんどのエンコード方式における ‘-’ 文字の位置を表します。この数値を -1
に設定すると、ハイフネーションは抑制されます。したがって、次のように宣言します。
1\DeclareFontFamily{0T1}{cmtt}{\hyphenchar\font=-1}
エンコードスキーム「OT1」を使用して、「CMTT」ファミリーのすべてのフォントのハイフネーションを抑制できます。 「T1」エンコードを備えたフォントは、位置127に代替のハイフン文字を持っているため、たとえば設定できるように
1\DeclareFontFamily{T1}{cmr}{\hyphenchar\font=127}
これにより、ハイフンのキャラクターは、「いわゆる」などの単語で入力された複合ワードダッシュとは異なります。 Texは、既に明示的なハイフン文字を含む単語をハイフンにしません(ハイフンの直後を除く)。これは、平均単語の長さが英語よりもはるかに大きい言語では問題になる可能性があります。上記の設定では、この問題を解決できます。
すべてのTeXフォントには、関連付けられた寸法セットがあります。これらの寸法は、\fontdimen<number>\font=<dimen>
という形式の代入によって変更されます。ここで、<number>
は寸法の参照番号、<dimen>
は代入する値です。デフォルト値は、フォントが読み込まれたときに.tfm
ファイルから取得されます。すべてのフォントには、少なくとも7つの寸法があります。
\ fontdimen1
文字のポイントごとのスラントを指定します。値がゼロの場合、フォントは直立します。\ fontdimen2
単語間で使用される空間の通常の幅(インターワードスペース)を指定します。\ fontdimen3
インターワードスペースの追加の伸縮性を指定します。これは、Texが単語間のスペースに追加して正当なラインを段落で作成することができる余分な量の空白です。緊急時には、Texはこの許可された価値よりも多くのスペースを追加する場合があります。その場合、 * Underfull Box *が報告されます。\ fontdimen4
」インターワードスペースの許可された収縮性を指定します。これは、Texが通常のインターワードスペース(\ fontdimen2)から減算することが許可されているスペースの量であり、正当なラインを段落に生成します。 Texは、インターワードスペースをこの最小限よりも縮小することはありません。\ fontdimen5
x-heightを指定します。フォント指向のディメンション1ex
を定義します。\ fontdimen6
は quad幅を指定しました。フォント指向のディメンション1em
を定義します。\ fontdimen7
\ non-frenchspacing
が有効である場合、特定の文章句読点文字の後に追加される余分なスペースとして意図された量を指定します。その値がゼロではない場合、それは常に無視されるか、むしろ無視されるか、むしろ無視されるか、むしろ無視されるか、むしろ無視されるか、むしろ「\ xspaceskip」に置き換えられます。
フォントに関連付けられたインターワード間隔を変更すると、1つの形状グループ内のすべてのサイズでそのような値が使用可能でなければならないため、絶対値を使用することはできません。したがって、フォントに依存する他のパラメーターを使用して、値を定義する必要があります。たとえば、あなたは言うことができます
1\DeclareFontShape{0T1}{cmr}{m}{n}{...}
2 {\fontdimen2\font=.7\fontdimen2\font}
この宣言により、通常のインターワードスペースが元の値の70%に減少します。同様に、伸縮性と収縮性を変更できます。
フォーミュラの一部のフォントには、7つ以上のフォント寸法が必要です。つまり、「シンボル」と「largeSymbols」と呼ばれるシンボルフォント。これらのフォントのパラメーターがそれぞれ22および13未満のパラメーターを持っている場合、Texは式をタイプセットすることができません。これらのパラメーターの値は、数学の式に文字を配置するために使用されます。
TEXシステムには不幸な最適化が1つあります。TEXは、すべての「.tfm」ファイルを特定のサイズに対して1回だけロードします。したがって、1つのフォントシェイプグループ(「\ DeclareFontshape」コマンドを使用して)を定義して、「cmtt10」などの外部フォントをロードし、同じ外部フォントをロードするために別の「declarefontshape」コマンドを使用することは不可能です。そうする試みは、両方のフォント形状グループの値を変更します。
たとえば、インターワードスペースを小さくすることにより、タイトな間隔でフォント形状を定義しようとするとします。
1\DeclareFontShape{T1}{ptm}{m}{n}{ <-> ptmr8t }{}
2\DeclareFontShape{T1}{ptm}{c}{n}{ <-> ptmr8t }
3 {\fontdimen2\font=.7\fontdimen2\font}
この宣言は機能しません。中型のインターワード間隔は、タイトな形状がそこで指定された値にロードされると変化しますが、これは予想されるものではありません。この状況を処理する最良の方法は、元のフォントと同じ文字を含むが、フォント寸法の設定が異なる仮想フォントを定義することです。別の可能な解決策は、次の宣言のように、わずかに異なるサイズでフォントをロードすることです。
1\DeclareFontShape{T1}{ptm}{c}{n}{ <-> [0.9999] ptmr8t }
2 {\fontdimen2\font=.7\fontdimen2\font}
この方法により、個別の「fontdimen」パラメーターを備えたTexの異なるフォントになります。あるいは、この特定の場合、「\ spaceskip」を設定することでインターワードスペースを制御できます。
6.3。フォントファミリを変更し、フォント形状グループを変更する方法
特定のドキュメントに非標準のフォント形状宣言が必要な場合、このプライベート宣言はパッケージまたはドキュメントの前文に配置する必要があります。フォント形状の組み合わせの既存の宣言を上書きします。ただし、 \ declareFontfamily
を使用すると、対応する .fd
ファイルの後の読み込みを防ぐことが重要です(この記事で後述)。また、この新しい宣言は、すでにロードされているフォントには影響しません。
6.4。新しいフォントエンコードスキームを宣言する方法
エンコーディングスキームの変更が必要なフォントの変更には、特定の予防策が必要です。たとえば、「T1」のエンコードでは、ほとんどのアクセント文字には独自のグリフがありますが、従来のTexテキストエンコード( ot1
)では、 \ accent
プリミティブを使用してアクセント付き文字を文字とアクセントから生成する必要があります。おそらく、フォントがエンコーディングの1つでのみ使用可能であるため、2つのアプローチを混合する必要がある場合、「\」などのコマンドの定義は、現在のフォントエンコーディングに応じて異なる動作をする必要があります。
そのため、各フォントエンコーディングは、3つの引数を取る\DeclareFontEcnoding
コマンドを用いてLaTeXに正式に導入する必要があります。最初の引数はエンコーディング名で、後に\fontencoding
コマンドでエンコーディングにアクセスする際に使用されます。
標準エンコーディングスキームとその内部名のリストは、セクション5.1の表に記載されています。
2番目の引数には、LaTeXが\fontencoding
コマンドを用いてあるエンコーディングから別のエンコーディングに切り替える際に実行されるコード(定義など)が含まれます。最後の引数には、フォントが数学的アルファベットとしてアクセスされる際に使用されるコードが含まれます。したがって、これら3つの引数は、エンコーディング内の文字の位置に依存するコマンドを再定義するために使用できます。
LATEX3Eプロジェクトは、次の文字から始まるエンコーディングの使用を留保します。
t
-256文字の標準テキストエンコーディング。ts
-対応するt
エンコードを拡張するように設計されたシンボル。x
-「T」エンコーディングの厳格な要件に準拠していないテキストエンコーディング。- 「M」 - 256文字の標準的な数学エンコーディング。
s
-他のシンボルエンコーディング。a
-その他の特別なアプリケーション。- 「OT」 - 128文字の標準テキストエンコーディング。
om
-128文字の標準的な数学エンコーディング。
文字「O」は、128文字のエンコーディングが古く、廃止されていることを強調しています。理想的には、これらのエンコーディングはTeXユーザーグループによって定義された標準に置き換えられ、将来的には、ある言語から別の言語に切り替える場合にのみエンコーディングの変更が必要になるでしょう。
独自のプライベートエンコーディングを宣言する場合は、「ローカル」を表す「L」または「実験的」を表す「E」で始まる名前を選択してください。「U」で始まるエンコーディングは、「不明」または「未分類」のエンコーディング、つまり一般的なエンコーディングパターンに適合しないフォントを表します。導入された命名規則により、公式エンコーディングを使用したファイルの移植性が保証されます。
\ declareFontencoding
コマンドは、コマンド「lastdeclaredencoding」に新しく宣言されたエンコードの名前を保存します。これは、他の関連するエンコード情報を宣言している場合に便利な場合があり、たとえば、キリル語のエンコーディング宣言ファイルで使用されます。
また、前の記事でフォント置換の議論で述べたように、家族、シリーズ、および形状のデフォルト値は、異なるエンコーディングで異なる必要がある場合があります。そのような場合、NFSSはコマンド「\ DeclareFontSubstitution」を提供します。次の3つの引数は、自動代替プロセスで使用するための家族、シリーズ、および形状のデフォルト値(このエンコードに関連付けられています)です。これらの3つの引数が有効なフォント形状を形成する必要があることが重要です。言い換えれば、「\ declareFontshape」宣言が存在します。それ以外の場合は、nfssが \ begin {document}
で内部テーブルをチェックすると、エラーメッセージが発行されます。
6.5。内部ファイル組織
フォントファミリは、フォーマットファイルが生成されたときに宣言されたり、ドキュメントプリアンブルで宣言されたり、ドキュメント内のフォントを変更するコマンドがまだ使用されていない組み合わせを要求したときにオンデマンドでロードできます。最初の方法は、フォントが使用されていなくても、すべてのラテックス実行で内部メモリを消費することにつながります。最後の2つのオプションは、フォントの定義を実行時に読み取る必要があるため、ドキュメントのフォーマット中にもう少し時間がかかります。それにもかかわらず、後者のソリューションは、単一のLaTex形式でさまざまなドキュメントをタイプセットできるため、ほとんどの形状グループにとって好ましいものです。
フォーマットファイルが生成されている場合、LaTexは「FontText.ltxという名前のファイルを読み取ります。これには、フォントファミリ定義の標準セットとテキストフォントに関連するその他の宣言が含まれます。
他のすべてのフォントファミリの定義は、オンデマンドでロードされた外部ファイルで宣言する必要があります:パッケージファイルまたはフォント定義(
.fd)ファイルのいずれか。 フォントファミリの定義がパッケージファイルに配置されている場合、「documentclass」コマンドの後にこのパッケージを明示的にロードする必要があります。ただし、3番目の可能性があります。NFSSがエンコードスキーム「bar」でフォントファミリー「foo」のリクエストを取得するたびに、この組み合わせについては何も知らない場合、
barfoo.fd`というファイルをロードしようとします。このファイルが存在する場合、エンコードスキーム「bar」、つまり、フォームの宣言にファミリー「foo」のフォント形状グループ定義を含めることになっています。
1\DeclareFontFamily{BAR}{foo}{...}
2\DeclareFontShape{BAR}{foo}{...}{...}{...}{...}
3...
4\endinput
これは、ほとんど使用されていない情報を貴重なメモリに埋めることなく、ラテックス用の膨大な数のフォントファミリを宣言することが可能になる方法です。
各 .fd
ファイルには、1 つのエンコーディング スキームで 1 つのフォント ファミリのすべてのフォント定義が含まれている必要があります。ファイルには、1 つ以上の \DeclareFontShape
宣言と、1 つの \DeclareFontFamily
宣言が含まれている必要があります。\ProvidesFile
宣言や、フォントの読み込みについてユーザーに通知するいくつかの \typeout
ステートメントを除き、ファイルには他の定義を含めないでください。\typeout
コマンドの代わりに、引数をトランスクリプト ファイルにのみ書き込むプレーン TeX コマンド \wlog
を使用できます。トランスクリプト ファイルの詳細情報は、本番環境で使用されるすべての .fd
ファイルによって生成される必要があります。このトランスクリプトを確認することで、特定のジョブで使用されたファイルとそのバージョンに関する情報が提供され、エラーの特定に役立つためです。\typeout
コマンドまたは \wlog
コマンドを使用する場合は、.fd
ファイル内のスペースと空行が無視されることを覚えておくことが重要です。そのため、画面とトランスクリプトファイルに空白を得るためには、\typeout
または \wlog
の引数にコマンド \space
を使用する必要があります。
.fd
メカニズムを介して新しいエンコーディングスキームを導入することはできません。NFSS は、LaTeX 形式 (fonttext.ltx
など)、パッケージファイル、またはドキュメントのプリアンブルで明示的に宣言されていないエンコーディングスキームへの切り替え要求を拒否します。
6.6。数学で使用するために新しいフォントを宣言する方法
フォントサイズを指定する方法
すべてのテキストサイズについて、NFSSは
数学式をタイプセットするために使用される3つのサイズを維持します。一次添え字と上付き文字のサイズ( \ scriptStyle
);そして、高次のサブスクリプトと上付き文字のサイズ( \ ScriptScriptStyle
)。対応する数学サイズがまだわかっていない新しいテキストサイズに切り替えた場合、NFSSはテキストサイズの分数としてそれらを計算しようとします。 NFSSにこれらのサイズを計算したくない場合は、「\ DeclareMathsizes」を介して正しい値を自分で指定できます。この宣言は、このテキストサイズの外側のテキストサイズと3つの数学サイズの4つの引数を取ります。たとえば、次の宣言では、14pt(見出し)サイズの数学サイズがそれぞれ14pt、10pt、および7ptと定義されています。
1\DeclareMathSizes{14}{14}{10}{7}
以下の別の宣言(より高いレベルの見出しの場合)は、NFSSに、36ptのテキストサイズには数学サイズが必要ないことを通知します。これは、多くのフォントの不必要な負荷を回避するのに役立ちます。
1\DeclareMathSizes{36}{}{}{}
新しいシンボルを追加する方法
Math Alphabet Commandsを使用する方法については、フォーミュラに特別な形状の文字を作成する方法について説明しました。ここでは、 *シンボルフォント *と呼ばれる特別なシンボルを含むフォントを追加する方法と、そのようなシンボルを式でアクセスできるようにする方法を示します。
新しいシンボルフォントの追加は、新しい数学アルファベット識別子の宣言に似ています。「\ Declaresymbolfont」は、すべての数学バージョンのデフォルトを定義します。 数学記号フォントは、シンボリック名からアクセスできます。たとえば、AMSフォント「MSBM10」(以下のGlyphチャートを参照)をインストールする場合、最初に前のセクションで説明した宣言を使用してNFSSに書体を既知にする必要があります。
これらの指示はどのようになりますか
1\DeclareFontFamily{U}{msb}{}
2\DeclareFontShape{U}{msb}{m}{n}{ <5> <6> <7> <8> <9> gen * msbm
3 <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88> msbm10}{}
通常、 .fd
ファイルに配置されます。次に、次のコマンドですべての数学バージョンのシンボルフォントを宣言する必要があります。
1\DeclareSymbolFont{AMSb}{U}{msb}{m}{n}
フォントシェイプグループ「U/MSB/M/N」を「AMSB」という名前のシンボルフォントとして使用できます。このフォントファミリに大胆なシリーズがあった場合(実際、そうではありません)、その後、大胆な数学バージョンのセットアップを変更することができます。
1\SetSymbolFont{AMSb}{bold}{U}{msb}{b}{n}
フォント宣言の世話をした後、このシンボルフォントを数学モードで使用できます。しかし、NFSSに、たとえば数学モードの「\ lessdot」コマンドは、出力に対応するシンボルを生成するはずであることをどのように伝えるか?そのためには、「\ DecleRemathsymbol」を使用して、NFSSに独自のシンボル名を紹介する必要があります。
1\DeclareMathSymbol{cmd}{type}{symbol-font}{slot}
最初の引数は、選択したコマンド名です。 2番目の引数は、下の表に示されているコマンドの1つであり、シンボルの性質を決定します。これにより、式で発生したときにラテックスがシンボルの周りに置く空間の量が決まります。
ちなみに、「\ mathalpha」を除き、これらのコマンドは数学式で1つの引数を持つ関数として使用できます。
3番目の引数は、シンボルをフェッチする必要があるシンボルフォント、つまり「\ Declaresymbolfont」コマンドによって定義されるシンボリック名を識別します。 4番目の引数は、小数、octal、または16進数としてのフォントエンコードにおけるシンボルの位置を示します。上記のGlyphチャートからこのフォントのすべてのグリフの位置を簡単に見つけることができます。たとえば、 \ lessdot
はとして宣言できます
1\DeclareMathSymbol{\lessdot}{\mathbin}{AMSb}{"6c}
コマンド名の代わりに、最初の引数として単一の文字を使用できます。たとえば、「eulervm`パッケージにはフォームのいくつかの宣言があります
1\DeclareMathSymbol{0}{\mathalpha}{letters}{"30}
どこから桁を取得するかを指定します。
\ decraremathsymbol
コマンドは、一部のシンボルフォントの位置を指定します。したがって、このシンボルフォントに関連付けられているすべての外部フォントは、「\ Declaresymbolfont」と「\ setSymbolfont」コマンドを介してその位置に同じ文字を持つことが重要です。これを確保するための最も簡単な方法は、同じエンコードを持つフォントのみを使用することです(このエンコードの2つのフォントは同じ文字を含める必要はないため、「u」または不明なエンコードでない限り)。
上記のGlyphチャートでは、「Blackboard Bold」文字(ABC …ポジション `‘101」から始まる)も見つけることができます。これらの文字を数学のアルファベットとして使用する場合は、「\ DecleRemathalphabet」を使用してそれらを定義できます。ただし、このシンボルフォントが既にロードされている場合は、ショートカットを使用して個々のシンボルにアクセスすることをお勧めします。
1\DeclareSymbolFontAlphabet{\mathbb}{AMSb}
つまり、数学アルファベット識別子の名前と、以前に宣言されたシンボルフォントの象徴的な名前を提供します。
不必要にフォントを2回ロードしない重要な理由は、TEXでいつでもアクティブにできる16の数学フォントの上限があることです。この制限を計算する際に、各シンボルフォントがカウントされます。数学アルファベットは、それらが実際にドキュメントで使用されている場合にのみカウントされ、各数学バージョンでローカルにカウントされます。したがって、8つのシンボルフォントが宣言されている場合、すべてのバージョン内で最大8つの(おそらく異なる)数学アルファベット識別子を使用できます。
簡単な要約として、新しいシンボルフォントを導入するには、少数の「\ Declaresymbolfont」および「\ setsymbolfont」宣言と潜在的に多数の「\ decraremathsymbol」宣言を発行する必要があります。したがって、このようなフォントの追加は、パッケージファイルで行うのが最適です。
新しい数学バージョンを紹介する方法
標準設定では、標準と太字の2つの数式バージョンが自動的に宣言されることを既に
説明しました。追加のバージョンを導入するには、新しい数式バージョンの名前を引数として取る\DeclareMathVersion
宣言を使用します。以前に宣言されたすべてのシンボルフォントとすべての数式アルファベットは、この数式バージョンで自動的に使用可能になります。これらのフォントには、\DeclareMathAlphabet
または\DeclareSymbolFont
で指定したデフォルトのフォントが割り当てられます。
次に、このセクションの前半に示すように、 Fonts in Mathの記事に示すように、適切な「setmathalphabet」と「\ setsymbolfont」コマンドを発行することにより、新しいバージョンのセットアップを変更できます。繰り返しますが、新しい数学バージョンの導入は通常、パッケージファイルで行われます。
シンボルフォントのセットアップを変更する方法
新しいシンボルフォントを追加して、より多くのシンボルにアクセスする方法を見てきました。同じコマンドを使用して、既存のセットアップを変更できます。一部またはすべての数学バージョンで特別なフォントを使用することにした場合、この機能は興味深いかもしれません。
以下はデフォルトのラテックス設定です。
1\DeclareMathVersion{normal} \DeclareMathVersion{bold}
2\DeclareSymbolFont{operators} {OT1}{cmr}{m} {n}
3\DeclareSymbolFont{letters} {OML}{cmm}{m}{it}
4\DeclareSymbolFont{symbols} {OMS}{cmsy}{m}{n}
5\DeclareSymbolFont{largesymbols} {OMX}{cmex}{m}{n}
6
7% Special bold fonts only for these:
8\SetSymbolFont {operators}{bold}{OT1}{cmr}{bx}{n}
9\SetSymbolFont {letters} {bold}{OML}{cmm}{b}{it}
標準のセットアップでは、「\ log」や「\ max」などの演算子が作成した数字とテキストは、「演算子」と呼ばれるシンボルフォントから取得されます。これを変更して、これらの要素がメインテキストフォントとよく混ざり合うように - コンピューターモダンローマではなくコンピューターモダンなサン - 次のコマンドを発行できます。
1\SetSymbolFont{operators}{normal}{0T1}{cmss}{m} {n}
2\SetSymbolFont{operators}{bold} {0T1}{cmss}{bx}{n}
名前「シンボル」と「largeSymbols」のシンボルフォントは、Texでユニークな役割を果たします。そのため、それらに関連付けられた特別な数の「fontdimen」パラメーターが必要です。したがって、これらの2つのシンボルフォントとして使用できます。原則として、 \ declareFontFamily
の3番目のパラメーターまたは \ DeclareFontshape
の6番目のパラメーターを使用して、ロード時に任意のパラメーターを任意のパラメーターに追加できます。
6.7。独自の .fd
ファイルを定義する方法(例)
(postscript)フォントを設定し、必要な .fd
ファイルを作成する場合は、この記事で前述した手順に従う必要があります。 「fontinst」が必要なフォントメトリックファイルを生成するために使用される場合、対応する .fd
ファイルも自動的に生成されます。ただし、どのフォントエンコードが使用されているかを知っていれば、単一のフォントファミリの「.fdファイルを手で簡単に書き込むことができます。例として、「t1bch.fd
宣言ファイルを「bitstream charter *」の「t1」エンコードで研究しましょう。
1\ProvidesFile{t1bch.fd}[2001/06/04 font definitions for T1/bch.]
2% Primary declarations
3\DeclareFontFamily{T1}{bch}{}
4\DeclareFontShape{T1}{bch}{m}{n}{<-> bchr8t}{}
5\DeclareFontShape{T1}{bch}{m}{sc}{<-> bchrc8t}{}
6\DeclareFontShape{T1}{bch}{m}{sl}{<-> bchro8t}{}
7\DeclareFontShape{T1}{bch}{m}{it}{<-> bchri8t}{}
8\DeclareFontShape{T1}{bch}{b}{n}{<-> bchb8t}{}
9\DeclareFontShape{T1}{bch}{b}{sc}{<-> bchbc8t}{}
10\DeclareFontShape{T1}{bch}{b}{sl}{<-> bchbo8t}{}
11\DeclareFontShape{T1}{bch}{b}{it}{<-> bchbi8t}{}
12% Substitutions
13\DeclareFontShape{T1}{bch}{bx}{n}{<->ssub * bch/b/n}{}
14\DeclareFontShape{T1}{bch}{bx}{sc}{<->ssub * bch/b/sc}{}
15\DeclareFontShape{T1}{bch}{bx}{sl}{<->ssub * bch/b/sl}{}
16\DeclareFontShape{T1}{bch}{bx}{it}{<->ssub * bch/b/it}{}
17\endinput
最初の行は識別行です。次に、\DeclareFontFamily
を使用してフォントファミリとエンコーディング(bch
と T1
)を宣言します。このコマンドの引数は、ファイル名のエンコーディングが小文字であることを除き、.fd
ファイルの名前に対応する必要があります。次に、シリーズと形状の各組み合わせが .tfm
ファイルの名前にマッピングされます。これらのフォントは任意のサイズに拡大縮小されます(<->
に注意してください)。ファイルの2番目の部分では、フォントが利用できない組み合わせに対する代替を設定します(つまり、太字拡張シリーズを太字シリーズに置き換えます)。
追加の Charter フォント(Black と BlackItalic)をお持ちの場合は、対応する定義を .fd
ファイルに追加する必要があります。もちろん、T1
文字セットをエミュレートするには、まず適切な仮想フォントを用意する必要があります。幸いなことに、多くのフォントはインターネットからダウンロードできます。
独自の .fd
ファイルを作成するもう一つの理由は、異なるフォントファミリを統合し、単一の新しいフォントファミリとして LaTeX に導入する必要がある場合です。例えば、Aldus フォントファミリは、Palatino 書体(元々はディスプレイ書体として設計されました)の補助として設計されています。Aldus には太字シリーズがないため、太字の代替として Palatino が自然な選択肢となります。以下の例では、Aldus のミディアムシリーズと Palatino の太字を統合し、複合フォントファミリを zasj
と呼んでいます。ここでは、完全な .fd
ファイルの一部のみを示していますが、このアイデアを説明するには十分です。
1\ProvidesFile{t1zasj.fd}
2 [2003/10/12 font definitions for T1 Aldus/Palatino mix.]
3\DeclareFontFamily{T1}{zasj}{}
4% Medium series
5\DeclareFontShape{T1}{zasj}{m}{n} {<->pasr9d}{}
6\DeclareFontShape{T1}{zasj}{m}{sc}{<->pasrc9d}{}
7\DeclareFontShape{T1}{zasj}{m}{it}{<->pasri9d}{}
8\DeclareFontShape{T1}{zasj}{m}{sl}{<->ssub * pasj/m/it}{}
9% Bold series
10\DeclareFontShape{T1}{zasj}{b}{n}{<-> pplb8t}{}
11\DeclareFontShape{T1}{zasj}{b}{sc}{<->pplbc8t}{}
12\DeclareFontShape{T1}{zasj}{b}{sl}{<->pplbo8t}{}
13\DeclareFontShape{T1}{zasj}{b}{it}{<->pplbi8t}{}
この「擬似ファミリー」にアクセスするには、「T1」エンコードで「Zasj」を選択する必要があります。また、「.fd`ファイルが置換を提供しないため、「\ textbf」が太字になるのではなく、太字に切り替えることを確認する必要があります。これはすべて、このような小さなパッケージによって自動的に提供できます。
1\ProvidesPackage{fontmix}[2003/10/12 T1 Aldus/Palatino mix.]
2\RequirePackage[T1]{fontenc}
3\renewcommand\rmdefault{zasj} \renewcommand\bfdefault{b}
したがって、「fontmix」パッケージをロードすることにより、見出しのためにAldusとPalatino Boldを取得します。このようなフォントミックスは、テキストを強化することはあまりないことが多いため、この例ではランダムな組み合わせの作成を示唆していません。
6.8。宣言の順序
NFSSでは、すべての宣言を特定の順序で提供する必要があります。これにより、必要なすべての情報を指定したかどうかを確認できます。オブジェクトを間違った順序で宣言すると、文句が表示されます。ここにあなたが尊重しなければならない依存関係は次のとおりです。
\DeclareFontFamily
は、エンコード方式が\DeclareFontEncoding
で以前に宣言されているかどうかを確認します。\DeclareFontShape
は、フォントファミリが要求されたエンコード (\DeclareFontFamily
) で使用可能であると宣言されているかどうかを確認します。\DeclareSymbolFont
は、エンコード方式が有効であることを確認します。\SetSymbolFont
はさらに、要求された数式バージョン (\DeclareMathVersion
) が宣言されていること、および要求されたシンボルフォント (\DeclareSymbolFont
) が宣言されていることを確認します。\DeclareSymbolFontAlphabet
は、アルファベット識別子のコマンド名が使用可能であること、およびシンボルフォントが宣言されていることを確認します。\DeclareMathAlphabet
は、選択されたコマンド名が使用可能であること、およびエンコード方式が宣言されていることを確認します。\SetMathAlphabet
は、アルファベット識別子が以前に\DeclareMathAlphabet
または\DeclareSymbolFontAlphabet
で宣言されていること、および数式バージョンとエンコード方式が既知であることを確認します。\DeclareMathSymbol
は、コマンド名が使用可能であること(つまり、未定義であるか、以前に数式記号として宣言されている)と、シンボルフォントが以前に宣言されていることを確認します。\begin{document}
コマンドに到達すると、NFSS は追加のチェックを行います。例えば、すべてのエンコード方式の置換デフォルトが、既知のフォント形状グループ宣言を指していることを確認します。