答え1
これを実行することはお勧めしません。文書を読む他の人を混乱させるからです。また、すべてのマクロ、特に引数を読み取る前にカテゴリ コードを操作するマクロでは機能しません。とはいえ、これは可能です。
\flip
以下は、必須引数とオプション引数をそれぞれ 1 つずつ持つように定義されたマクロの必須引数とオプション引数を反転するマクロを定義する LaTeX コードです。
\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%
}
一度記述すると、必須の引数の後にオプションの引数を取るように\flip\foo
再定義されます。これを説明する完全なドキュメントがこちらにあります。\foo
\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}
これまで LyX を使用したことはありませんでしたが、プリアンブルにコードを挿入して同じ効果を得ることができました。
は、マクロの\flip
の欠如を考慮しないことに注意してください(つまり、ファミリを介して が使用されていないか、 を介して定義されたマクロ)。これにより、場合によっては混乱を招くエラーが発生する可能性があります。マクロをパッチする方法と同様にこれに対処することは可能ですが、この回答ではそうする価値がないと思われます。\long
\def
\long
\newcommand*
etoolbox
\flip
引数を再定義せずに が\flip\foo{required}[optional]
に展開されるようにを定義することも可能である\foo[optional]{required}
。次のようなものである(未テスト)
\long\def\flip#1#2[#3]{#1[#3]{#2}}
これにより、オプションの引数が必須の引数に変更されますが、オプションの引数がない場合は、 を使用する理由はありません\flip
。
結論としては、それは可能ですが、おそらくやるべきではありません。