Por que o parâmetro dobra quando usado na legenda?

Por que o parâmetro dobra quando usado na legenda?

Eu escrevi alguns comandos, adicionando recentemente alguns comandos convenientes \FSpara adicionar fontes de figuras:

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

Não sei se isso está correto (todos esses \protect), mas parece funcionar por dentro \caption. Infelizmente tentei melhorar o comando, adicionando um parâmetro opcional:

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

Ao usar a variante sem nenhum parâmetro opcional especificado, o efeito é que a #2saída é expandida, seguida por expandida Bildquelle: #2(na verdade, mesmo ao especificar o parâmetro opcional, a saída é duplicada conforme descrito). Por exemplo:

Exemplo mostrando <code>#2</code> expandido duplicado

Não estou familiarizado o suficiente com o TeX para poder resolver o problema sozinho, mesmo depois de ler essas respostas no \protect. Como o comando deve ser escrito?

Responder1

Observe que \ifthenelse{<condition>}{<true>}{<false>}requer <true>e <false>para ser agrupado. Caso contrário, presume-se que os dois tokens após <condition>denotam <true>e <false>. Na sua configuração, <true>is \protecte \\is <false>. Você provavelmente estava procurando por algo como

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

Usando o teste condicional emComo verificar se um valor de macro está vazio ou não criará texto com condicionais TeX simples?, você pode definir \FScomo sendo

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

Aqui está um exemplo mínimo completo do uso:

insira a descrição da imagem aqui

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

informação relacionada