答案1
在文章类中,使用宏呈现目录中的部分条目\l@section
:
$ latexdef l@section
\l@section:
macro:#1#2->\ifnum \c@tocdepth >\z@ \addpenalty \@secpenalty \addvspace {1.0em \@plus \p@ }\setlength \@tempdima {1.5em}\begingroup \parindent \z@ \rightskip \@pnumwidth \parfillskip -\@pnumwidth \leavevmode \bfseries \advance \leftskip \@tempdima \hskip -\leftskip #1\nobreak \hfil \nobreak \hb@xt@ \@pnumwidth {\hss #2}\par \endgroup \fi
此外, #1
将以\numberline{<section number>}
和
$ latexdef numberline
\numberline:
macro:#1->\hb@xt@ \@tempdima {#1\hfil }
基于此,人们可以\numberline
在执行期间进行破解\l@section
,然后插入所需的代码以获得图形结果。为此,我使用了低级编码。请参阅tocloft
包说明,了解 LaTeX 默认如何对目录进行硬编码。包tocloft
提供了对此的钩子,这可能会简化此处的任务,但我没有尝试过。但是,如果您想要比我在此处实现的更多自定义,则可能需要使用它。使用包,您etoc
可以获得任何所需的外观,但需要完成所有操作(即,\l@section
上面的东西没有用钩子丰富,而只是使用用户提供的编码完全重写\etocsetstyle{section}{}{}{}{}
。)但是,文档中的示例可以作为起点。
\documentclass{article}
\usepackage{color}
\usepackage{etoolbox}
\usepackage{hyperref}% to check compatibility
\makeatletter
\patchcmd{\l@section}{\begingroup}{\begingroup\hacknumberline}{}{}
\newcommand\hacknumberline{\let\numberline\my@numberline}
\def\my@numberline #1%
{\vbox{\hbox{\kern-\fboxsep
\color{red}%
\rlap{\rule{\dimexpr\linewidth+\fboxsep}{1pt}}%
\kern\fboxsep
}%
\nointerlineskip
\hb@xt@ \@tempdima
{\kern-\fboxsep\colorbox{red}{\color{white}#1.}% I added a dot here
\hfil}%
}%
}
\makeatother
\begin{document}
\tableofcontents
\section{Objekt und Zweck}
\section{Normen}
\subsection{Allgemeine Legislative Einleitung}
\end{document}