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