如何防止标题中的最后一个句点出现在图形列表中?

如何防止标题中的最后一个句点出现在图形列表中?

有没有简单的方法可以删除命令(或环境)参数的最后一个字符?我正在寻找一种简单的方法来删除出现在内容列表中的标题中的标点符号,而不必重复写相同的标题。

答案1

如果您正在使用该caption包,您可以使用该选项,该选项textformat=period会将句点添加到标题本身但不添加到列表条目,例如:

\documentclass{article}
\usepackage[textformat=period]{caption}

\begin{document}

\listoffigures

\begin{figure}
  \centering
  \fbox{\(\sin^2x+\cos^2x\equiv1\)}
  \caption{An identity}
\end{figure}

\end{document}

答案2

我认为,最安全的方法是使用最后一个句点的命令:

...
\DeclareRobustCommand{\captionperiod}{.}
...
\begin{document}
...
\begingroup
\renewcommand{\captionperiod}{}
\listoffigures
\listoftables
... % other lists
\endgroup
...
\begin{figure}
...
\caption{A caption\captionperiod}
\end{figure}
...
\end{document}

通过这种方式,您可以精确控制所输入的内容。

答案3

luatex 的理想任务

\def\removelast#1{\directlua{tex.print((string.gsub([==[#1]==], ".$", "")))}}

\removelast{What punctuation?}

\bye

您可以轻松地使其更加健壮,并且仅当它是标点符号时才删除最后一个字符。

答案4

另一个解决方案是修补,使用和包\@caption提供的工具:etoolboxxstring

\documentclass{article}

\usepackage{etoolbox}
\usepackage{xstring}

\makeatletter
\patchcmd{\@caption}{%
  \ignorespaces#2%
}{%
  \protecting{\noexpandarg\StrGobbleRight}{\ignorespaces#2}{1}%
}{}{}
\makeatother

\begin{document}

\listoffigures

\begin{figure}
  \centering
  \fbox{\(\sin^2x+\cos^2x\equiv1\)}
  \caption{A \emph{very important} identity!}
\end{figure}

\end{document}

输出结果为:

请注意,如果您使用文档类,则必须使用 patch\@memold@caption而不是\@captionmemoir没有软件包hyperref。此外,如果使用该软件包,则可能必须调整补丁caption。但是,根据 Axel Sommerfeldt 的回答和评论,在这种情况下实际上不需要补丁,因为软件包caption允许配置标题文本的格式。

相关内容