重新定义 \ref 以便它也显示页码?

重新定义 \ref 以便它也显示页码?

我只是闲着没事地想,而不是see Section \ref{labelname}生产

参见第 4.1.1 节

我可以让它see Section \ref{labelname}产生

参见第 4.1.1 节(第 65 页)

这可能吗?使用会hyperref弄乱吗?

答案1

您可以定义一个命令,例如 \myref

\newcommand{\myref}[1]{\ref{#1} (p\pageref{#1})}

然后你可以使用\myref{xxx}

答案2

更简洁的方法是像答案中那样使用新的宏goodluck。但也\ref可以重新定义。它应该尽可能晚地完成,因为许多包都会重新定义它。在解决方案中,它是在\AtBeginDocument序言的末尾完成的,特别是在hyperref加载包之后。

此外,软件包还hyperref支持星号形式,可生成不带链接的引用。例如,如果引用是另一个引用的一部分,则这很有用,可以避免嵌套链接。

\documentclass{article}
\usepackage{hyperref}

\makeatletter
\AtBeginDocument{%
  \newcommand*{\original@ref}{}%
  \let\original@ref\ref
  \@ifpackageloaded{hyperref}{%
    \renewcommand*{\ref}{%
      \@ifstar\newrefstar\newref
    }%
    \newcommand*{\newrefstar}[1]{%
      \original@ref*{#1} \textbf{(p\pageref*{#1})}%
    }%
    \newcommand*{\newref}[1]{%
      \hyperref[#1]{\newrefstar{#1}}%
    }%
  }{%
    \renewcommand*{\ref}[1]{%
      \original@ref{#1} \textbf{(p\pageref{#1})}%
    }%
  }%
}
\makeatother

\begin{document}
\section{Introduction}
\section{Foo bar}
\subsection{Hello World}
\label{sec:hello}
This is subsection \ref{sec:hello}.
\end{document}

参考链接及页面

答案3

也许你想看看varioref包及其命令\vref。这将生成您所需的输出。此外,这不会影响您的hyperref设置。

相关内容