我正在尝试混合 varioref、cleveref 和 autonum 以实现以下行为:
- 自动添加引用类型(即引用某个部分时添加“section”)。-> cleveref;
- 添加“下一页” -> varioref;
- 不对未引用的方程式进行编号 -> autonum。
三者中的任意两个组合都可以正常工作,但是这三个组合会因未定义的引用而失败。
一个简单的例子:
\documentclass{article}
\usepackage{amsmath}
\usepackage{varioref}
%\usepackage{hyperref}
\usepackage{cleveref}
\usepackage{autonum}
\begin{document}
\begin{align} x \label{eqnx} \end{align} % referenced, must have number (1)
\begin{align} y \label{eqny} \end{align} % referenced, must have number (2)
\begin{align} z \label{eqnz} \end{align} % not referenced, must not have any number
\pagebreak
\vref{eqnx,eqny} %% Solution 1: What I'm looking for, does not work
% \cref{eqnx,eqny} \vpageref{eqnx,eqny} %% Solution 2: A different way of writing Solution 1. Works. Note that this is not really equal to Solution 1.
%\vref{eqnx,eqny} \ref{eqnx} \ref{eqny} %% Solution 3: WORKS, use vref as solution1, but there is also references using standard \ref
\end{document}
编辑:已经提供了一个解决方案,但最终我认为不给公式编号(即使没有引用)是一种不好的做法,因为审阅者无法轻松引用它们。因此,除了特殊用例外,我不鼓励使用autonum
。
答案1
因为看起来你想\vref
使用命令C奥玛年代分开大号ists,您应该\autonum@generatePatchedReferenceCSL{vref}
按如下所示使用。
\documentclass{article}
\usepackage[%
paperwidth=3in,
paperheight=2in,
margin=0.1in,
bottom=0.3in,
footskip=0pt]{geometry} % Only to get smaller pages for MWE
\usepackage{amsmath}
\usepackage{varioref}
\usepackage{cleveref}
\usepackage{autonum}
\makeatletter
\autonum@generatePatchedReferenceCSL{vref}
\makeatother
\begin{document}
\begin{align} x \label{eqnx} \end{align} % referenced, must have number (1)
\begin{align} y \label{eqny} \end{align} % referenced, must have number (2)
\begin{align} z \label{eqnz} \end{align} % not referenced, must not have any number
\pagebreak
\vref{eqnx,eqny}
\end{document}
来自第 3.3 节“参考命令”文档:
对于需要以逗号分隔的标签名称列表作为参数的参考命令,您可以使用
\autonum@generatePatchedReferenceCSL{NewReferenceCommand}
。
答案2
根据文档,可以用来\autonum@generatePatchedReference{NewReferenceCommand}
使“期望单个标签名称作为参数的正常参考命令”与 autonum 一起工作。
添加以下内容应该可以使事情正常进行:
\makeatletter
\autonum@generatePatchedReference{vref}
\makeatother