클래스 파일에서 이것을 선언했습니다.
\newcommand{\fullname}[1]{\gdef\@fullname{#1}}
와 함께\fullname{john doe}
클래스 파일의 전체 이름을 얻으려고합니다. 작동 \MakeUperrcase{\@fullname}
하지만 작동 \capitalisewords
하지 않습니다. 나는 시도했다
\capitalisewords\@fullname
그리고
\capitalisewords{\@fullname}
하지만 출력은 항상
존 도우
대신에
존 도우
확인해보니 \@fullname
인쇄가 되네요
존 도우
답변1
\capitalisewords
인수를 확장하지 않으므로 David가 주석에서 제안한 것처럼 먼저 인수를 확장해야 합니다.
\expandafter\capitalisewords\expandafter{\@fullname}
\xcapitalisewords
또는 동일한 작업을 수행하는 바로 가기 명령을 사용하십시오 .
\xcapitalisewords{\@fullname}
인수가 자동으로 확장되지 않는 이유는 첫 글자 대문자 메커니즘이 단일 인수를 사용하는 의미적 마크업을 허용하기 때문입니다. 예를 들어:
\newcommand*{\strong}[1]{\textcolor{red}{\textbf{#1}}}
\capitalisewords{\strong{lorem} ipsum}
이는 효과적으로
\strong{\MakeUppercase lorem} \MakeUppercase ipsum
따라서 의미적 마크업은 대소문자 변경을 방해하지 않습니다. 인수가 확장된 경우 이 인스턴스는 다음과 같이 중단됩니다.
\textcolor{\MakeUppercase red}{\textbf{lorem}} \MakeUppercase ipsum
\textcolor
(실제로도 확장 하면 이보다 더 복잡해집니다 .)
인수가 그룹이 뒤따르지 않는 제어 시퀀스로 시작하는 경우 \capitalisewords
문자 또는 기호 명령(예: \aa
)이라고 가정합니다.
\capitalisewords{\aa lorem ipsum}
된다
\MakeUppercase \aa lorem \MakeUppercase ipsum
이것이 귀하의 예에서 일어난 일입니다. 이것이 바로 당신이
\MakeUppercase\@fullname