我正在编写一个应该输出印刷尺寸的包。例如绝对字符高度、x 高度、平均字符宽度……这些应该在序言中提供。
\documentclass[12pt]{scrartcl}
\usepackage{fontspec}
\usepackage{expl3} % load latex3 packages
\usepackage{xparse}
\setmainfont{Linux Libertine O}
\setsansfont[Scale=MatchLowercase]{Linux Biolinum O}
\setmonofont[Scale=MatchLowercase]{Droid Sans Mono}
\newlength{\totalheight}
\ExplSyntaxOn
\tl_const:Nn \c_typo_height_chars_tl {HIyjqpg}
\cs_new_protected:Npn \typo_set_totalheight:Nn #1#2 {
\group_begin:
\vbox_set:Nn \l_tmpa_box { #2 \c_typo_height_chars_tl }
\exp_args:NNNe
\group_end:
\dim_set:Nn #1 { \dim_eval:n { \box_ht_plus_dp:N \l_tmpa_box } }
}
\exp_args_generate:n {NNe}
\typo_set_totalheight:Nn \totalheight {}
\ExplSyntaxOff
\begin{document}
\the\totalheight
\end{document}
但我得到了错误
! LaTeX Error: Missing \begin{document}.
我做错了什么?
答案1
你\typo_set_totalheight:Nn
使用两个参数进行定义,但只提供了一个参数,TeX 会将其\ExplSyntaxOff
作为第二个参数提取。混乱随之而来。
\documentclass[12pt]{scrartcl}
\usepackage{fontspec}
\newlength{\totalheight}
\ExplSyntaxOn
\tl_const:Nn \c_typo_height_chars_tl {HIyjqpg}
\cs_new_protected:Npn \typo_set_totalheight:Nn #1#2 {
\group_begin:
\hbox_set:Nn \l_tmpa_box { #2 \c_typo_height_chars_tl }
\exp_args:NNNe
\group_end:
\dim_set:Nn #1 { \dim_eval:n { \box_ht_plus_dp:N \l_tmpa_box } }
}
\exp_args_generate:n { NNe }
\AtBeginDocument{\typo_set_totalheight:Nn \totalheight {} }
\ExplSyntaxOff
\begin{document}
\the\totalheight
\end{document}
无需加载expl3
并xparse
使用最新的 LaTeX 版本。我不会使用\vbox_set:Nn
但\hbox_set:Nn
。并且您需要生成\exp_args:NNNe
。
最好在文档开始时进行设置,因为\normalfont
在序言中实际上并不知道。