更新“\caption”命令的简短和详细描述的正确方法是什么?

更新“\caption”命令的简短和详细描述的正确方法是什么?

我正在尝试更新 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}

在此处输入图片描述

相关内容