
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
\seqsplit
nã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.