
я праздно размышлял вместо того, чтобы 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
package с его командой \vref
. Это сгенерирует требуемый вам вывод. Кроме того, это не повлияет на ваши hyperref
настройки.