\setcounter{secnumdepth}{0} 与 \titlecontents{section}{\thecontentslabel\quad}{\underline}{}{\hfill\thecontentspage} 不兼容

\setcounter{secnumdepth}{0} 与 \titlecontents{section}{\thecontentslabel\quad}{\underline}{}{\hfill\thecontentspage} 不兼容

以下内容(除 外\setcounter{secnumdepth}{0})取自用户数学的答案在目录中为章节标题文本添加下划线

\documentclass{article}
\usepackage{titletoc}
% The line below seems to be incompatible with the underlining of the line beneath it
% \setcounter{secnumdepth}{0}
\titlecontents{section}{\thecontentslabel\quad}{\underline}{}{\hfill\thecontentspage}
\begin{document}
\tableofcontents
\section{Foobar}
\end{document}

如果取消注释代码行的注释,则不能同时使\setcounter{secnumdepth}{0}和下划线起作用。

我想知道为什么,以及是否有办法规避这种情况,而不诉诸包soul(就像已经做的那样用户在回答中; 以及其他; 在提到的 OP 中),因此至少在很大程度上仍然使用 2 条当前不兼容的线路。

答案1

没有不兼容性,只有语法错误\titlecontents

第一个参数是代码节标签。此外,还有一个可选强制参数,即距离左边距的距离。另外,不要\underline在这里使用:您可能有很长的标题,并且\underline不会跨行。请改用\ulfrom soul(utf8)

编辑:

然而,如果使用“hyperref”,则会出现不兼容问题。我添加了 Heiko Oberbiek 提供的 hack 来规避该问题。

\documentclass{article}
\usepackage[utf8]{inputenc} \usepackage{titletoc}
\usepackage{soulutf8} % The line below seems to be incompatible with the underlining of the line beneath it
\setcounter{secnumdepth}{0}
\makeatletter
\def\myul#1{%
\ulxxx#1\@ulxxxend
}%
\def\ulxxx\hyper@linkstart#1#2#3\hyper@linkend\@ulxxxend{%
\hyper@linkstart{#1}{#2}{\ul{#3}}\hyper@linkend
}%
\makeatother

\usepackage[colorlinks]{hyperref}
\titlecontents{section}[0em]{}{\thecontentslabel\quad\myul}{\myul}{\hfill\contentspage}

\begin{document}

\tableofcontents

\section{Foobar. A quite long, long section title. A still longer, longer, longer subsection title}
Some test.
\newpage

\section{Another, shorter, section}
Some more text.

\end{document} 

在此处输入图片描述

相关内容