使用回忆录类的 TOC 样式元素

使用回忆录类的 TOC 样式元素

我还有另一个(令人困惑的)问题。假设我有附图 在此处输入图片描述

问题是,我如何移动章节编号以与章节标题的第一行对齐?例如,使用图形,我想移动 11 以与第 3 章对齐,移动 9 以与第 2 章对齐。

我很感谢这里提供的所有帮助。让我更快地理解使用 LaTeX 排版这项业务。顺便说一句,我使用 Memoir 类。

答案1

解决方案使用titletoc

我发现该titletoc软件包提供了最佳的自定义选项 — — 只要你真正知道自己想要什么!以下是章节条目的实现:

\documentclass{memoir}
\usepackage{titletoc}

% This command "floats" the page number to the far right of the current line.
\newcommand\floatcontentspage{%
  \hbox to 0pt{%
    \hspace{-\leftskip}\hspace{\textwidth}\hspace{-\rightskip}%
    \textbf{\contentspage}}%
}
\titlecontents
  {chapter}                % 1. <section>
  [0pt]                    % 2. <left> indent (none here)
  {}                       % 3. <above code>: i.e. vertical space
  {%                       % 4. <numbered-entry-format> for numbered chapters
    \contentspush{\floatcontentspage%
      \textbf{\chaptername~\thecontentslabel}%
      \hspace{1.5em}}}
  {}                       % 5. <numberledd-entry-format> for unnumbered chapters
  {}                       % 6. <filler-page-format> no filler needed
  [\vspace{\baselineskip}] % 7. <after code>: i.e. vertical space
\begin{document}

% I am not exactly sure what I should do here, but \chapternumberline has
% \@chapapp@head which is undefined when I use titletoc... This is an
% unexplained hack to get it working
\renewcommand\chapternumberline[1]{\numberline{#1}}

\tableofcontents*
\chapter{First chapter}
\chapter{Second chapter, in which many wonderful things happen, and then other things.}
\end{document}

titletoc 解决方案

解释:

我首先定义命令\floatcontentspage

\newcommand\floatcontentspage{%
  \hbox to 0pt{%
    \hspace{-\leftskip}\hspace{\textwidth}\hspace{-\rightskip}%
    \textbf{\contentspage}}%
}

它旨在插入到内容行的开头,位于左缩进(的\leftskip)之后。它将内容排版在宽度为的框中,0pt这样就不会影响行的其余部分。我首先插入一些空格以遵循当前页边距,然后使用我包装的命令\textwidth - \leftskip - \rightskip设置页码以匹配原始海报的样式。这会将页码推到插入空格后的右侧。\contentspage\textbf{}

然后我使用该\titlecontents命令定义内容行的格式。它按以下顺序接受参数:

  1. {chapter}指定部分类型。
  2. [0pt]是可选的左边缩进(这里无:您可能希望将其用于section等)。
  3. {}没有以上代码(垂直空间)。
  4. 这是稍后讨论的编号章节的主要条目。
  5. {}我没有为未编号的章节定义任何内容。
  6. {}没有填充页格式因为我们已经排版了页码。
  7. [{\vspace{\baselineskip}]我在章节条目后添加了一些空间。(您可能想在之前就这样做。)

该工作由论点4完成:

  {%                       % 4. <numbered-entry-format> for numbered chapters
    \contentspush{\floatcontentspage%
      \textbf{\chaptername~\thecontentslabel}%
      \hspace{1.5em}}}

这会调用\contentspush插入一些文本,然后相应地缩进剩余行。我们\floatcontentspage首先插入命令,该命令将页码浮动到右侧但不占用空格,然后插入\chapternameand \thecontentlabel(in \textbf{}),给出“第 1 章”等。最后我们插入一些空格以将标题与数字分开。

最后,我不得不重新定义\chapternumberline为调用\numberline:我不明白为什么,但\chapternumberline用途\@chapapp@head未定义......

正如您所看到的,该titletoc软件包提供了很大的灵活性,但要求您知道确切地您想要什么,并且通常必须定义所有条目(我在这里仅提供了章节定义。您希望如何定义各个部分?)只要您有一个清晰的想法,在我看来,它就是最好的工具。

答案2

这是一个显示问题的最小示例,但我还没有解决方案:

\documentclass{memoir}
\begin{document}
\tableofcontents*
\chapter{First chapter, in which many wonderful things happen. And then other things.}
\chapter{Second chapter, in which many wonderful things happen. And then other things.}
\end{document}

回忆录第 9.2 节给出了 ToC 方法,并说排版编号章节的代码或多或少

{\cftchapterfont {\cftchaptername \cftchapterpresnum SNUM\cftchapteraftersnum\hfil} \cftchapteraftersnumb TITLE}
{\cftchapterleader}{\cftchapterformatpnum{PAGE}}\cftchapterafterpnum\par

将章节号替换为 SNUM,章节标题替换为 TITLE,页码替换为 PAGE。

的默认定义\cftchapterformatpnum应该是这样的

\makeatletter
\renewcommand*{\cftchapterformatpnum}[1]{%
\hbox to \@pnumwidth{\hfil{\cftchapterpagefont #1}}}
\makeatother

但由于页码仅限于常规基线上的一个框,我不知道是否有一种简单的方法可以在排版该框之前向上移动几行。

但也许这会缩小问题范围,以便其他人能够发布解决方案。

答案3

由于所需的样式相当不寻常,因此没有简单的解决方案。您必须重新编码命令,\l@chapter将标题放在与\parbox顶行对齐的内。然后它应该是可行的。

答案4

您仍然需要\l@chapapp使用重叠框或重写\rlap。我不会使用这种方法,因为它真的很丑 :-)

\documentclass{memoir}
\usepackage{calc}
\renewcommand*{\cftchaptername}{\chaptername~}
\renewcommand*{\cftappendixname}{\appendixname~}
\renewcommand*{\cftchapteraftersnum}{.}
\setlength{\cftchapternumwidth}{2em}

\makeatletter
\renewcommand*{\l@chapapp}[3]{%
  \ifnum \c@tocdepth >\m@ne
    \cftchapterbreak
    \vskip \cftbeforechapterskip
    {\memRTLleftskip \cftchapterindent\relax
     \memRTLrightskip \@tocrmarg
     \parfillskip -\memRTLrightskip
     \parindent \cftchapterindent\relax
     \@afterindenttrue
     \interlinepenalty\@M
     \leavevmode
     \let\@cftbsnum \cftchapterpresnum
     \let\@cftasnum \cftchapteraftersnum
     \let\@cftasnumb \cftchapteraftersnumb
     \def\@chapapp@head{#3}%
     \settowidth{\@tempdima}{\cftchapterfont\@chapapp@head}%
     \addtolength{\@tempdima}{\cftchapternumwidth}%
     \advance\memRTLleftskip \@tempdima 
     \makebox[0pt][l]{\makebox[\linewidth-\@tempdima][r]{\myformatpnum{#2}}}%<<<NEW LINE
     \null\nobreak\hskip -\memRTLleftskip
     {\cftchapterfont #1}\nobreak
     \cftchapterfillnum{#2}}%
  \fi}

\let\myformatpnum\cftchapterformatpnum
\renewcommand\cftchapterformatpnum[1]{}

\makeatother

\begin{document}
\frontmatter
\tableofcontents
\clearpage
\mainmatter

\chapter{This is the first chapter}
\chapter{This is the second chapter, This is the second chapter, This is the second chapter}
\chapter{This is the third chapter}
\chapter{This is the forth chapter, This is the forth chapter, This is the forth chapter}
\appendix

\chapter{Appendix one}
\end{docume

相关内容