Все вышесказанное показывает, как сложно сделать красивую, гибкую (или запретить перегруженную) функцию в LaTeX !!! (этот код TeX мне кажется греческим)
ну, просто чтобы добавить мою недавнюю (хотя и не такую гибкую) разработку, вот то, что я недавно использовал в своей диссертации, с
\usepackage{ifthen} % provides conditonals...
Запустите команду с пустым набором «необязательных» команд по умолчанию:
\newcommand {\figHoriz} [4] [] {
Затем я задаю макросу временную переменную \ temp {} по-разному, в зависимости от того, является ли необязательный аргумент пустым. Это может быть распространено на любой переданный аргумент.
\ifthenelse { \equal {#1} {} } %if short caption not specified, use long caption (no slant)
{ \def\temp {\caption[#4]{\textsl{#4}}} } % if #1 == blank
{ \def\temp {\caption[#1]{\textsl{#4}}} } % else (not blank)
Затем я запускаю макрос, используя переменную \ temp {} для двух случаев. (Здесь он просто устанавливает короткую подпись равной длинной, если она не была указана пользователем).
\begin{figure}[!]
\begin{center}
\includegraphics[width=350 pt]{#3}
\temp %see above for caption etc.
\label{#2}
\end{center}
\end{figure}
}
В этом случае я проверяю только единственный «необязательный» аргумент, который предоставляет \ newcommand {}. Если бы вы настроили его, скажем, для 3 «необязательных» аргументов, вам все равно пришлось бы отправлять 3 пустых аргумента ... например.
\MyCommand {first arg} {} {} {}
что довольно глупо, я знаю, но это все, что я собираюсь сказать о LaTeX - это просто не так разумно, когда я начинаю смотреть на код TeX ... Мне действительно нравится метод xparse мистера Робертсона, возможно, я попробую ...