这是一个衍生问题暂时更改目录中章节的垂直间距。就像问题的答案一样,我设法实现了在主要内容之前、之中和之后的章节的自定义垂直间距。与该问题相反,我使用 memoir 的\frontmatter
、\mainmatter
和\backmatter
命令在语义上分离这些文档部分。
现在:是否可以通过某种方式将章节的垂直间距命令移动到序言中,例如通过使用命令\*matter
作为触发器?我确实希望尽可能将自定义格式命令排除在文档主体之外。
平均能量损失具有所需的输出,但标记散布在整个文档中:
\documentclass{memoir}
\usepackage{etoolbox}
\setlength{\cftbeforechapterskip}{3pt}
\begin{document}
\frontmatter
\tableofcontents
\chapter{Foreword}
\chapter{Abstract}
\mainmatter
\pretocmd{\chapter}{\addtocontents{toc}{\addvspace{6pt}}}{}{}
\chapter{Chapter One}
\section{Section One One}
\section{Section One Two}
\section{Section One Three}
\section{Section One Four}
\chapter{Chapter Two}
\section{Section Two One}
\section{Section Two Two}
\section{Section Two Three}
\chapter{Chapter Three}
\section{Section Three One}
\section{Section Three Two}
\section{Section Three Three}
\section{Section Three Four}
\section{Section Three Five}
\backmatter
\appendix
\chapter{Appendix One}
\pretocmd{\chapter}{\addtocontents{toc}{\addvspace{-6pt}}}{}{}
\chapter{Appendix Two}
\chapter{Appendix Three}
\end{document}
答案1
用于etoolbox
添加您需要的内容。
\documentclass{memoir}
\usepackage{etoolbox}
\setlength{\cftbeforechapterskip}{3pt}
\pretocmd{\chapter}{\ojdospacing}{}{}
\apptocmd{\mainmatter}{\let\ojdospacing\ojdospacingon}{}{}
\apptocmd{\backmatter}{\ojdospacing\let\ojdospacing\relax}{}{}
\newrobustcmd{\ojdospacingon}{%
\addtocontents{toc}{\addvspace{6pt}}%
}
\let\ojdospacing\relax % initialize
\begin{document}
\frontmatter
\tableofcontents
\chapter{Foreword}
\chapter{Abstract}
\mainmatter
\chapter{Chapter One}
\section{Section One One}
\section{Section One Two}
\section{Section One Three}
\section{Section One Four}
\chapter{Chapter Two}
\section{Section Two One}
\section{Section Two Two}
\section{Section Two Three}
\chapter{Chapter Three}
\section{Section Three One}
\section{Section Three Two}
\section{Section Three Three}
\section{Section Three Four}
\section{Section Three Five}
\backmatter
\appendix
\chapter{Appendix One}
\chapter{Appendix Two}
\chapter{Appendix Three}
\end{document}
当\backmatter
发出时,\ojdospacing
会最后一次执行,然后恢复为 的意思\relax
。