我有以下设置:
\documentclass{book}
\usepackage{enumitem}
\usepackage{hyperref}
\hypersetup
{
colorlinks=true,
linktoc=all,
linkcolor=black,
citecolor=teal,
}
\newlist{exercise}{enumerate}{5}
\setlist[exercise]{label*=\thechapter.\arabic*.,ref=\thechapter.\arabic*,
before={\section*{\hfil{Exercises -- \thechapter}\hfil}}%
\addcontentsline{toc}{section}{Exercises -- \thechapter}%
}
\begin{document}
\let\oldref=\ref
\renewcommand{\ref}[1]{\oldref{#1} in page \pageref{#1}}
\chapter{title}
\section{title}
\begin{enumerate}
\item bla
\begin{enumerate}
\item \label{key1}
bla
\end{enumerate}
\end{enumerate}
\begin{exercise}
\item
\begin{enumerate}
\item bla
\begin{enumerate}
\item \label{key}
bla
\item bla
\end{enumerate}
\item bla
\end{enumerate}
\end{exercise}
Exercise \ref{key}, \ref{key1}.
\end{document}
这将产生以下输出。
我想要\ref
生成的exercise
是“1.1. 1.(a) in page 1”和第一个员工enumerate
“1.(a) in page 1”。当然,它们都应该像现在一样是超链接。我该如何实现呢?
答案1
虽然我认为你想要的格式对读者来说相当混乱,但使用 key 可以轻松实现\setlist*
。before
然而,你应该不是\ref
以这种方式重新定义!这肯定会破坏一些东西。相反,定义一个新命令,比如\myref
,也输出页码。
\documentclass{book}
\usepackage{enumitem}
\usepackage{hyperref}
\hypersetup{
colorlinks=true,
linktoc=all,
linkcolor=black,
citecolor=teal,
}
\newlist{exercise}{enumerate}{5}
\setlist[exercise]{
label*=\thechapter.\arabic*.,
ref=\thechapter.\arabic*,
before={%
\section*{\hfil{Exercises -- \thechapter}}%
\addcontentsline{toc}{section}{Exercises -- \thechapter}%
\setlist*[enumerate,1]{ref=\theexercisei.~\arabic*}%
\setlist*[enumerate,2]{ref=\theenumi.(\alph*)}%
},
}
\setlist*[enumerate,2]{ref=\theenumi.(\alph*)}
\newcommand*\myref[1]{\ref{#1} on page~\pageref{#1}}
\begin{document}
\chapter{title}
\section{title}
\begin{enumerate}
\item bla
\begin{enumerate}
\item \label{key1}
bla
\end{enumerate}
\end{enumerate}
\begin{exercise}
\item
\begin{enumerate}
\item bla
\begin{enumerate}
\item \label{key}
bla
\item bla
\end{enumerate}
\item bla
\end{enumerate}
\end{exercise}
Exercise~\myref{key}, \myref{key1}.
\end{document}