\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