我的问题是,要介绍的符号和章节标题之间存在重叠;它表现为\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}
以下是更新的解决方案,它将目录条目在缩进级别对齐:
\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}