如何访问序言中的unicode数学符号?

如何访问序言中的unicode数学符号?

通过最小工作示例演示问题

我在文件中保存了以下 LaTeX 代码~/Test.tex

\documentclass{article}
\usepackage{unicode-math}
\setmathfont{STIX Two Math}
\newlength{\mytrianglewidth}
\begin{document}
\settowidth{\mytrianglewidth}{$\smallblacktriangleright$}
\the\mytrianglewidth
\end{document}

该代码创建了一个类的文档article。它加载STIX 两个数学font,它使命令 等可用\smallblacktriangleright。然后它创建一个名为 的新长度变量\mytrianglewidth。在文档主体中,它将长度变量初始化为与\smallblacktriangleright命令关联的字形的宽度。最后,它打印出长度变量的值。

然后我在终端中执行了以下命令。

> cd ~
> lualatex Test

编译成功完成,并创建了文件~/Test.pdf。在 PDF 查看器中打开时,该文件显示字符串6.76pt

到目前为止一切顺利。我现在将命令移至\settowidth序言末尾,然后重新编译。编译失败,并~/Test.log包含以下消息。

! Undefined control sequence.
<recently read> \smallblacktriangleright 
                         
l.7 ...\mytrianglewidth}{$\smallblacktriangleright$}
                                                  
? 
! Emergency stop.
<recently read> \smallblacktriangleright 
                         
l.7 ...\mytrianglewidth}{$\smallblacktriangleright$}
                                                  
End of file on the terminal!

问题

有没有办法访问STIX 两个数学字体在序言中,这是否会导致编译失败?

动机

之所以有这个愿望,是为了能够定义命令,比如\mymarginpar这个答案

可能的解决方案

解决这个问题的一种方法是将\settowidth命令传递给\AtBeginDocument钩子,因此:

...
\AtBeginDocument{\settowidth{\mytrianglewidth}{$\smallblacktriangleright$}}
\begin{document}
...

这个方法可行,但感觉像是作弊,因为 的值\smallblacktriangleright在前言中并没有真正被访问。我想知道还有其他方法可以解决这个问题。

相关内容