¿Por qué el parámetro se duplica cuando se usa en el título?

¿Por qué el parámetro se duplica cuando se usa en el título?

Escribí algunos comandos y recientemente agregué algunos comandos convenientes \FSpara agregar fuentes de figuras:

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

No sé si esto es correcto (todos esos \protect), pero parece funcionar por dentro \caption. Lamentablemente intenté mejorar el comando, agregando un parámetro opcional:

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

Cuando se utiliza la variante sin ningún parámetro opcional especificado, el efecto es que #2se genera la salida expandida, seguida de la expandida Bildquelle: #2(en realidad, incluso cuando se especifica el parámetro opcional, la salida se duplica como se describe). Por ejemplo:

Ejemplo que muestra <code>#2</code> expandido duplicado

No estoy lo suficientemente familiarizado con TeX como para poder solucionar el problema yo mismo, incluso después de leer esas respuestas en \protect. ¿Cómo se debe escribir el comando?

Respuesta1

Tenga en cuenta que \ifthenelse{<condition>}{<true>}{<false>}requiere <true>y <false>para ser agrupado. De lo contrario, <condition>se supone que los dos tokens que siguen a denotan <true>y <false>. En su configuración, <true>es \protecty \\es <false>. Probablemente estabas buscando algo como

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

Usando la prueba condicional en¿Cómo comprobar si un valor de macro está vacío o no crea texto con condicionales TeX simples?, en su lugar puedes definirlo \FScomo

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

Aquí hay un ejemplo mínimo completo del uso:

ingrese la descripción de la imagen aquí

\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}

información relacionada