Почему параметр удваивается при использовании в заголовке?

Почему параметр удваивается при использовании в заголовке?

Я написал несколько команд, недавно добавив удобную команду \FSдля добавления источников рисунков:

\newcommand{\FS}[1]{%
\protect\\{\protect\scriptsize{}Bildquelle: #1}}

Я не знаю, правильно ли это (все эти \protect), но, кажется, это работает внутри \caption. К сожалению, я попытался улучшить команду, добавив необязательный параметр:

\newcommand{\FS}[2][Bildquelle]{%
\protect\ifthenelse{\equal{#1}{}}%
\protect\\{\protect\scriptsize{}#2}
\protect\\{\protect\scriptsize{}#1: #2}}

При использовании варианта без указания необязательного параметра эффект заключается в том, что #2выводится развернутый, а затем развернутый Bildquelle: #2(на самом деле даже при указании необязательного параметра вывод дублируется, как описано). Например:

Пример, показывающий дубликат развернутого <code>#2</code>

Я не настолько хорошо разбираюсь в TeX, чтобы решить проблему самостоятельно, даже после прочтения ответов на \protect. Как должна быть написана команда?

решение1

Обратите внимание, что \ifthenelse{<condition>}{<true>}{<false>}требует <true>и <false>для группировки. Если нет, то <condition>предполагается, что два токена, следующие за , обозначают <true>и <false>. В вашей настройке <true>это \protectи \\это <false>. Вероятно, вы искали что-то вроде

\newcommand{\FS}[2][Bildquelle]{%
  \protect\ifthenelse{\equal{#1}{}}%
    {\protect\\{\protect\scriptsize{}#2}}
    {\protect\\{\protect\scriptsize{}#1: #2}}}

Используя условный тест вКак проверить, является ли значение макроса пустым или не создаст ли текст с помощью простых условных операторов TeX?, вы можете вместо этого определить \FSбыть

\newcommand{\FS}[2][Bildquelle]{%
  \\
  \scriptsize
  \if\relax\detokenize{#1}\relax\else
    #1: 
  \fi
  #2%
}

Вот полный минимальный пример использования:

введите описание изображения здесь

\documentclass{article}

\usepackage{caption}

\newcommand{\FS}[2][Bildquelle]{%
  \\
  \scriptsize
  \if\relax\detokenize{#1}\relax\else
    #1: 
  \fi
  #2%
}

\begin{document}

\begin{figure}
  \caption{Some caption. \FS{abc}}
  \caption{Another caption. \FS[abc]{def}}
  \caption{Final caption. \FS[]{ghi}}
\end{figure}

\end{document}

Связанный контент