为什么在标题中使用时参数会加倍?

为什么在标题中使用时参数会加倍?

我写了一些命令,最近添加了一些方便的命令\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输出expanded,然后是expanded 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}

相关内容