Все вышеперечисленное показывает, что в 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 мистера Робертсона, хотя возможно я попробую ...