\special 中的宏

\special 中的宏

我尝试在 LaTeX 中计算边界框,并通过 DVI 特效将值传递给 dvisvgm。生成的代码(我从互联网上复制粘贴过来)如下所示:

\newlength{\mywidth}
\newlength{\myheight}
% ...
\special{dvisvgm:bbox a 0 0 \the\mywidth \the\myheight}

这导致(事后可以预见)DVI文件中出现以下输出:

dvisvgm:bbox a 0 0 147.00748pt26.3999pt

经过大量的谷歌搜索后,我想出了以下解决方法:

\newtoks\spacetoken
\spacetoken={ }
\special{dvisvgm:bbox a 0 0 \the\mywidth\the\spacetoken\the\myheight}

然而,在我看来,这看起来非常不对劲。因此,我的问题是:

  1. 怎么\special運作?
  2. 有没有更好的方法可以做到这一点?

答案1

\special就像\write:它扩展其参数直到找到不可扩展的标记,然后将结果写入 DVI 文件。

由于\the\mywidth \the\myheight没有空格(由于它遵循控制序列,因此在标记化过程中会忽略明显的空格),结果就是您发现的。

不过,还有一个更简单的解决方案:

\the\mywidth\space\the\myheight

因为的扩展\space恰好是一个空间标记。

正如 Joseph Wright 在评论中所说,TeX 对 的参数中包含的内容不承担任何责任\special:只要它是“完全可扩展的”并且相对于大括号是平衡的,它可以是任何东西,并且打印机/预览器驱动程序的工作就是对其进行解释。

相关内容