目录用于引用除页面之外或替代页面的运行者

目录用于引用除页面之外或替代页面的运行者

我正在使用该类jurabook,我想更改目录的行为。 jurabook提供了使用运行器对段落进行编号的可能性。这些运行器提供了比页面更具体的参考。

我希望目录显示对页码的引用,而不是对页码的引用,或者除了对页码的引用之外还能显示对页码的引用。是否可以相应地更改目录的行为?

这是使用 jurabook 和 runners 的文档的最小示例。

\documentclass[compact,a5paper,12pt]{jurabook}
\usepackage[a5paper, left=1.5cm, right=1.5cm, top=2cm, bottom=1.5cm]{geometry}

\newcommand{\lorem}{\rn{Lorem} ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

}

\begin{document}

\tableofcontents

\chapter{Chapter}
\section{Test}
\lorem
\lorem
\section{Test 2}
\lorem
\lorem
\lorem
\section{Test 3}
\lorem
\lorem
\section{Test 4}
\lorem
\lorem
\end{document}

编辑:

非常感谢您的回答。它在最小示例中有效。但我在将其应用于更广泛的范围时遇到了问题。

如果我包含 hyperref 包,解决方案不起作用。我在排版时遇到错误。

如果我想了解哪个数字是哪个,文本就会超出页面范围。例如使用以下代码:

\def\addcontentsline#1#2#3{%
  \addtocontents{#1}{%
     \protect\contentsline{#2}{#3}{page \thepage\ (runner \the\numexpr\value{runner}+1\relax)}}}%

答案1

这是实现此目的的一种方法。

注意:该解决方案的一个弱点是,即使某个部分不包含\rn,它仍然会与(在目录中)与前一个\rn加 1 对应的运行器值相关联。

在此处输入图片描述

\documentclass[compact,a5paper,12pt]{jurabook}
\usepackage[a5paper, left=1.5cm, right=1.5cm, top=2cm, bottom=1.5cm]{geometry}
\usepackage{titletoc}

\newcounter{runnerplusone}

\renewcommand\addcontentsline[3]{%
    \setcounter{runnerplusone}{\value{runner}}%
    \addtocounter{runnerplusone}{1}%
    \addtocontents{#1}{%
    \protect\contentsline{#2}{#3}{\thepage\ (\therunnerplusone)}}}


\newcommand{\lorem}{\rn{Lorem} ipsum dolor sit amet, consetetur sadipscing elitr,
sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet
clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At
vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,
no sea takimata sanctus est Lorem ipsum dolor sit amet.
}

\begin{document}
\tableofcontents
\chapter{Chapter}
\section{Test}
\lorem
\lorem 
\section{Test 2}
\lorem
\lorem
\lorem
\section{Test 3}
\lorem
\lorem
\section{Test 4}
\lorem
\lorem
\end{document}

另一种方法是使用 etex 算法来避免分配新的计数器(由 David Carlisle 提出),即

\def\addcontentsline#1#2#3{%
  \addtocontents{#1}{%
     \protect\contentsline{#2}{#3}{\thepage\ (\the\numexpr\value{runner}+1\relax)}}}

编辑:上面的解决方案在hyperref加载时会中断。为了解决这个问题,egreg 提出了以下建议:

\documentclass[compact,a5paper,12pt]{jurabook}
\usepackage[a5paper, left=1.5cm, right=1.5cm, top=2cm, bottom=1.5cm]{geometry}
\usepackage{titletoc}
\usepackage{xpatch}
\usepackage{hyperref}

\xpatchcmd\addcontentsline{\thepage}{\thepage\ (\the\numexpr\value{runner}+1\relax)}{}{}

\newcommand{\lorem}{\rn{Lorem} ipsum dolor sit amet, consetetur sadipscing elitr,
sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet
clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At
vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,
no sea takimata sanctus est Lorem ipsum dolor sit amet.
}

\begin{document}
\tableofcontents
\chapter{Chapter}
\section{Test}
\lorem
\lorem 
\section{Test 2}
\lorem
\lorem
\lorem
\section{Test 3}
\lorem
\lorem
\section{Test 4}
\lorem
\lorem
\end{document}

相关内容