我需要插入(多于)或者(以下)在一些数字和后面的冒号之间,产生例如,表 0.1(上文):而不是更常见的表 0.1:(有一个很好的印刷原因)。
这样做的合理方法是什么?我的方法——重新定义\thefigure
——带来了意想不到的后果,即增加了(多于)和(以下)到的输出\ref
。我\ref
只需要输出数字,例如,0.1在下面的例子中。
\documentclass{report}
\begin{document}
Calling the figure number ``0.1'' also summons ``(above)'':
\verb|\ref{label}| = \ref{label}
\begin{figure}
.\\
..\\
...\\
....
\renewcommand\thefigure{\thechapter.\arabic{figure} (above)}
\caption{This is the caption\label{label}}
\end{figure}
\end{document}
答案1
我确信 caption 包中会有钩子让你轻松完成此操作,但你可以使用基本的 latex 来完成此操作:提供标题中数字周围文本的命令适用\fnum@figure
于图形和\fnum@table
表格。默认命令基本上是\figurename~\thefigure
。你只需要~(above)
添加
\begin{figure}
.\\
..\\
...
\makeatletter
\renewcommand\fnum@figure{\figurename\nobreakspace\thefigure\nobreakspace(above)}
\makeatother
\caption{This is the caption\label{label}}
\end{figure}
答案2
Dan 的答案的一个温和的替代方案是将基于用户级命令的内容插入宏\@makecaption
:
\documentclass{report}
\setcounter{topnumber}{3}% Just for this example
\usepackage{regexpatch}% http://ctan.org/pkg/regexpatch
\makeatletter
% \.patchcmd{<cmd>}{<search>}{<replace>}{<success>}{<failure>}
\xpatchcmd*{\@makecaption}{#1}{#1\@bove@below}{}{}
\patchcmd{\@makecaption}{\belowcaptionskip}{\belowcaptionskip\gdef\@bove@below{}}{\typeout{success}}{}
\def\@bove@below{}
\NewDocumentCommand{\floataddition}{s m}{%
\def\@bove@below{#2}% Add above/below
\IfBooleanTF{#1}
{\xdef\@bove@below{~\@bove@below}}%
{\xdef\@bove@below{~(\@bove@below)}}% Add brackets when NOT using *
}
\makeatother
\begin{document}
\verb|\ref{label1}| = \ref{label1}
\begin{figure}
\centering\rule{.8\linewidth}{20pt}
\floataddition{above}
\caption{This is the caption\label{label1}}
\end{figure}
\begin{figure}
\centering\rule{.8\linewidth}{20pt}
\caption{This is the caption\label{label2}}
\end{figure}
\begin{figure}
\floataddition*{below}
\caption{This is the caption\label{label3}}
\centering\rule{.8\linewidth}{20pt}
\end{figure}
\end{document}
\floataddition[*]{<stuff>}
仅限于浮点数的范围(默认情况下,因为浮点数组成一个组)并插入到(<stuff>)
数字后面。带星号的版本不打印括号。