使用规则确定盒子的高度

使用规则确定盒子的高度
\documentclass{scrartcl}

\usepackage{calc}
\usepackage{showframe}

\begin{document}
\setlength\parindent{0pt}
\newsavebox\maintitleBox
\newlength\maintitleHeight
\newcommand{\maintitle}[1]{%
    \clearpage%
    \savebox\maintitleBox{%
        \parbox{\textwidth}{%
            #1

            \rule{\textwidth}{1mm}\par%
        }%
    }%
    \setlength\maintitleHeight{\ht\maintitleBox + \dp\maintitleBox}%
    \vspace*{-\maintitleHeight}\usebox\maintitleBox
}%

\maintitle{Test}
\end{document}

在某些页面上,主标题应该位于文本区域上方。我试图做的是保存框的高度,并将框向上移动框的高度。

但是,我无法让它工作。我遗漏了什么?

编辑:如果我更致力于测试,我就会发现这\maintitleHeight只是文本的高度,而不是下面规则的高度。现在的问题是:为什么会这样,我该如何解决这个问题?

答案1

如果您的目的是使粗线位于文本区域的顶部,则不需要进行测量:

\documentclass{scrartcl}

\usepackage{showframe}

\newcommand{\maintitle}[1]{%
  \clearpage
  \vspace*{-\dimexpr\topskip+\baselineskip}
  \noindent
  \parbox[b][0pt]{\textwidth}{%
    #1\par
    \rule{\textwidth}{1mm}\par
    \vspace{0pt}
  }%
}

\begin{document}

\maintitle{Test}

Some text follows

\end{document}

在此处输入图片描述

答案2

目前还不清楚你想做什么,\parbox默认情况下是垂直居中,你的盒子有

> \box29=
\hbox(13.27873+7.80376)x418.25555
.\pdfcolorstack 0 push {0 g 0 G}
.\mathon
.\vbox(13.27873+7.80376)x418.25555
..\hbox(7.48248+0.0)x418.25555, glue set 397.81555fil []
..\glue(\parskip) 0.0
..\glue(\baselineskip) 10.75475
..\hbox(2.84526+0.0)x418.25555 []
.\mathoff
.\pdfcolorstack 0 pop

因此它有一行文本,然后是规则,尽管只有 1 毫米高,但却\baselineskip为盒子的总高度+深度增加了另外 12pt。

在页面顶部

...\glue(\topskip) 11.0

% 设置此类中的第一个基线

...\rule(0.0+0.0)x*
...\penalty 10000
...\glue -21.08249

% 你添加的负空间

...\glue 0.0
...\glue(\parskip) 0.0 plus 1.0

% parskip 在 \usebox 之前(可能会拉长)

...\glue(\baselineskip) 0.32127

% baselineskip 和你的盒子的高度一起组成 13.6pt。

...\hbox(13.27873+7.80376)x418.25555

% \usebox

相关内容