帮助理解回忆录章节标题中的规则和领导者

帮助理解回忆录章节标题中的规则和领导者

在另一个邮政我收到了创建章节标题的代码Memoir。我想在水平双线之间添加一些文本,如下所示:

========= Hello World======== 章节名称

(参见下面的 MWE)现在我想了解发生了什么,以便我可以用特定行修改双重规则。我花了一些令人沮丧的时间玩弄数字。没有任何东西像我期望的那样运行......我想知道是否有人可以评论代码段及其用途。首先,我想将顶部规则设为 1 pt,间隙为 .5pt,然后将下部规则设为 .5pt......但为了将来参考,我真的很想了解发生了什么。

\documentclass{memoir}
\usepackage{lipsum}

\newdimen\ruleheight \ruleheight=.4pt
\def\doublerule#1{\vbox{\setbox0=\hbox{ #1 }%
   \baselineskip=3pt \lineskiplimit=-\maxdimen
   \hbox to\hsize{\ruleheight=1.2pt\doubleruleA\kern\wd0\doubleruleA}%
   \hbox to\hsize{\doubleruleA\box0 \doubleruleA}}}
\def\doubleruleA{{\advance\ruleheight by2pt\leaders\vrule height\ruleheight     depth-1pt\hfil}}    

\makechapterstyle{mychapter}{%
\renewcommand{\printchaptername}{}% suppress "Chapter" from heading
\renewcommand*{\printchapternum}{}% suppress numbering from heading
\renewcommand*{\chaptitlefont}{\centering}% title formatting
\renewcommand\afterchapternum{%
\vskip1em \cleaders\doublerule{Hello world}\vskip\baselineskip \vskip2em}
\setlength\beforechapskip{10pt}% 
\setlength\afterchapskip{30pt}% adjust vertical space after the title
}

\chapterstyle{mychapter}

\begin{document}

\chapter{Sample Chapter}
\lipsum[1]


 \end{document}

答案1

\def\doublerule#1{%
  \vbox{
     \setbox0=\hbox{ #1 }%
     \baselineskip=3pt \lineskiplimit=-\maxdimen
     \hbox to\hsize{\ruleheight=1.2pt\doubleruleA\kern\wd0\doubleruleA}%
     \hbox to\hsize{\doubleruleA\box0 \doubleruleA}%
  }%
}
\def\doubleruleA{{
  \advance\ruleheight by2pt
  \leaders\vrule height\ruleheight depth-1pt\hfil}}

我们来逐行看一下代码。

首先启动 a \vbox;在其中设置一个临时框,并将参数用空格括起来。

然后\baselineskip将 设置为 3pt,并将 设置为\lineskiplimit意味着就行间计算而言,没有两条线会被认为太靠近彼此。

然后是一个水平框\doubleruleA,其中包含,一个与文本(章节标题)一样宽的空白区域加上空格,然后再次\doubleruleA;但规则的宽度设置为 1.2pt(对于较重的规则)。

此后设置第二行,具有标准规则宽度;它与之前相同,但在中间使用设置文本\box0

的工作原理\doubleruleA是(局部)将规则厚度增加 2pt,但由于深度为负,因此会减少 1pt。此规则将尽可能延伸,因此它将填充 使用的框\doublerule

在我看来,这使得控制规则的相对位置变得相当困难。如果您想增加规则之间的空间,请按照 操作\baselineskip=3pt

这是我的操作方法,更清晰地设置距离和厚度。

\documentclass{memoir}
\usepackage{lipsum}

\newcommand{\upperchapterrule}{1.6pt} % upper rule
\newcommand{\lowerchapterrule}{0.8pt} % lower rule
\newcommand{\chapterrulesep}{2pt}     % space between the rules
\newcommand{\chapterruleoffset}{1pt}  % distance of the bottom rule from the baseline

\newcommand{\doublerule}[1]{%
  \vbox{
    \sbox0{ #1 }%
    \dimen0=\textwidth
    \advance\dimen0 by -\wd0
    \divide\dimen0 by 2 % width of the rules
    \noindent
    \makedoublerule
    \usebox{0}%
    \makedoublerule
  }
}

\newcommand{\makedoublerule}{%
  \vbox{
    \hrule width \dimen0 height \upperchapterrule
    \vskip\chapterrulesep
    \hrule height \lowerchapterrule
    \vskip\chapterruleoffset
  }%
}

\makechapterstyle{mychapter}{%
  \renewcommand{\printchaptername}{}% suppress "Chapter" from heading
  \renewcommand*{\printchapternum}{}% suppress numbering from heading
  \renewcommand*{\chaptitlefont}{\centering}% title formatting
  \renewcommand\afterchapternum{%
    \vskip1em
    \cleaders\doublerule{Hello world}\vskip\baselineskip
    \vskip2em
  }%
  \setlength\beforechapskip{10pt}% 
  \setlength\afterchapskip{30pt}% adjust vertical space after the title
}

\chapterstyle{mychapter}

\begin{document}

\chapter{Sample Chapter}
\lipsum[1]


 \end{document}

在此处输入图片描述

命令\makedoublerule是主要部分:计算出所需宽度后,绘制两条规则。TeX 不会在规则之间添加行间粘连,因此我们可以确定它们之间的间距就是我们通过 指定的\vskip\chapterrulesep。同样,与基线的偏移量也是通过 参数指定的。

该命令\doublerule只是计算所需的宽度,然后调用\makedoublerule,排版文本(由空格包围)并\makedoublerule再次调用。

如果我将参数改为

\newcommand{\upperchapterrule}{0.5pt} % upper rule
\newcommand{\lowerchapterrule}{1pt}   % lower rule
\newcommand{\chapterrulesep}{2.5pt}   % space between the rules
\newcommand{\chapterruleoffset}{0pt}  % distance of the bottom rule from the baseline

在此处输入图片描述

相关内容