Antwort1
Ich empfehle dies nicht, da es für jeden, der Ihr Dokument liest, verwirrend sein wird. Es funktioniert auch nicht bei allen Makros, insbesondere nicht bei denen, die mit Kategoriecodes herumspielen, bevor sie deren Argumente lesen. Trotzdem ist es möglich.
Hier ist ein LaTeX-Code, der ein Makro definiert, \flip
das die erforderlichen und optionalen Argumente eines Makros umkehrt, das so definiert ist, dass es genau ein erforderliches und ein optionales Argument hat.
\usepackage{etoolbox}
\makeatletter
\newcommand*\flip[1]{%
\cslet{flip@\string#1}#1%
\long\def#1##1{%
\@ifnextchar[{\@flip{#1}{##1}}{\csuse{flip@\string#1}{##1}}%
}%
}
\long\def\@flip#1#2[#3]{%
\csuse{flip@\string#1}[#3]{#2}%
}
\makeatother
Beispielsweise angesichts der Makro
\newcommand\foo[2][none]{%
\par
Required argument: #2\\
Optional argument: #1%
}
\flip\foo
Sie können es einmal schreiben und es wird neu definiert \foo
, um ein erforderliches Argument gefolgt von einem optionalen Argument anzunehmen. Hier ist ein vollständiges Dokument, das dies veranschaulicht.
\documentclass{article}
\usepackage{parskip}
\usepackage{etoolbox}
\makeatletter
\newcommand*\flip[1]{%
\cslet{flip@\string#1}#1%
\long\def#1##1{%
\@ifnextchar[{\@flip{#1}{##1}}{\csuse{flip@\string#1}{##1}}%
}%
}
\long\def\@flip#1#2[#3]{%
\csuse{flip@\string#1}[#3]{#2}%
}
\makeatother
\newcommand\foo[2][none]{%
\par
Required argument: #2\\
Optional argument: #1%
}
\begin{document}
Normal use:
\foo{blah}
\foo[option]{asdf}
Now we can flip the arguments:
\flip\foo
\foo{blah}
\foo{asdf}[option]
\end{document}
Ich habe LyX bisher noch nie verwendet, konnte meinen Code jedoch in die Präambel einfügen und denselben Effekt erzielen.
Beachten Sie, dass das Fehlen von in einem Makro \flip
nicht berücksichtigt wird (d. h. Makros, die über die Familie ohne oder über definiert sind ). Dies kann in einigen Fällen zu verwirrenden Fehlern führen. Es ist möglich, damit ähnlich umzugehen wie mit Patches für Makros, aber für diese Antwort schien es nicht lohnend, dies zu tun.\long
\def
\long
\newcommand*
etoolbox
Es wäre auch möglich, \flip
es so zu definieren, dass es sein Argument nicht neu definiert, sondern stattdessen zu \flip\foo{required}[optional]
erweitert \foo[optional]{required}
. Etwas wie (ungetestet)
\long\def\flip#1#2[#3]{#1[#3]{#2}}
Dadurch wird das optionale Argument zu einem erforderlichen Argument. Wenn Sie jedoch nicht über das optionale Argument verfügen, gibt es keinen Grund, es zu verwenden \flip
.
Zusammenfassend lässt sich sagen, dass es möglich ist, Sie sollten es aber wahrscheinlich nicht tun.