我试图让所有页面的行都保持在相同的网格中。所以我设置了上下空格\chapter
等来补偿标题之间的\section
差异。baselineskip
例如,我将 设置为\beforechapskip
, 3.5\onelineskip
因为章节的字体大小设置为,\LARGE
在回忆录中,这意味着它的基线跳跃为 18pt(18pt - \onelineskip = 6pt)。
我设置\beforesecskip
为-2\onelineskip + 2.5pt
补偿部分字体大小\large
,结果baselineskip为14.5pt
但是我很难理解 LaTeX 在不同情况下如何处理上方和下方的垂直空间等\chapter
:\section
因为这似乎会导致完美的网格,除非某个部分直接跟在某个章节后面。
为什么?我以为 LaTeX 会占用该部分上方的空间,这样得到的结果与将该部分设置在页面顶部时相同。但事实并非如此,而是将其设置为比网格低 2.5pt。
我能做什么?我想到的唯一解决方案是重新定义命令,并chapter
在命令末尾添加如下内容:
\@ifnextchar\section{\vspace*{-2.5pt}}{}%
但这仅在章节和章节之间没有换行符时才有效,而且无论如何这似乎是一个混乱的解决方案。
这是一个最小的工作示例:
\documentclass[a4paper,10pt,twoside]{memoir}
\usepackage{calc}
\usepackage{lipsum}
\setlength{\parskip}{0pt plus 0pt minus 0pt}
\renewcommand{\chapnamefont}{\centering\normalfont}
\renewcommand{\chapnumfont}{\centering\normalfont}
\setlength{\midchapskip}{\onelineskip}
\setlength{\afterchapskip}{2\onelineskip}
\setlength{\beforechapskip}{3.5\onelineskip}
\renewcommand*{\printchapternonum}{\vspace{2\onelineskip}}
\renewcommand\chaptitlefont{\centering\LARGE\normalfont}
\setsecheadstyle{\centering\Large\normalfont\noindent}
\setbeforesecskip{-2\onelineskip + 2.5pt}
\setaftersecskip{\onelineskip}
\begin{document}
\chapter{Test}
\section{Test}
\lipsum[2-12]
\chapter{Test what ever?}
\lipsum[2-12]
\section{Test}
\lipsum[2-11]
\newpage
\section{Don't read that sh*t1}
\lipsum[2-11]
\end{document}
以下是一些屏幕截图:
编辑:我发现解决方案可能是:
\setlength{\afterchapskip}{2\onelineskip plus 0pt minus 2.5pt}
答案1
memoir 在节的开头有一个钩子,可以用来插入负空间。如果要进行网格排版,请不要使用可拉伸空间。您可能还需要 \raggedbottom。
\documentclass[a4paper,10pt,twoside]{memoir}
\usepackage{calc}
\usepackage{lipsum}
\setlength{\parskip}{0pt plus 0pt minus 0pt}
\renewcommand{\chapnamefont}{\centering\normalfont}
\renewcommand{\chapnumfont}{\centering\normalfont}
\setlength{\midchapskip}{\onelineskip}
\normalfont
\setlength{\afterchapskip}{2\onelineskip}
\setlength{\beforechapskip}{3.5\onelineskip}
\renewcommand*{\printchapternonum}{\vspace{2\onelineskip}}
\renewcommand\chaptitlefont{\centering\LARGE\normalfont}
\setsecheadstyle{\centering\Large\normalfont\noindent}
\setbeforesecskip{-2\onelineskip+2.5pt}
\setaftersecskip{\onelineskip}
\makeatletter
\newcommand\sectionblock{\if@nobreak \vskip-2.5pt\fi}
\makeatother
%to show the grid
\usepackage{returntogrid,tikz}
\AddToShipoutPictureBG {\AtTextUpperLeft{\showdebugpagegrid}}
\begin{document}
\chapter{Test}
\section{Test}
abc
\section{Test}
TTTabc
\section{Tesy}
abc
\chapter{Tesy}
\section{Test}
abc
\chapter{Tesy}
abc
\chapter{Test}
abc
\end{document}