\edef의 매크로 사이의 공백

\edef의 매크로 사이의 공백

명령문에서 두 매크로 사이에 공백을 넣는 방법이 궁금합니다 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

재미를 위해
하나가 아닌 두 가지 과제를 해보자. "재활용"을 통해
게임을 플레이할 수 있습니다 .
\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}%

관련 정보