几何包:在类定义中使用动态间距变量

几何包:在类定义中使用动态间距变量

我正在尝试在 LaTeX 中复制我公司的企业设计 Word 模板,并获得了包含所有相关措施的手册:

在此处输入图片描述

不幸的是,它们中的大多数都指的是第一行的基线高度,而topLaTeXgeometry包的参数定义了文本区域的上边缘。

我使用接近预期的结果

\newgeometry{
    top=60.5mm-\baselineskip
}

在文档内部,但是

  1. 要减去的真实高度取决于实际的字体大小,因此 \scriptsize在页脚或页眉中,\baselineskip并不完全正确(?)
  2. 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

在此处输入图片描述

相关内容