作为后续行动这个问题,我实现了一个替代目录,包含在 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}
这产生了我想要的输出,但是包ulem
和hyperref
似乎互相干扰,并且soul
包的命令\ul
在 ToC 内不起作用。
我该如何修复这个问题?
答案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}
为了获得您需要的精确样式,您必须修改上面的代码\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
。