我目前正在撰写论文,并且正在努力重新定义标题命令。
我有一些大标题,但我不想将它们显示在图表列表中。对于每个标题,我只想使用第一个句子。在某些标题中,我想使用 cleveref 包引用其他浮点数。下面给出了一个最小示例。
\documentclass{article}
\usepackage{cleveref}
\def\mcaption#1{%
\begingroup
\edef\@tempa{#1}%
\expandafter\endgroup
\expandafter\split\@tempa\relax
}
\def\split#1.#2\relax{\caption[#1]{#1.#2}}
\begin{document}
\listoffigures
\begin{figure}
\centering
Insert figure here
\mcaption{This is a working caption. One can see that ......}
\label{fig:abc}
\end{figure}
\begin{figure}
\centering
Insert figure here
\mcaption{This caption does not work. See also Figure \cref{fig:abc}}
\end{figure}
\end{document}
这无法生成 PDF,并显示以下错误消息:
./temp.tex:27: 未定义控制序列。 \@cref ...oup =1\count@group =1\def \cref@variant {#1}\newif \if@secondref ... l.27 ... 不起作用。另请参见图 \cref{fig:abc}}
./temp.tex:27: 未定义控制序列。\if@secondref
我是否可以做我想做的事,或者我应该放弃在标题中引用其他浮点数的想法?
答案1
你正在做一件无用的事情,如果标题文本中出现\edef
这样的命令,这也是很危险的。\textbf
说啊
\documentclass{article}
\usepackage{cleveref}
\makeatletter
\def\mcaption#1{\split@caption#1\@nil}
\def\split@caption#1.#2\@nil{\caption[#1]{#1.#2}}
\makeatother
\begin{document}
\listoffigures
\begin{figure}
\centering
Insert figure here
\mcaption{This is a working caption. One can see that ......}
\label{fig:abc}
\end{figure}
\begin{figure}
\centering
Insert figure here
\mcaption{This caption does not work. See also Figure \cref{fig:abc}}
\end{figure}
\end{document}
最好不要使用\split
作为名称,因为这是 使用的命令amsmath
。不过,我更喜欢一种更简单的方法:
\documentclass{article}
\usepackage{cleveref}
\newcommand\mcaption[2]{\caption[#1]{#1. #2}}
\begin{document}
\listoffigures
\begin{figure}
\centering
Insert figure here
\mcaption{This is a working caption}{One can see that ......}
\label{fig:abc}
\end{figure}
\begin{figure}
\centering
Insert figure here
\mcaption{This caption does not work}{See also Figure \cref{fig:abc}}
\end{figure}
\end{document}
就像输入一样简单,但功能更加强大。