
이 MWE에서는 내 문제를 보여줍니다.
\documentclass{article}
\usepackage{seqsplit}
\newcommand{\dosomething}[1]{\uppercase{#1}}
\newcommand{\dosomethingelse}[1]{\seqsplit{#1}}
\begin{document}
\dosomething{looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong}
% works with extra {...}
\dosomething{{looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong}}
\dosomethingelse{looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong}
% does not work with extra {...}
\dosomethingelse{{looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong}}
\end{document}
일부 명령은 추가 중괄호와 함께 작동하지만 일부 명령은 작동하지 않습니다. 그 이유는 무엇이며, 추가 중괄호가 있는 경우 인수를 전처리하여 작동하게 하려면 어떻게 해야 합니까?
답변1
인수가 비어 있지 않고 시작 공백을 제거할 수 있는 경우 다음 트릭이 도움이 됩니다.
\makeatletter
\newcommand{\dosomethingelse}[1]{%
\expandafter\seqsplit\expandafter{\@firstofone#1}%
}
\makeatother
\@firstofone
LaTeX 커널에서는 다음과 같이 정의됩니다.
\long\def\@firstofone#1{#1}
첫 번째 토큰을 인수로 가져와 다시 출력하므로 "아무 것도" 수행하지 않습니다. 그러나 인수가 단일 토큰이 아니고 중괄호 안의 토큰 그룹인 경우 중괄호의 한 수준이 제거됩니다.
답변2
그것은 주로 의존한다무엇당신이 다루고있는 명령.
가 있는 경우 \textit{{xyz}}
추가 중괄호는 그룹화 수준을 추가합니다. \seqsplit
이 명령은 인수를 한 번에 한 항목씩 검색하고 중괄호 그룹은 단일 항목이기 때문에 완전히 다른 게임이기 때문입니다 .
seqsplit
이에 대한 내용은 2.3 섹션 의 매뉴얼에 설명되어 있습니다 .
2.3 그룹화 및 명령
이 명령은
\seqsplit
중괄호 안의 문자 사이에 중단점을 삽입하지 않습니다{...}
.[...(생략된 예시)...]
주위의 버팀대는
{kahg}
이 그룹의 분열을 방지했습니다. 이 효과는 시퀀스 내부의 특수 하위 문자열을 조판하는 데 사용할 수 있습니다.
중괄호는 매우 중요한 구문적 의미를 갖고 있으므로 일상적으로 사용해서는 안 됩니다.