我只是闲着没事地想,而不是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
设置。