나는 다음에 대한 답변을 읽었습니다.
하지만 현재 사용하는 대안은 언급되지 않았습니다.
\newcommand{\arnold}{Arnold Schwarzenegger{}}
물론 {}
명령을 호출한 후 추가하는 것보다 입력이 적고 오류가 발생하기 쉽습니다. 지금까지 어떤 문제도 발생하지 않았습니다. 반대로 \xspace
원하지 않는 공간을 삽입하는 복잡한 경우가 있다는 것을 알았습니다 {}
.
그래서 나는 왜 아무도 이것을 사용하지 않는지, 그리고 그것이 내가 알지 못하는 문제를 일으킬 수 있는지 궁금했습니다.
편집: 댓글을 보고 나서 저는 항상 매개변수가 있는 명령과 함께 이 접근 방식을 사용했다는 것을 깨달았습니다. 따라서 제 예는 다음과 같아야 했습니다.
\newcommand{\arnold}[1]{Arnold #1 Schwarzenegger}
그러면 내 코드가 아무리 유사해 보이더라도 항상 내 예제를 확인하는 방법을 배울 수 있습니다.
따라서 실제로는 {}보다는 올바른 간격을 유발하는 인수입니다. 누군가 나에게 왜 그 주장이 달라지는지 설명해 준다면 나는 전적으로 기뻐할 것입니다.
답변1
문제는 소스의 공백이 출력에서 공백을 생성하지 않는 이유입니다. 뒤의 공백은 \arnold
명령 이름을 끝내기 위해 사용되며 토큰화되지 않으므로 출력이 생성되지 않습니다. 그래서 논증 없는 형태로
\arnold text
다음으로 확장
Arnold Schwarzenegger{}text
{}
이는 아무것도 유용하지 않은 "Arnold Schwarzeneggertext"로 조판됩니다 .
반대로 인수가 있는 형식에서는 이후 공백이 \arnold
토큰화되지 않는다는 것이 여전히 사실입니다.
\arnold {} text
그리고
\arnold{} text
동일한 방식으로 구문 분석되며 둘 다 다음으로 확장됩니다.
Arnold␣␣Schwarzenegger␣text
따라서 인수 뒤의 공백은 일반 단어 공백으로 처리되지만 Arnold와 Schwarzenegger 사이에는 두 개의 공백 토큰 공백이 생깁니다.