有没有简单的方法可以删除命令(或环境)参数的最后一个字符?我正在寻找一种简单的方法来删除出现在内容列表中的标题中的标点符号,而不必重复写相同的标题。
答案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
提供的工具:etoolbox
xstring
\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
而不是\@caption
memoir
没有软件包hyperref
。此外,如果使用该软件包,则可能必须调整补丁caption
。但是,根据 Axel Sommerfeldt 的回答和评论,在这种情况下实际上不需要补丁,因为软件包caption
允许配置标题文本的格式。