目录中的断线

目录中的断线

作为后续行动这个问题,我实现了一个替代目录,包含在 MWE 中:

\documentclass[11pt,a4paper]{article}
\usepackage[normalem]{ulem}
\usepackage{soul}
\usepackage{lipsum}
\usepackage{hyperref}
\hypersetup{
    colorlinks,
    citecolor=black,
    filecolor=black,
    linkcolor=black,
    urlcolor=black
}
\makeatletter

\setcounter{tocdepth}{1}

\newcommand*{\tocpg@current}{}
\newcommand*{\tocentry}[3]{%
  % #1: level  name
  % #2: title
  % #3: page number
  \ignorespaces
  \ifnum#1>\value{tocdepth}
  \else
    \ifx\tocpg@current\@empty
      p#3: %
      \def\tocpg@current{#3}%
    \else
      \def\tocpg@new{#3}%
      \ifx\tocpg@new\tocpg@current
        ,\ ~%
      \else
        \def\tocpg@current{#3}%
        ;\\p#3: %
      \fi
    \fi
    \uline{#2}%\ignorespaces
  \fi
  \ignorespaces
}
\renewcommand*{\numberline}[1]{}
\def\l@part{\tocentry{-1}}
\def\l@chapter{\tocentry{0}}
\def\l@section{\tocentry{1}}
\def\l@subsection{\tocentry{2}}
\def\l@subsubsection{\tocentry{3}}
\def\l@paragraph{\tocentry{4}}
\def\l@subparagraph{\tocentry{5}}
\makeatother
\begin{document}
\tableofcontents
\section{Section 1}
\lipsum[1-4]
\section{Section 2}
Test
\section{Section with long name}
More Test
\section{Section with even longer name}
\lipsum[3]
\section{This section has a long name}
Wow
\end{document}

这产生了我想要的输出,但是包ulemhyperref似乎互相干扰,并且soul包的命令\ul在 ToC 内不起作用。

问题在于\uline它不会在目录中换行: 目录

我该如何修复这个问题?

答案1

这是我对您的另一个问题的直接回答。图片显示了 hyperref 创建的红色方框,在某些 pdf 查看器(不是全部)的屏幕上可以看到,但它们在打印时不会显示。

\documentclass{article}
\usepackage{blindtext}

\setcounter{tocdepth}{2}
\usepackage{etoc}

\usepackage{hyperref}
\usepackage{soul}

% cf more sophisticated example at end of Part V of etoc manual
% http://ctan.org/pkg/etoc
\newcommand*\inlinetoc {%
\begingroup
\etocsetstyle{section}
   {\etocskipfirstprefix}
   {. }
   {\bfseries \etocname{} \emph{(starting on page \etocpage)}: }
   {.}
\etocsetstyle{subsection}
   {\etocskipfirstprefix}
   {, }
   {\mdseries \etocname{} \ul{(\etocnumber{} on page \etocpage)}}
   {}
\tableofcontents
\endgroup
}

\begin{document}
\inlinetoc
\newpage
\Blinddocument
\end{document}

内联目录,带链接并使用 \ul

为了获得您需要的精确样式,您必须修改上面的代码\etocsetstyle{section}...……

以下是

\hypersetup{hidelinks}

\begingroup...\endgroup在的定义里面\inlinetoc,以便隐藏 默认绘制的红色框hyperref(但链接仍然存在)。

在此处输入图片描述

编辑

尝试更多地使用soul时,\ul我遇到了一些问题。解决方法似乎是使用\etocthename可扩展的 ,并\expandafter在 之前使用足够的 来强制其扩展\ul

然后,将其包装起来\etocthelink以获取超链接。该示例再次在\hypersetup{hidelinks}本地完成,以免与 pdf 显示中与下划线重叠的红色矩形在视觉上混淆(请注意下划线跨越行尾)。

\documentclass{article}
\usepackage{blindtext}


\usepackage{hyperref}
\usepackage{soul}
%\usepackage[normalem]{ulem}
\setcounter{tocdepth}{2}
\usepackage{etoc}

% cf more sophisticated example at end of Part V of etoc manual
% http://ctan.org/pkg/etoc
\newcommand*\inlinetoc {%
\begingroup
\hypersetup{hidelinks}
\etocsetstyle{section}
   {\etocskipfirstprefix}
   {. }
   {\bfseries \etocthelink{\expandafter\ul\expandafter{\etocthename}} 
              (starting on page \etocpage): }
   {.}
\etocsetstyle{subsection}
   {\etocskipfirstprefix}
   {, }
   {\mdseries \mdseries 
% debugging: \typeout{\etocthename}
    \etocthelink{\expandafter\ul\expandafter{\etocthename}} 
    (\etocnumber{} on page \etocpage)}
   {}
\tableofcontents
\endgroup
}

\begin{document}
\inlinetoc
\newpage
\section{a veryvery very very very very  long section title to test soul and
  its macro ul}
\subsection{inside the first section we find a subsection with a very very very
very long name}
\Blinddocument

\end{document}

在此处输入图片描述

我不明白为什么有些右括号在输出中完全消失了。正如预期的那样,它们在宏的扩展中存在\etocthename

相关内容