我想编写一个宏,返回\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}