
質問に関連して\makeatletter と \makeatother は何をしますか?LaTeX2e用、ここではLaTeX3に関連
何をす\ExplSyntaxOn
べき\ExplSyntaxOff
か?
答え1
LaTeX3コーディング言語では、関数名や変数名に「文字」として とをexpl3
使用します。これにより、文書内でコードレベルの素材を使用することができます。:
_
expl3
\cs_new:Npn .... % fails: command \cs followed by characters '_', 'n', 'e', 'w', etc.
\ExplSyntaxOn
\cs_new:Npn .... % works here: command name \cs_new:Npn
この\ExplSyntaxOn
コマンドはこれを有効にし、スペースと行末の扱いも変更して無視するようにします。つまり、
\ExplSyntaxOn
\cs_new:Npn \my_function:nn #1#2
{
% Code hre
}
%
は、各行の末尾に を必要としません(「通常の」LaTeX2e コードと比較)。出力にスペースを含めることを可能にするために、~
は によって「通常の」スペースになります\ExplSyntaxOn
。スペースの動作のこの変更はexpl3
名前にアクセスするために必須ではありませんが、 の組み合わせによって で「より明確な」プログラミングが可能になるため、この 2 つは密接に結びついていることに注意してくださいexpl3
。
\ExplSyntaxOff
これを逆にして、、を以前の値に戻し:
、スペースを再び「重要」にします。_
~
\ExplSyntaxOn
技術的には、コマンド名にカテゴリコードを使用するという考え方はまったく同じです。\makeatletter と \makeatother は何をしますか?ただし、\ExplSyntax...
スイッチはさらに多くのことを行います。
コードブロック内のの扱いについて注意すべき点がいくつかあります~
。まず、~
コードブロック内の「スペース」と同様に、~
行頭の はTeXによって無視されます。
\ExplSyntaxOn
~ \cs_new:Npn ....
と全く同じです
\ExplSyntaxOn
\cs_new:Npn ....
'スペース' は無視されます。
次に、 は~
コード ブロック内の「スペース」ですが\␣
、\~
は依然として区別され、 LaTeX2e 定義を持ちます。
完全性のために、さらにいくつか詳細を説明します。\ExplSyntaxOn
また、暗黙的に構文の一部である他の文字に対しても、catcodes を適切に設定します。
- TAB — 無視されます(スペースと同様)
"
— 16進数入力に必要な「その他」の文字(例:\int_eval:n { "F }
(= 15))&
— 表形式の資料の配置文字^
^^64
—スタイル表記の上付き文字|
expl3
—ブール式に必要な「その他」の文字
答え2
LaTeX2e カーネル マクロと expl3 関数の組み合わせに関する情報を追加したいと思います。 コマンドは、\ExplSyntaxOn
特殊トークンの catcode を変更しません@
。したがって、LaTeX2e カーネル マクロと expl3 関数を組み合わせるには、 も呼び出す必要があります\makeatletter
。
\ExplSyntaxOn
\makeatletter
\cs_set:Npn \@maketitle…