我正在使用 moderncv,并进行了一些自定义修改。不幸的是,目录缺少章节链接。
我创建了一个最小化的示例,它由以下文件组成:
- 例子.tex
\documentclass[11pt,a4paper]{moderncv}
\usepackage[german]{babel}
\usepackage{moderncv-additions}
\usepackage{lipsum}
\begin{document}
\vfill
\begin{minipage}{1.0\textwidth}
\section{Inhalt}
\tableofcontents
\end{minipage}
\newpage
\chapter{Chapter1}{}
\lipsum[1]
\newpage
\chapter{Chapter2 }{}
\lipsum[1]
\end{document}
- 现代简历
\DeclareOption{a4paper}{
\setlength\paperheight{297mm}
\setlength\paperwidth{210mm}}
\newcommand\@ptsize{}
\DeclareOption{11pt}{\renewcommand\@ptsize{1}}
\ProcessOptions\relax
\input{size1\@ptsize.clo}
\RequirePackage{etoolbox}
\RequirePackage{url}
\urlstyle{tt}
\AtEndPreamble{
\RequirePackage[unicode]{hyperref}
\AtBeginDocument{
\hypersetup{
}}
\pagenumbering{arabic}
}
\newcommand*{\section}[1]{%
}
\endinput
- moderncv-additions.sty
\AtEndPreamble{
\renewcommand*{\contentsline}[4]{%
#2 \dotfill #3\\
}
\newcommand{\chapter}{\@ifstar
\chapterStar
\chapterNoStar }
\newcommand*{\chapterNoStar}[2]{%
{%
\addcontentsline{toc}{chapter}{#1#2}%
\chapter*{#1}{#2}%
}%
}
\newcommand*{\chapterStar}[2]{%
{%
\hfill%
}%
}
\renewcommand*{\@starttoc}[1]{%
\begingroup
\makeatletter
\parskip\z@
\@input{\jobname.#1}%
\if@filesw
\expandafter\newwrite\csname tf@#1\endcsname
\immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
\fi
\@nobreakfalse
\endgroup
}
\def\tableofcontents{\@starttoc{toc}}
}
您知道如何获取 TOC 链接吗?
答案1
您没有获得目录链接,因为您重新定义\contentsline
为排除它们。带有 hyperref 的正常定义充满了与 hyperref 相关的添加。如果您重新定义它只是为了添加\dotfill
,我建议保持不变,但定义\l@chapter
为调用\@dottedtocline
\newcommand*\l@chapter{\@dottedtocline{1}{1.5em}{2.3em}}
或者模仿\l@chapter
你尝试做的事情\contentsline
\newcommand*{\l@chapter}[2]{%
\noindent #1 \dotfill #2\par
}
那么您仍然需要进行两处更改才能获得正确的页面链接:
由于您定义了自己的简单
\chapter
命令,它没有链接目标,因此\phantomsection
在之前添加\addcontentsline
。提前定义页码,以便 hyperref 包能够看到它。将
\pagenumbering{arabic}
其取出\AtBeginDocument
并让其立即执行。其他几件事也可以通过这种方式做得更好。
您的目录小页面无法放在该行上,因为其前面有段落缩进,因此请使用
\noindent
\begin{minipage}{\textwidth} ...