用于计算给定字体的 \baselineskip 的宏

用于计算给定字体的 \baselineskip 的宏

我想编写一个宏,返回\baselineskip给定字体规格的乘积与固定值的乘积。这似乎比我想象的要难……经过一番折腾,我想出了这个:

\ExplSyntaxOn
\box_new:N   \baseline_box
\newcommand{\threeLineSkip}[1]{
    %\box_new:N   \baseline_box
    \hbox_set:Nn \baseline_box { #1 \rule{1pt}{\baselineskip} g }

    3\box_ht:N \baseline_box
}
\ExplSyntaxOff

\newlength{\test}
\setlength{\test}{\threeLineSkip{\Huge}}

\typeout{\the\test}

显然,这还不起作用,否则我就不会问这个问题了。错误出现在以下\setlength行上:

! Illegal unit of measure (pt inserted).

但我不明白为什么。我甚至希望有一个 LuaTeX 解决方案,但我甚至不知道如何开始。

答案1

设置框不可扩展,因此\threeLineSkip无法扩展到一定长度。由于\setlength需要长度作为参数,因此会造成阻塞。您可以通过定义一个用于设置长度的新命令来规避此问题:

\documentclass{article}
\usepackage{expl3,xparse}

\ExplSyntaxOn
\box_new:N \l_MiB_baseline_box

\NewDocumentCommand \SetThreeLineSkip { mm }
  { \MiB_set_three_line_skip:Nn #1 { #2 } }

\cs_new_protected:Npn \MiB_set_three_line_skip:Nn #1#2
  {
    \hbox_set:Nn \l_MiB_baseline_box
      { #2 \rule {1pt} {\baselineskip} g }
    \skip_set:Nn #1 { 3\box_ht:N \l_MiB_baseline_box }
  }

\ExplSyntaxOff

\newlength{\test}
\SetThreeLineSkip\test{\Huge}

\begin{document}

\the\test

\end{document}

相关内容