在回忆录目录中居中多行 \part 条目

在回忆录目录中居中多行 \part 条目

准备工作:我已经多次阅读了 ToC 上的回忆录手册部分。虽然我能够完成很多我想做的事情,但我无法修复最后一部分。

我也查阅过之前的问题/答案(其中有几条是关于尝试以各种方式格式化 \part 条目,特别是居中),但他们没有给我答案。尽管问题标题相似,但我不认为这是重复的。其他问题/答案包括: 使用回忆录将部分条目置于目录中我怎样才能正确地将目录居中?自定义回忆录中的目录、居中对齐和斜体如何使用回忆录将部分条目置于目录中的中心?, 和 回忆录:目录中的部分内容以两行显示

问题:每个部分条目都应位于目录标题下方的中央(“目录”以粗体 + 斜体显示)。我无法让条目居中。

每个部分条目都包含前缀“Part”、部分编号、冒号、换行符、部分标题、空格、居中句号、空格、页码。单词“Part”应为小写字母,“Part”/空格/部分编号/冒号应为正常字体。部分标题/居中句号/页码应为粗体。部分标题可以是多行的。下图显示了所需的最终状态: 在此处输入图片描述

妇女权利委员会:这是我目前工作的 MWE:

\documentclass[smallroyalvopaper,11pt,twoside]{memoir}

\title{\HUGE{\textbf{Name of Book} \\ \LARGE{\textit{Subtitle of book}}}}
\author{\Large{Author's Name}}
\date{Date Written}

\makeatletter
\renewcommand{\printtoctitle}[1]{\centering\Large\textit{\textbf{Contents}}}

\setpnumwidth{2em}
\setrmarg{4em}
\setlength{\cftpartnumwidth}{0em}
\setlength{\cftpartindent}{0em}
\setlength{\cftbeforepartskip}{12pt}
\renewcommand{\cftpartleader}{}
\cftsetindents{part}{\cftpartindent}{\@pnumwidth}

\renewcommand*{\cftpartname}{}%
\renewcommand*{\cftpartfont}{\normalsize\scshape}%
\renewcommand*{\cftpartaftersnum}{}%
\renewcommand*{\cftpartaftersnumb}{\\}%

\renewcommand*{\cftpartformatpnum}[1]{%
    \cftpartformatpnumhook{#1}%
    \hbox to \@pnumwidth{\enspace\textperiodcentered\enspace{\cftpartpagefont #1}\hfil}}%
\renewcommand{\cftpartafterpnum}{\cftparfillskip}%

\long\def\@part[#1]#2{%
  \M@gettitle{#1}%
  \def\f@rtoc{\hfil\bfseries{#1}}
  \@nameuse{part@f@rtoc@before@write@hook}%
  \phantomsection
  \mempreaddparttotochook
  \ifnum \c@secnumdepth >-2\relax
    \refstepcounter{part}%
    \addcontentsline{toc}{part}%
      {\protect\partnumberline{\hspace*{5em}\hfil Part~\thepart :\hfil\\}\f@rtoc}%
    \mempartinfo{\thepart}{\f@rtoc}{#2}%
  \else
    \addcontentsline{toc}{part}{\f@rtoc}%
    \mempartinfo{}{\f@rtoc}{#2}%
  \fi
  \mempostaddparttotochook
  \partmark{#1}%
  {\centering
   \interlinepenalty \@M
   \parskip\z@
   \normalfont
   \ifnum \c@secnumdepth >-2\relax
     \printpartname \partnamenum \printpartnum
     \midpartskip
   \fi
   \printparttitle{#2}\par}%
  \@endpart}
\makeatother

\begin{document}
\maketitle
\clearpage
\tableofcontents*
\mainmatter
\part{This is the First Part Heading}
\part{This is the Second Part Heading which is a Long Heading to Check for Wrap Formatting}
\part{This is the Third Part Heading}
\end{document}

我尝试过对类似问题的答案进行排列、迭代和组合。显然,这些方法都不起作用:条目不居中。当前 MWE 产生以下结果:

在此处输入图片描述

(注意:根据另一个问题,hspace 设置为 5em。tocrmarg = 4em 加上 1em 用于插入编号和标题之间的间隙回忆录。)附注:我试图实现的 ToC 格式是 Jacques Barzun 在他的书中使用的,从黎明到颓废。最后,虽然有些地方可以压缩,但如果压缩不会影响最终结果,它只是“清理”代码,如果您能避免进行这些更改,我将不胜感激。最终,此代码是一个更大的项目的一部分,将用于教学目的,因此能够逐行浏览会有所帮助。

感谢你的协助。

答案1

这是一个可能的解决方案

有两个部分。首先,我们重新定义\partnumberline以摆脱装箱,我们将在那里添加大量输出格式。请注意,目录条目的标题部分将作为

 \partnumberline{number}Title

接下来我们进行修补\l@part以摆脱一些分组。

\documentclass[smallroyalvopaper,11pt,twoside]{memoir}

% formatting really does not belong inside \title and friends /daleif
\title{\HUGE{\textbf{Name of Book} \\ \LARGE{\textit{Subtitle of book}}}}
\author{\Large{Author's Name}}
\date{Date Written}

\makeatletter
\renewcommand{\printtoctitle}[1]{\centering\Large\textit{\textbf{Contents}}}

\setpnumwidth{2em}
\setrmarg{4em}
\setlength{\cftpartnumwidth}{0em}
\setlength{\cftpartindent}{0em}
\setlength{\cftbeforepartskip}{12pt}
\renewcommand{\cftpartleader}{}
\renewcommand*{\cftpartfont}{}%
% debox \partnumberline
\renewcommand\partnumberline[1]{%
  \centering
  \normalsize\scshape Part~#1:
  \normalfont\bfseries
  \par
}
\renewcommand*{\cftpartformatpnum}[1]{\enspace\textperiodcentered\enspace#1}

\usepackage{etoolbox}
% patch \l@part to remove some grouping

\patchcmd\l@part{%
  {\cftpartfont {#1}}\cftpartfillnum{#2}%
}{%
  #1\cftpartfillnum{#2}%
}{\typeout{patched}}{\FAILED}

\makeatother

\begin{document}
\maketitle
\clearpage
\tableofcontents*
\mainmatter
\part{This is the First Part Heading}
\part{This is the Second Part Heading which is a Long Heading to Check for Wrap Formatting}
\part{This is the Third Part Heading}
\end{document}

在此处输入图片描述

相关内容