
ステートメント内の 2 つのマクロの間にスペースを入れるにはどうしたらよいか知りたいですedef
。私の目標は、フォームのファイル名をFirstName LastName
マクロに保存し、後でそのマクロをコマンドで使用することですincludegraphics
。
問題は、私が試したことすべてが望ましくない結果を返すことです。
\edef\PictureName{\FirstName \LastName} ➞ "FirstNameLastName"
\edef\PictureName{\FirstName{} \LastName} ➞ "FirstName{} LastName"
\edef\PictureName{{\FirstName} \LastName} ➞ "{FirstName} LastName"
\edef\PictureName{\FirstName\ \LastName} ➞ "FirstName\ LastName"
つまり、スペースが格納されていないか\PictureName
、追加の括弧またはバックスラッシュが格納されています。これを正しく行うにはどうすればよいですか?
答え1
目にする問題はいつもの「TeX は制御シーケンスの後のスペースを無視します」ただし、ここではタイプセット出力を生成するときのように修正することはできません。その場合、入力でスペース文字を制御シーケンスから分離する(そしてもちろんスペースを生成する)任意の方法が機能します。
\FirstName{} \LastName
\FirstName{ }\LastName
{\FirstName} \LastName
\FirstName\ \LastName
\FirstName\space\LastName
\@firstofone{\FirstName} \LastName % assuming the usual definition of \@firstofone
しかし、ここでは拡張のみのコンテキストであり、この場合、スペーストークンまたは何かが必要です拡大するをスペース トークンに変換し、それを制御シーケンスから分離します。括弧を使用した方法と制御スペースを使用した方法は、括弧が展開されないためここでは機能せず、\edef
の展開の影響を受けません。これらの方法は、タイプセットのコンテキストでは (グループを形成して) 消えるため機能します。制御スペース\
も展開されないため、\edef
そのまま残ります。
Plain と LaTeX はどちらも を定義する\def\space{ }
ので、次のように実行できます。
\edef\PictureName{\FirstName\space\LastName}
これは、 の展開のみのコンテキストでは\edef
、 が展開され\FirstName
( はまだ見なくても\space
)、次に\space
スペース トークンに展開され、最後に が展開されます\LastName
。
この方法は、(1 つの) 展開によっても機能する\@firstofone
ため、次のように機能します。\@firstofone
\edef\PictureName{\@firstofone{\FirstName} \LastName}
これにより が展開され\@firstofone{\FirstName}
になり\FirstName
、 も展開されます。次にスペース トークンが表示され、 が\LastName
展開されます。次の関連する質問を参照してください。スペース文字をスペーストークンに変換する
答え2
楽しみのために、
課題を 1 つだけではなく 2 つ用意しましょう。
ゲームは
「リサイクル」でプレイできます\PictureName
。
例えば:
\def\PictureName{ \LastName}%
\edef\PictureName{\FirstName\PictureName}%
または:
\def\PictureName{ }%
\edef\PictureName{\FirstName\PictureName\LastName}%
または:
\def\PictureName#1{%
\edef\PictureName{\FirstName#1\LastName}%
}%
\PictureName{ }%
または:
\def\PictureName#1{#1}%
\edef\PictureName{\PictureName{\FirstName} \LastName}%
または:
\def\PictureName#1{#1}%
\edef\PictureName{\FirstName\PictureName{ \LastName}}%
または:
\def\PictureName#1{#1}%
\edef\PictureName{\FirstName\PictureName{} \LastName}%
または:
\def\PictureName#1{#1}%
\edef\PictureName{\FirstName\PictureName{ }\LastName}%
または:
\def\PictureName!{}%
\edef\PictureName{\FirstName\PictureName! \LastName}%