
In diesem MWE demonstriere ich mein Problem:
\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}
Manche Befehle funktionieren mit zusätzlichen geschweiften Klammern, andere nicht. Warum ist das so und wie kann ich sie zum Laufen bringen, indem ich meine Argumente vorverarbeite, wenn sie zusätzliche geschweifte Klammern haben?
Antwort1
Wenn das Argument nicht leer ist und am Anfang stehende Leerzeichen entfernt werden können, hilft folgender Trick:
\makeatletter
\newcommand{\dosomethingelse}[1]{%
\expandafter\seqsplit\expandafter{\@firstofone#1}%
}
\makeatother
\@firstofone
wird im LaTeX-Kernel wie folgt definiert:
\long\def\@firstofone#1{#1}
Es schnappt sich das erste Token als Argument und gibt es wieder aus, tut also "nichts". Handelt es sich bei dem Argument aber nicht um ein einzelnes Token, sondern um eine Token-Gruppe in Klammern, dann wird eine Klammernebene entfernt.
Antwort2
Es hängt vor allem davon abWasBefehl, mit dem Sie es zu tun haben.
Wenn Sie haben \textit{{xyz}}
, fügen die zusätzlichen Klammern lediglich eine Gruppierungsebene hinzu; bei \seqsplit
handelt es sich um eine völlig andere Sache, da dieser Befehl sein Argument Element für Element scannt und eine Gruppe mit Klammern ein einzelnes Element ist.
Dies wird im Handbuch von seqsplit
im Abschnitt 2.3 beschrieben:
2.3 Gruppierung und Befehle
Der Befehl
\seqsplit
fügt keine Haltepunkte zwischen den Buchstaben in Klammern ein{...}
.[...(ausgelassenes Beispiel)...]
Die Klammern
{kahg}
verhindern, dass diese Gruppe aufgeteilt wird. Dieser Effekt kann zum Setzen spezieller Teilzeichenfolgen innerhalb von Sequenzen verwendet werden.
Klammern haben eine sehr wichtige syntaktische Bedeutung und sollten nicht leichtfertig verwendet werden.