キャプションで使用するとパラメータが 2 倍になるのはなぜですか?

キャプションで使用するとパラメータが 2 倍になるのはなぜですか?

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

オプション パラメータを指定せずにバリアントを使用すると、expanded#2が出力され、その後に expanded が出力されますBildquelle: #2(実際には、オプション パラメータを指定した場合でも、説明どおりに出力が複製されます)。例:

重複した展開を示す例 <code>#2</code>

の回答を読んでも、TeX に詳しくないので、自分で問題を解決することはできません\protect。コマンドはどのように記述すればよいでしょうか?

答え1

にはと をグループ化する\ifthenelse{<condition>}{<true>}{<false>}必要があることに注意してください。そうでない場合、 に続く2つのトークンはとを表すものとみなされます。設定では、はであり は です。おそらく次のようなものを探していたのでしょう。<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}

関連情報