
\sffamily
構文がorコマンドに似ている新しいコマンドを作成するにはどうすればよいでしょうか\ttfamily
。例:
{\mycommand xxxxx}
背景情報: TikZ ノードのオプションでは、font=
のようなコマンドは許可されません\mycommand{}
。これは正常に動作します:
\tikzstyle{JSToken} = [shape=rounded rectangle,font={\ttfamily}]
しかし、これはうまくいかない
\tikzstyle{JSToken} = [shape=rounded rectangle,font={\texttt}]
\myfancyformat
そして、この形式で使用できるように、ノードのクラスのテキスト形式をカスタマイズするコマンドが必要です。
{\myfancyformat Stupid Text needs Fancy Format}
構文は次のようになります\sffamily
:
{\sffamily Some Sans Serif formated Text}
自分の考えを表現できればと思います。
答え1
制御シーケンス\foo
が使用されている{\foo something}
場合、それはほぼ間違いなくパラメータのないマクロであり、通常は TeX レジスタやフォント選択の内部設定のセットに展開されます。TeX には内部レジスタがあり、その値は段落の幅、ベースラインスキップのサイズなど、内部 TeX アルゴリズムに影響します。この場合、{
はグループの始まりで、}
はグループの終わりであり、レジスタの設定やフォント選択はこのグループ内でローカルです。つまり、グループが終了すると、つまり で、以前のパラメータ値が復元されます}
。
制御シーケンス\foo
に使用法がある場合\foo{something}
、それはほぼ確実に 1 つのパラメータ ( によって定義) を持つマクロであり、そのパラメータが正式に としてマークされている場所\def\foo#1{body}
に展開され、 のコマンドによって任意の方法で使用できます。この場合、コンテキスト内のおよび は開始/終了グループではなく、パラメータ区切り文字にすぎないことに注意してください。これらはここでは別の役割を果たします。TeX はコンテキスト依存のインタープリタです。body
#1
body
{
}
\foo{something}
\foo
使用法にパラメータのないマクロがある場合は、次のような構文で{\foo something}
新しいマクロを定義できます。\newfoo
\newfoo{something}
\def\newfoo#1{{\foo #1}}
ここで最初の は{
マクロの本体を開き (これは\def
TeX プリミティブが使用される場合の構文規則の一部です)、2 番目の はが展開される{
ときにグループを開くことに注意してください。次にいくつかの TeX パラメータを設定し、パラメータが印刷されて、最初の によりグループが閉じられます。2 番目のはプリミティブの構文規則の一部です。\newfoo
\foo
#1
}
}
\def
逆の方法:\foo{something}
構文から{\newfoo something}
構文へは可能な場合もありますが、より複雑で、 pure\foo{something}
を使用する場合よりもグループ begin/end が 1 つ多くなります。
\def\newfooA#1{\foo{#1}\egroup}
\def\newfoo{\expandafter\newfooA\expandafter{\iffalse}\fi}
答え2
の構文には中括弧が含まれていると誤解しているようです\ttfamily
。そうではありません。中括弧はその時点\color{red}
で色を変更したり\large
フォント サイズを変更したりするのと同じように、単にその時点でフォントを変更するだけです。
したがって、構文については特別なことは何もする必要はありません。
\newcommand\mycommand{\color{red}\large\ttfamily}
必要な構文で大きな赤い等幅フォントが作成されます。