我想使用包varioref
,但使用缩写... (p.1)
而不是... on page 1
。不幸的是,我在括号中也有引用,这会导致不美观/禁止(?)双重右括号。
我尝试用它\@ifnextchar
来识别这种情况,但似乎不起作用。
这是一个简单的例子:
\documentclass[]{article}
\usepackage{varioref}
\usepackage{cleveref}
\usepackage[english]{babel}
\makeatletter
\addto\extrasenglish{%
\def\reftextfaraway#1{\@ifnextchar){on p.~\pageref{#1}}{(p.~\pageref{#1})}}%
}
\makeatother
\begin{document}
In \vref{sec:test}, this is explained.
Other text (cf.\ \vref{sec:test}).
\newpage
\null\newpage
\section{Test}
\label{sec:test}
\end{document}
预期输出:
在第 1 章(第 3 页)中对此进行了解释。其他文本(参见第 1 章第 3 页)。
电流输出:
在第 1 章(第 3 页)中对此进行了解释。其他文本(参见第 1 章(第 3 页))。
答案1
在这里我保存了 的定义\vref
,然后用两个参数重新定义它。我检查第二个参数是否为 a)
并\reftextfaraway
相应地重新定义。然后我使用第一个参数调用 的已保存版本\vref
并自由传递第二个参数。
\documentclass[]{article}
\usepackage{varioref}
\usepackage{cleveref}
%\usepackage[english]{babel}
\let\svvref\vref
\makeatletter
%\addto\extrasenglish{%
\renewcommand\vref[2]{%
\ifx)#2%
\renewcommand*{\reftextfaraway}[1]{on p.~\pageref{#1}}%
\else
\renewcommand*{\reftextfaraway}[1]{(p.~\pageref{#1})}%
\fi
\svvref{#1}#2%
}%
%}
\makeatother
\begin{document}
In \vref{sec:test}, this is explained.
Other text (cf.\ \vref{sec:test}).
\newpage
\null\newpage
\section{Test}
\label{sec:test}
\end{document}