
En este MWE, demuestro mi 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}
Algunos comandos funcionan con llaves adicionales, otros no. ¿Por qué es así y cómo puedo hacer que funcionen preprocesando mis argumentos cuando tienen llaves adicionales?
Respuesta1
Si el argumento no está vacío y se pueden eliminar los espacios iniciales, entonces el siguiente truco ayuda:
\makeatletter
\newcommand{\dosomethingelse}[1]{%
\expandafter\seqsplit\expandafter{\@firstofone#1}%
}
\makeatother
\@firstofone
se define en el kernel de LaTeX como:
\long\def\@firstofone#1{#1}
Toma el primer token como argumento y lo genera nuevamente, por lo que no hace "nada". Pero si el argumento no es un token único, sino un grupo de tokens entre llaves, entonces se elimina un nivel de llaves.
Respuesta2
Depende principalmente dequécomando con el que estás tratando.
Si es así \textit{{xyz}}
, las llaves adicionales simplemente añaden un nivel de agrupación; porque \seqsplit
es un juego de pelota completamente diferente, porque este comando escanea su argumento un elemento a la vez y un grupo entre corchetes es un solo elemento.
Esto se describe en el manual de seqsplit
, en el apartado 2.3:
2.3 Agrupación y comandos
El comando
\seqsplit
no inserta puntos de interrupción entre las letras dentro de llaves{...}
.[...(ejemplo omitido)...]
Los tirantes alrededor
{kahg}
impidieron la división de este grupo. Este efecto se puede utilizar para componer subcadenas especiales dentro de secuencias.
Las llaves tienen un significado sintáctico muy importante y no deben usarse de manera casual.