我正在尝试在 LaTeX 中复制我公司的企业设计 Word 模板,并获得了包含所有相关措施的手册:
不幸的是,它们中的大多数都指的是第一行的基线高度,而top
LaTeXgeometry
包的参数定义了文本区域的上边缘。
我使用接近预期的结果
\newgeometry{
top=60.5mm-\baselineskip
}
在文档内部,但是
- 要减去的真实高度取决于实际的字体大小,因此
\scriptsize
在页脚或页眉中,\baselineskip
并不完全正确(?) newgeometry
这在文档内部有效,但\usepackage[top=60.5mm-\baselineskip]{geometry}
在.cls
样式类中使用它时会引发错误
有没有一个好的方法可以使用 10pt 和 7pt 字体的实际高度进行几何位置计算,最好是在样式类中?
答案1
您需要\dimexpr...\relax
在这样的地方使用它来进行即时计算。
\documentclass{article}
\usepackage[top=\dimexpr 60.5mm-\baselineskip\relax]{geometry}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\end{document}
但是,既然你说给定的尺寸“指的是第一行的基线高度”,那么你真正想要的(感谢 John K.)是
\documentclass{article}
\usepackage[top=\dimexpr 60.5mm-\topskip\relax]{geometry}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\end{document}
因为\topskip
是仅文本空间分配的高度高于基线(请注意,我最初的建议是\ht\strutbox
,其中还包括字母区域上方的死区)。
需要注意的是:由于规范是基线,因此无需调整以\topskip
匹配,例如,在中指定的首行 \scriptsize
。也就是说,如果你将第一行改为,\tiny\lipsum[1]
你会发现到文本第一行基线的距离没有改变!只要修改后的\ht\strutbox
基线跳跃小于原始基线跳跃(通常最多为\large
或\Large
),此观察结果将是正确的。一旦超过该值,页面的第一行将被向下推。
在此处以图形方式查看,红色条沿页面向下延伸正好 60.5 毫米:
\documentclass{article}
\usepackage[top=\dimexpr 60.5mm-\topskip\relax]{geometry}\usepackage{everypage}
\usepackage{xcolor}
\usepackage{lipsum}
% THESE ARE LaTeX DEFAULTS; CAN CHANGE IF NEEDED.
\def\PageTopMargin{1in}
\def\PageLeftMargin{1in}
\newcommand\atxy[3]{%
\AddEverypageHook{\smash{\hspace*{\dimexpr-\PageLeftMargin-\hoffset+#1\relax}%
\raisebox{\dimexpr\PageTopMargin+\voffset-#2\relax}{\textcolor{red}{#3}}}}}
\atxy{1.5in}{0in}{\rule[-60.5mm]{2pt}{60.5mm}}
\begin{document}
\lipsum[1]
\the\ht\strutbox \the\topskip \the\baselineskip
\clearpage
\tiny\lipsum[1]
\the\ht\strutbox \the\topskip \the\baselineskip
\clearpage
\huge\lipsum[1]
\the\ht\strutbox \the\topskip \the\baselineskip
\clearpage
\end{document}
\normalsize
:
\tiny
:
\huge
: