%20an%20einen%20anderen%20Befehl%20weiterzuleiten.png)
Ich habe Mühe, einen LaTeX3-Befehl elegant zu definieren und seine Argumente (insbesondere Sterne, Token, Verzierungen) an einen anderen Befehl weiterzuleiten. Ich denke, ich könnte es vielleicht mit oder ähnlich zum Laufen bringen \expandonce
, aber ich denke, es gibt eine bessere Lösung.
MWE:
\documentclass[]{article}
\NewDocumentCommand{\mycommand}{st't-t.e_O{}m}{%
I am a command called \IfBooleanT{#1}{with a star, }\IfBooleanT{#2}{with a prime, }\IfBooleanT{#3}{with a dash, }\IfBooleanT{#4}{with a dot, }\IfNoValueTF{#5}{}{with an underscore (#5), } with the optional argument ``#6'' and with the mandatory argument ``#7''.
}
%% This fails:
% \NewDocumentCommand{\mynewcommand}{st't-t.e_O{}m}{%
% \mycommand\IfBooleanT{#1}{*}\IfBooleanT{#2}{'}\IfBooleanT{#3}{.}\IfBooleanT{#4}{_{#4}}[foo#5]{#6}%
% }
%% This fails:
% \NewDocumentCommand{\mynewcommand}{st't-t.e_O{}m}{%
% \mycommand#1#2#3#4[foo#5]{#6}%
% }
\begin{document}
\mycommand'_{below text}[I am optional]{yes}
How to define a new command so that mynewcommand behave like mycommand except that it prepends a string like "foo" in front of the optional argument?
% \mynewcommand*'-._{below text}[I am optional]{yes}
\end{document}
Antwort1
Ist es das, was Sie wollen? Ich glaube, Sie haben das Argument #3
(das Argument s-
) in übersehen \mynewcommand
, also habe ich mir erlaubt, es hinzuzufügen.
\documentclass[]{article}
\NewDocumentCommand{\mycommand}{st't-t.e_O{}m}{%
I am a command called \IfBooleanT{#1}{with a star, }\IfBooleanT{#2}{with a prime, }\IfBooleanT{#3}{with a dash, }\IfBooleanT{#4}{with a dot, }\IfValueT{#5}{with an underscore (#5), } with the optional argument ``#6'' and with the mandatory argument ``#7''.
}
% This works:
\NewDocumentCommand{\mynewcommand}{st't-t.e_O{}m}{%
\expandafter\mycommand\expanded{\IfBooleanT{#1}{*}\IfBooleanT{#2}{'}\IfBooleanT{#3}{-}\IfBooleanT{#4}{.}\IfValueT{#5}{\unexpanded{_{#5}}}\unexpanded{[foo#6]{#7}}}%
}
%% This fails:
% \NewDocumentCommand{\mynewcommand}{st't-t.e_O{}m}{%
% \mycommand#1#2#3#4[foo#5]{#6}%
% }
\begin{document}
\mycommand'_{below text}[I am optional]{yes}
How to define a new command so that mynewcommand behave like mycommand except that it prepends a string like "foo" in front of the optional argument?
\mynewcommand*'-._{below text}[I am optional]{yes}
\end{document}
Antwort2
Das tun Sie nicht. \NewDocumentCommand
Dafür ist es nicht gedacht.
Korrigieren Sie jedenfalls zuerst die Argumente in \mynewcommand
: Ihre Liste ist ungültig.
\documentclass[]{article}
\NewDocumentCommand{\mycommand}{st't-t.e_O{}m}{%
I am a command called
\IfBooleanT{#1}{with a star, }%
\IfBooleanT{#2}{with a prime, }%
\IfBooleanT{#3}{with a dash, }%
\IfBooleanT{#4}{with a dot, }%
\IfValueT{#5}{with an underscore (#5), }
with the optional argument ``#6'' and with the mandatory argument ``#7''.
}
\NewDocumentCommand{\mynewcommand}{st't-t.e{_}O{}m}{%
\expanded{%
\mycommand
\IfBooleanT{#1}{*}%
\IfBooleanT{#2}{'}%
\IfBooleanT{#3}{-}%
\IfBooleanT{#4}{.}
\IfValueT{#5}{_{\unexpanded{#5}}}%
[foo\unexpanded{#6}]%
{\unexpanded{#7}}%
}%
}
\begin{document}
\mycommand'_{below text}[I am optional]{yes}
How to define a new command so that mynewcommand behave like mycommand except that it prepends a string like "foo" in front of the optional argument?
\mynewcommand*'-._{below text}[I am optional]{yes}
\end{document}