テキストに大文字/大文字が現れるたびに、別のフォントを使用することは可能ですか。
したがって、「これはテキストです。」という文がある場合、最初の T をテキストの残りの部分とは異なるフォントにしたいと思います。
「これは頭字語を含むテキストです GMT」という文がある場合、最初の T と GMT を残りのフォントとは異なるフォントにしたいと思います。
同様に、「これは固有名詞「ロンドン」を含むテキストです」の場合、最初の T と L を別のフォントにしたいと思います。
私が希望するエフェクトの種類のスクリーンショットを共有します。
これを文書全体(おそらく複数の章)に対して行う必要があります。したがって、各文字を個別に変更せずに、これを自動的に実行する方法を見つけたいと思っています。
答え1
XeLaTeX でコンパイルするときに、このメカニズムを使用できます\XeTeXinterchartoks
。
アイデアは、16 進文字コード 0041 (A) から 005A (Z) までのラテン大文字で構成される文字クラスを定義することです。
次に、他のすべての文字からこの新しいクラスへの遷移を定義します。他の文字は、単語境界のクラス 0 または 4095 を持ちます。この遷移では、\cal
次の大文字を引数として挿入できます。私の理解が正しければ、このマクロを挿入すると、最初の大文字の後にさらに大文字がある場合に別の遷移がトリガーされ、後続の文字も の引数として表示されます\cal
。
MWEは主にXeLaTeX: 非ラテン語テキスト内のラテン語テキストに異なるフォント ファミリを指定するにはどうすればよいでしょうか?そしてXelatex のメインフォントの数字サイズを変更する:
\documentclass{article}
\XeTeXinterchartokenstate = 1\relax
\newXeTeXintercharclass\ucletterclass
\ExplSyntaxOn
\int_step_inline:nnnn {"0041}{1}{"005A}
{ \XeTeXcharclass #1 = \ucletterclass }
\ExplSyntaxOff
\def\mycal#1{$\cal{#1}$}
\XeTeXinterchartoks 0 \ucletterclass = {\mycal}
\XeTeXinterchartoks 4095 \ucletterclass = {\mycal}
\begin{document}
This is some text.
This is some text with an acronym in it GMT
This is some text with a proper name in it: London
\end{document}
結果:
\XeTeXinterchartokenstate = 0\relax
どこかで大文字を変更せずに使用する必要がある場合は、で遷移メカニズムを一時的にオフにできることに注意してください。
答え2
他の人の役に立つかもしれないので、私のコード/ソリューションを共有します。これは、Marijn の回答とその投稿内のリンクに基づいています。
\documentclass[a4paper,11pt]{book}
\usepackage[default]{frcursive}
\XeTeXinterchartokenstate = 1\relax
\newXeTeXintercharclass\ucletterclass
\ExplSyntaxOn
\int_step_inline:nnnn {"0041}{1}{"005A}
{ \XeTeXcharclass #1 = \ucletterclass }
\ExplSyntaxOff
\def\mycal#1{$\cal{#1}$}
\XeTeXinterchartoks 0 \ucletterclass = {\begingroup \fontfamily{phv}\fontseries{m}\fontshape{n}\selectfont}
\XeTeXinterchartoks \ucletterclass 0 = {\endgroup}
\XeTeXinterchartoks 4095 \ucletterclass = {\begingroup \fontfamily{phv}\fontseries{m}\fontshape{n}\selectfont}
\XeTeXinterchartoks \ucletterclass 4095= {\endgroup}
\begin{document}
This is some text.
This is some text with an acronym in it GMT
This is some text with a proper name in it: London
\end{document}
結果は次のとおりです。