以下 MCE:
\documentclass{article}
\usepackage{tikz}
% \usepackage{luatexja}
\begin{document}
\tikz{\coordinate[yshift=\the\ht\strutbox];}
\end{document}
编译时没有任何可疑之处,但是,如果luatexja
加载了包,则.log
文件包含(奇怪的是既不是警告也不是错误):
(\end occurred when \ifnum on line 25 was incomplete)
(\end occurred when \if on line 25 was incomplete)
谁是罪魁祸首:
- 包裹
luatexja
? - 该代码
tikz{\coordinate[yshift=\ht\strutbox];}
的错误本质是如何揭示的luatexja
?
编辑
以下是现实世界使用失败的一个例子(摘录)(真实文档包含ProfCollege
和hanzibox
包的评论):
\documentclass{article}
\usepackage{ProfCollege}
\usepackage{luatexja}
\begin{document}
\Pourcentage[Calculer]{15}{39}
\verb+\hanzibox*[frametype=none]{我}[wo3][moi]\\[1ex]+
\end{document}
答案1
这是可行的,但是得到的长度是相当难以预测的,因为它取决于当前文本的方向。
\documentclass{article}
\usepackage{tikz}
\usepackage{luatexja}
\begin{document}
\tikz{\coordinate[yshift=\the\expandafter\ht\expanded{\strutbox}];}
\end{document}
当只是一个盒子寄存器名称时它也能起作用\strutbox
,因为它不可扩展并且因此\expanded
返回\strutbox
。
为了使其工作ProfCollege
,您可以修补使用构造的包中的宏
\documentclass{article}
\usepackage{ProfCollege}
\usepackage{luatexja}
\usepackage{etoolbox}
% the abstract version of the above
\newcommand{\getstrut}[1]{%
\the\expandafter#1\expanded{\strutbox}%
}
% the internal commands of ProfCollege to patch
\patchcmd{\TikzPH}{\the\dp\strutbox}{\getstrut\dp}{}{}
\patchcmd{\TikzPHD}{\the\dp\strutbox}{\getstrut\dp}{}{}
\patchcmd{\TikzPHD}{\the\dp\strutbox}{\getstrut\dp}{}{}
\patchcmd{\TikzPB}{\the\ht\strutbox}{\getstrut\ht}{}{}
\patchcmd{\TikzPBD}{\the\ht\strutbox}{\getstrut\ht}{}{}
\patchcmd{\TikzPBD}{\the\ht\strutbox}{\getstrut\ht}{}{}
\patchcmd{\TikzRH}{\the\ht\strutbox}{\getstrut\ht}{}{}
\patchcmd{\TikzRB}{\the\dp\strutbox}{\getstrut\dp}{}{}
% the user level command to patch
\patchcmd{\FlecheLineaireH}{\ht\strutbox}{\getstrut\ht}{}{}
\begin{document}
\Pourcentage[Calculer]{15}{39}
\verb+\hanzibox*[frametype=none]{我}[wo3][moi]\\[1ex]+
\begin{center}
\Propor[
Stretch=1.25,
Math,
GrandeurA=Hauteur $h$ (cm),
GrandeurB=\begin{tabular}{c}Volume (en cm$^3$) d'un cylindre\\ de rayon \Lg{5} et
de hauteur $h$\end{tabular},
Largeur=0.75cm
]{2/$50\pi$,3/$75\pi$,5/}
\end{center}
\FlecheLineaireH{1}{2}{3}{$+$}
\FlecheLineaireB{1}{2}{3}{$+$}
\end{document}
唯一使用的用户级命令\ht\strutbox
是\FlecheLineaireH
,很奇怪没有\the
,但我从包文档中复制了示例,它似乎可以工作。
以前的警告仍然适用:如果您使用允许的不同文本方向luatexja
,则会遇到麻烦。