\edef 内のマクロ間のスペース

\edef 内のマクロ間のスペース

ステートメント内の 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}%

関連情報