我写了一些命令,最近添加了一些方便的命令\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
(实际上,即使指定了可选参数,输出也会按所述重复)。例如:
我对 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}