Remova chaves extras

Remova chaves extras

Neste MWE, demonstro meu problema:

\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}

Alguns comandos funcionam com chaves extras, outros não. Por que isso acontece e como posso fazê-los funcionar pré-processando meus argumentos quando eles têm chaves extras?

Responder1

Se o argumento não estiver vazio e os espaços iniciais puderem ser removidos, o seguinte truque ajudará:

\makeatletter
\newcommand{\dosomethingelse}[1]{%
  \expandafter\seqsplit\expandafter{\@firstofone#1}%
}
\makeatother

\@firstofoneé definido no kernel do LaTeX como:

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

Ele pega o primeiro token como argumento e o exibe novamente, portanto não faz "nada". Mas se o argumento não for um único token, mas um grupo de tokens entre colchetes, então um nível de colchetes será removido.

Responder2

Depende principalmente deo quecomando com o qual você está lidando.

Se você tiver \textit{{xyz}}, os colchetes adicionais apenas adicionam um nível de agrupamento; pois \seqsplité um jogo completamente diferente, porque esse comando examina seu argumento, um item por vez, e um grupo contraventado é um único item.

Isso está descrito no manual do seqsplit, na seção 2.3:

2.3 Agrupamento e Comandos

O comando \seqsplitnão insere pontos de interrupção entre as letras entre colchetes {...}.

[...(exemplo omitido)...]

As chaves ao redor {kahg}impediram a divisão deste grupo. Este efeito pode ser usado para composição de substrings especiais dentro de sequências.

Os colchetes têm um significado sintático muito importante e não devem ser usados ​​de forma casual.

informação relacionada