![更新“\caption”命令的简短和详细描述的正确方法是什么?](https://linux22.com/image/447830/%E6%9B%B4%E6%96%B0%E2%80%9C%5Ccaption%E2%80%9D%E5%91%BD%E4%BB%A4%E7%9A%84%E7%AE%80%E7%9F%AD%E5%92%8C%E8%AF%A6%E7%BB%86%E6%8F%8F%E8%BF%B0%E7%9A%84%E6%AD%A3%E7%A1%AE%E6%96%B9%E6%B3%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我正在尝试更新 latex\caption
命令,其中我想要一个\listoffigures
带有简短描述以及图标题中的简短和详细描述的命令。我期望的输出如下:
我使用以下代码获得了上述输出:
\documentclass{article}
\usepackage{graphicx}
\newcommand{\mycaption}[2][]{\caption[#1]{\textbf{#1} #2}}
\begin{document}
\listoffigures
\begin{figure}
\centering
\includegraphics[width=3cm]{example-image}
\mycaption[Short Description.]{Long Description}
\end{figure}
\end{document}
但是,我想要的是:
\renewcommand{\caption}[2][]{\caption[#1]{\textbf{#1} #2}}
我想知道是否有任何内置乳胶syntax
可以实现我的目的。
答案1
\renewcommand{\caption}[2][]{\caption[#1]{\textbf{#1} #2}}
不会起作用(您可能已经发现了),因为它会创建递归定义,导致 TeX 无限循环,直到有东西停止它。
解决这个问题的一种方法是:
\let\oldcaption=\caption
\renewcommand{\caption}[2][]{\oldcaption[#1]{\textbf{#1} #2}}
答案2
您的定义不仅仅存在名称(\mycaption
)的问题:如果您不使用可选参数,\mycaption
您将得到
- 列表中有一个空条目,并且
- 标题之前有一个虚假的空格。
\documentclass{article}
\usepackage{graphicx}
\newcommand{\mycaption}[2][]{\caption[#1]{\textbf{#1} #2}}
\begin{document}
\listoffigures
\begin{figure}
\centering
\includegraphics[width=3cm]{example-image}
\mycaption{Only Description}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=3cm]{example-image}
\mycaption[Short Description.]{Long Description}
\end{figure}
\end{document}
这意味着您应该测试是否已给出可选参数的值:
\documentclass{article}
\usepackage{graphicx}
\NewCommandCopy\mycaption\caption
\RenewDocumentCommand\caption{om}{%
\IfNoValueTF{#1}{\mycaption{#2}}{\mycaption[#1]{\textbf{#1} #2}}%
}
\begin{document}
\listoffigures
\begin{figure}
\centering
\includegraphics[width=3cm]{example-image}
\caption{Only Description}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=3cm]{example-image}
\caption[Short Description.]{Long Description}
\end{figure}
\end{document}
答案3
我会采用不同的做法,并\mycaption
在长描述后面定义一个可选参数。默认情况下,第一个可选参数与强制参数(简短描述)具有相同的参数,其中仅在真正需要时才添加标点符号。但是,您仍然可以为图表/表格列表提供一个条目(例如,您想修复任一部分中的错误换行符)。
\documentclass{article}
\usepackage{graphicx}
\usepackage{amsthm} % for \@addpunct
\makeatletter
\NewDocumentCommand{\mycaption}{O{#2}mo}{%
\caption[#1]{%
\textbf{#2\IfValueT{#3}{\@addpunct{.}}}%
\IfValueT{#3}{ #3\@addpunct{.}}%
}%
}
\makeatother
\begin{document}
\listoffigures
\begin{figure}[htp]
\centering
\includegraphics[width=1cm]{example-image}
\mycaption{Short Description}[Long Description]
\end{figure}
\begin{figure}[htp]
\centering
\includegraphics[width=1cm]{example-image}
\mycaption[Short]{Short Description?}[Long Description?]
\end{figure}
\begin{figure}[htp]
\centering
\includegraphics[width=1cm]{example-image}
\mycaption{Short Description}
\end{figure}
\end{document}