我用cleveref
它来做文档内引用,觉得它很聪明。但是,我通常想在括号内引用图片(例如)。我现在做的是
\usepackage{cleveref}
...
X exhibits Y (\cref{fig:foo}).
但我想做的是
X exhibits Y \cref{fig:foo}. % Parentheses omitted in code but not in output
理想情况下,我会在需要时以某种方式省略输出中的括号。
答案1
我不会\cref
直接修改和朋友的工作方式。相反,我会创建一个名为的新宏\pcref
——我想是“括号 \cref”的缩写——如下所示:
\newcommand\pcref[1]{(\cref{#1})}
您可能已经猜到了,\pcref
在 的输出周围放置圆括号\cref
。无需大量单独的\crefformat
指令。此方法保留了对 的标准定义的访问\cref
,如果需要这样做的话。
对于下面的截图,我加载了hyperref
包并指定了cleveref
选项nameinlink
,以便可以看到生成的内容和未生成的内容\cref
。
\documentclass{article}
\usepackage[colorlinks,allcolors=blue]{hyperref} % optional
\usepackage[noabbrev,nameinlink]{cleveref}
\newcommand\pcref[1]{(\cref{#1})}
\begin{document}
\begin{figure}[t!] \caption{foo}\label{fig:foo}\end{figure}
\begin{figure}[h!] \caption{bar}\label{fig:bar}\end{figure}
\begin{table}[h!] \caption{foo}\label{tab:foo}\end{table}
\dots\ \pcref{fig:foo}, \pcref{fig:foo,fig:bar}, \pcref{tab:foo,fig:bar}, \dots
\bigskip vs.
\bigskip
\dots\ \cref{fig:foo}, \cref{fig:foo,fig:bar}, \cref{tab:foo,fig:bar}, \dots
\end{document}
答案2
参考文档第 8.2.1 节cleveref
,
单个交叉引用的交叉引用格式使用
\crefformat
和命令定义或重新定义,它们分别由和命令\Crefformat
使用。它们采用两个参数:交叉引用类型和格式代码:\cref
\Cref
\crefformat{type}{format}
为了您的目的,我们可以使用例如:
\crefformat{figure}{(Figure~#2#1#3)}
\Crefformat{figure}{Figure~#2#1#3}
请注意,我已经使用了crefformat
与命令一起使用\cref
(不是句子的开头),并且Crefformat
使用了与Cref
命令一起使用(句子的开头)。
这给出
完整的 MWE 如下
% arara: pdflatex
% arara: pdflatex
\documentclass{article}
\usepackage{cleveref}
\crefformat{figure}{(Figure~#2#1#3)}
\Crefformat{figure}{Figure~#2#1#3}
\begin{document}
\begin{figure}[!h]
\rule{3mm}{2mm}
\caption{August}
\label{fig:foo}
\end{figure}
X exhibits Y \cref{fig:foo}.
\Cref{fig:foo} is a cross reference at the beginning of a sentence
\end{document}
答案3
作为对 Mico 想法的补充,可以对 \crefrange 做同样的事情:
\newcommand\pcrefrange[2]{(\crefrange{#1}{#2})}
然而,如果我们想要 (1)--(2) 符号而不是 (1--2),那就有问题了,因为前者更为广泛。
查看这些帖子: