在目录中的章节编号和章节之间添加一个符号

在目录中的章节编号和章节之间添加一个符号

我的问题是,要介绍的符号和章节标题之间存在重叠;它表现为\heartsuit两个

\documentclass{article}
\usepackage{tocloft}
\usepackage{lipsum}
%\contentslabel{3em}


\renewcommand\tableofcontents{%
\section*{\contentsname\@mkboth{}{}}%
\thispagestyle{empty}%
%\small%
\@starttoc{toc}%
\thispagestyle{empty}%
\clearpage%
}
\makeatother



\makeatletter
\renewcommand{\@dotsep}{2}
%%\renewcommand{\cftdot}{\ensuremath{\ast}}
\renewcommand{\cftpnumalign}{r}
%\renewcommand{\cftsecpresnum}{SOMETHING }
\renewcommand{\cftsecfont}{\bfseries}
\renewcommand{\cftsecleader}{\bfseries\cftdotfill{\cftsecdotsep}}
\renewcommand{\cftsecpagefont}{\bfseries}
%\renewcommand{\cftsecpresnum}{SOMETHING }
\renewcommand{\cftsecaftersnum}{$\heartsuit$}
    \renewcommand{\cftsecaftersnumb}{$\heartsuit$}
    %\renewcommand{\cftsecaftersnumb}{\\}
%   \newlength{\mylen} % a "scratch" length
%   \settowidth{\mylen}{\bfseries\cftsecpresnum\cftsecaftersnum} % extra space
%   \addtolength{\cftsecnumwidth}{\mylen} % add the extra space
    %\makeatother


\begin{document}
\tableofcontents

\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]

\end{document}

修改命令直接来自于的手册tocloft

我的目标是{the section number}\heartsuit{the section title}字符之间没有空格。我认为解决方案是让章节编号在右侧参差不齐,就像所有页码一样。该软件包似乎没有提供控制控制章节编号的框的方法。这可以用吗titletoc?(它的自述文件非常简洁,我看不懂一半的内容)

版:

@Werner:我对代码有点困惑。我想对子节和子子节使用与节相同的模式。所以我使用

\renewcommand{\cftsecaftersnum}{$\bullet$}
%\renewcommand{\cftsecnumwidth}{2em}

\renewcommand{\cftsubsecaftersnum}{$\bullet$}
%\renewcommand{\cftsubsecnumwidth}{0em}

\renewcommand{\cftsubsubsecaftersnum}{$\bullet$}
\renewcommand{\numberline}[1]{\makebox[\@tempdima][r]{\@cftbsnum #1\@cftasnum}\@cftasnumb} 

但小节和小小节的开头还不够:(我使用罗马数字来表示我的章节和小节)理想情况下,小节(和小小节)的数字必须与它所属章节的首字母一致

所以

II$\bullet$Title
           II.1$\bullet$subtitle
                        II.1.1$\bullet$subtitle

但上面的代码却不是这样。

答案1

我的目标是让 {章节编号}\heartsuit{章节标题} 中的字符之间没有空格。

然后执行以下操作即可:

在此处输入图片描述

\documentclass{article}
\usepackage{tocloft,lipsum}

\makeatletter
\renewcommand\tableofcontents{%
  \section*{\contentsname\@mkboth{}{}}%
  \thispagestyle{empty}%
  \@starttoc{toc}%
  \thispagestyle{empty}%
  \clearpage%
}

\renewcommand{\numberline}[1]{%
  \@cftbsnum #1\@cftasnum\@cftasnumb}
\renewcommand{\@dotsep}{2}
\renewcommand{\cftpnumalign}{r}
\renewcommand{\cftsecfont}{\bfseries}
\renewcommand{\cftsecleader}{\bfseries\cftdotfill{\cftsecdotsep}}
\renewcommand{\cftsecpagefont}{\bfseries}
\renewcommand{\cftsecaftersnum}{$\heartsuit$}
\makeatother

\begin{document}
\tableofcontents

\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]
\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]\section{1}\lipsum[4-11]

\end{document}

我认为解决办法是让章节编号在右侧不均匀排列,就像所有页码一样。

您可能指的是\raggedleft(或向右对齐)。为此,您可以使用以下定义\numberline和设置\cftsecnumwidth

\renewcommand{\numberline}[1]{% 
  \makebox[\@tempdima][r]{\@cftbsnum #1\@cftasnum}\@cftasnumb}
\renewcommand{\cftsecnumwidth}{2em}

在此处输入图片描述


该软件包似乎没有提供控制控制部分编号的框的方法。这可以用吗titletoc

这也许只是部分正确。但是,对于没有经验的用户来说,如何操作宏来实现您想要的效果并不那么明显。下面我将只显示一些信息,因为框的控制实际上取决于您想要做什么。

根据tocloft 文档,ToC 条目的构造具有以下分段单元形式X

这是用于排版编号 [...] 条目的简化伪代码版本。

{\cftXfont {\cftXpresnum SNUM\cftXaftersnum\hfil} \cftXaftersnumb TITLE}%
    {\cftXleader}{\cftXpagefont PAGE}\cftXafterpnum\par

就节的实际宏内容而言,上述伪代码包含在内\l@section\numberline并且\cftsecfillnum(取自tocloft.dtx并添加了注释以突出某些元素):

\renewcommand*{\l@section}[2]{%
  \ifnum \c@tocdepth >\z@
    \if@cfthaschapter
      \vskip \cftbeforesecskip
    \else
      \addpenalty\@secpenalty
      \addvspace{\cftbeforesecskip}
    \fi
    {\leftskip \cftsecindent\relax
     \rightskip \@tocrmarg
     \parfillskip -\rightskip
     \parindent \cftsecindent\relax\@afterindenttrue
     \interlinepenalty\@M
     \leavevmode
     \@tempdima \cftsecnumwidth\relax
     \let\@cftbsnum \cftsecpresnum
     \let\@cftasnum \cftsecaftersnum
     \let\@cftasnumb \cftsecaftersnumb
     \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
     {\cftsecfont #1}\nobreak% <----- This is \cftXfont; #1 relates to \numberline
     \cftsecfillnum{#2}}%
  \fi}

\renewcommand{\numberline}[1]{% 
  \hb@xt@\@tempdima{\@cftbsnum #1\@cftasnum\hfil}\@cftasnumb}% <-- This is all similar to
                % {\cftXpresnum SNUM\cftXaftersnum\hfil} \cftXaftersnumb TITLE}

\newcommand{\cftsecfillnum}[1]{%
  {\cftsecleader}\nobreak% <--- This is {\cftXleader}
  \makebox[\@pnumwidth][\cftpnumalign]{\cftsecpagefont #1}\cftsecafterpnum\par% <- This is
                                   %  {\cftXpagefont PAGE}\cftXafterpnum\par
}

从中可以清楚地看出\numberline,由于\hfil右侧有 ,因此默认设置是“右侧不齐”(或左对齐)。但是,我们可以通过将 更改\cftXpresnum\hfil并让\cftXaftersnum(也插入$\heartsuit$\@gobble右侧的来实现“左侧不齐”(或右对齐)的外观\hfil

\renewcommand{\cftsecpresnum}{\hfil}
\renewcommand{\cftsecaftersnum}{$\heartsuit$\@gobble}

以上方法与我们上面使用的方法类似

\renewcommand{\numberline}[1]{% 
  \makebox[\@tempdima][r]{\@cftbsnum #1\@cftasnum}\@cftasnumb}

以下是更新的解决方案,它将目录条目在缩进级别对齐:

ToC 对齐

\documentclass{article}
\usepackage{tocloft,lipsum}

\makeatletter
\renewcommand\tableofcontents{%
  \section*{\contentsname\@mkboth{}{}}%
  \thispagestyle{empty}%
  \@starttoc{toc}%
  \thispagestyle{empty}%
  \clearpage%
}

\renewcommand{\@dotsep}{2}
\renewcommand{\cftpnumalign}{r}
\renewcommand{\cftsecfont}{\bfseries}
\renewcommand{\cftsecleader}{\bfseries\cftdotfill{\cftsecdotsep}}
\renewcommand{\cftsecpagefont}{\bfseries}

\renewcommand{\cftsecaftersnum}{\hfill$\bullet$\hfill\null}
\renewcommand{\cftsecnumwidth}{2em}%  <--------------------------------------
                                                               %            |  <--------
\renewcommand{\cftsubsecaftersnum}{\hfill$\bullet$\hfill\null} %            |          |
\renewcommand{\cftsubsecindent}{2em}% Width of \section number in ToC -------          |
\renewcommand{\cftsubsecnumwidth}{2.5em}                          %                    |
                                                                  %                    |
\renewcommand{\cftsubsubsecaftersnum}{\hfill$\bullet$\hfill\null} %                    |
\renewcommand{\cftsubsubsecindent}{4.5em}% Width of \section + \subsection number ------
\renewcommand{\cftsubsubsecnumwidth}{3.25em}
\renewcommand{\numberline}[1]{\makebox[\@tempdima][l]{\@cftbsnum #1\@cftasnum}\@cftasnumb}

\makeatother

\begin{document}
\tableofcontents

\section{Section}\lipsum[4-11]\subsection{Subsection}\lipsum[4-11]\subsubsection{Subsubsection}\lipsum[4-11]
\section{Section}\lipsum[4-11]\subsection{Subsection}\lipsum[4-11]\subsubsection{Subsubsection}\lipsum[4-11]
\section{Section}\lipsum[4-11]\subsection{Subsection}\lipsum[4-11]\subsubsection{Subsubsection}\lipsum[4-11]
\section{Section}\lipsum[4-11]\subsection{Subsection}\lipsum[4-11]\subsubsection{Subsubsection}\lipsum[4-11]
\section{Section}\lipsum[4-11]\subsection{Subsection}\lipsum[4-11]\subsubsection{Subsubsection}\lipsum[4-11]
\section{Section}\lipsum[4-11]\subsection{Subsection}\lipsum[4-11]\subsubsection{Subsubsection}\lipsum[4-11]
\section{Section}\lipsum[4-11]\subsection{Subsection}\lipsum[4-11]\subsubsection{Subsubsection}\lipsum[4-11]
\section{Section}\lipsum[4-11]\subsection{Subsection}\lipsum[4-11]\subsubsection{Subsubsection}\lipsum[4-11]
\section{Section}\lipsum[4-11]\subsection{Subsection}\lipsum[4-11]\subsubsection{Subsubsection}\lipsum[4-11]
\section{Section}\lipsum[4-11]\subsection{Subsection}\lipsum[4-11]\subsubsection{Subsubsection}\lipsum[4-11]
\section{Section}\lipsum[4-11]\subsection{Subsection}\lipsum[4-11]\subsubsection{Subsubsection}\lipsum[4-11]

\end{document}

相关内容