我希望引用能够自动打印引用部分(标题)/表格/图表... 所在的页码(括号中),以及引用的其余部分。输出应如下所示:
As we can see in \autoref{table}, ...
-> 正如我们所见表 3 (第 15 条),...
“S” 代表德语中的“Seite”,即“页面”,最佳解决方案是让“S.”自动出现,因为包选项babel
是ngerman
,因此允许它适用于每种语言。我hyperref
已经因为 而使用该包了\autoref
。这是一个最小的工作示例:
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage{hyperref}
\begin{document}
\section{Section}
\label{Section}
\blindtext
\newpage
\section{Another Section}
As mentioned in \autoref{Section}, ...
\end{document}
答案1
您可以重新定义\autoref
以包含\autopageref
。由于ngerman
定义page
为页面并不是年代。您需要重新定义它并babel
以常规方式添加它:
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage{hyperref}
\addto\extrasngerman{%
\def\pageautorefname{S.~}}
\let\oldautoref\autoref
\renewcommand{\autoref}[1]{\oldautoref{#1} (\autopageref{#1})}
\begin{document}
\section{Section}
\label{Section}
\begin{table}
\caption{A table\label{Table}}
\end{table}
\blindtext
\newpage
\section{Another Section}
As mentioned in \autoref{Section} and in \autoref{Table} ...
\end{document}
避免引用相同的页面
由于在引用的项目的同一页上添加页码来引用有点烦人,因此您可以使用改编自这个答案使页面引用仅在所引用的元素不在当前页面上时才出现:
\usepackage{ifthen}
\newcounter{cPage}
\renewcommand{\autoref}[1]{\oldautoref{#1}%
\refstepcounter{cPage}\label{current\thecPage}%
\ifthenelse{\equal{\pageref{#1}}{\pageref{current\thecPage}}}%
{}{~(\autopageref{#1})}}