여분의 중괄호 제거

여분의 중괄호 제거

이 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

\@firstofoneLaTeX 커널에서는 다음과 같이 정의됩니다.

\long\def\@firstofone#1{#1}

첫 번째 토큰을 인수로 가져와 다시 출력하므로 "아무 것도" 수행하지 않습니다. 그러나 인수가 단일 토큰이 아니고 중괄호 안의 토큰 그룹인 경우 중괄호의 한 수준이 제거됩니다.

답변2

그것은 주로 의존한다무엇당신이 다루고있는 명령.

가 있는 경우 \textit{{xyz}}추가 중괄호는 그룹화 수준을 추가합니다. \seqsplit이 명령은 인수를 한 번에 한 항목씩 검색하고 중괄호 그룹은 단일 항목이기 때문에 완전히 다른 게임이기 때문입니다 .

seqsplit이에 대한 내용은 2.3 섹션 의 매뉴얼에 설명되어 있습니다 .

2.3 그룹화 및 명령

이 명령은 \seqsplit중괄호 안의 문자 사이에 중단점을 삽입하지 않습니다 {...}.

[...(생략된 예시)...]

주위의 버팀대는 {kahg}이 그룹의 분열을 방지했습니다. 이 효과는 시퀀스 내부의 특수 하위 문자열을 조판하는 데 사용할 수 있습니다.

중괄호는 매우 중요한 구문적 의미를 갖고 있으므로 일상적으로 사용해서는 안 됩니다.

관련 정보