我正在编写一个渲染程序,作为其中的一部分,它将允许用户渲染 TeX 字符串。我计划将 tex 字符串转换为 dvi,然后自己渲染 dvi。我希望用户能够将字符串写成各种小的“部分”,这些部分可以在程序中操作,所以我正在寻找一种在 dvi 文件中指定这些部分的方法。看来这个\special
命令正是我要找的:我可以\special
在每个部分之前添加一个命令,为每个部分提供一个标签,然后我可以在 dvi 文件中查找这些标签。例如,写入\special{section1}Hello, \special{section2}world!
表示字符串“Hello,”是第 1 部分,字符串“world!”是第 2 部分。这是 dvi 文件中事物的顺序:
- “section1”特殊命令
- 字符串“Hello,”
- “section2”特殊命令
- 字符串“world!”。
通过此顺序,您可以确定哪些字母位于哪个部分。
但是,下标和上标会让事情变得混乱。如果我写\special{section1} e_1 ^{\special{section2} 2}
,则 dvi 文件中的内容顺序如下:
- “section1”特殊命令
- 字母“e”
- “section2”特殊命令(!)
- 字母“2”
- 字母“1”
我希望字母“e”和“1”位于同一部分,而字母“2”位于不同的部分,但事实是“2”和“1”位于同一部分。
我的基本问题是,是否有任何方法可以实现我最初的目标,即能够像这样将字符串拆分成任意部分。我想要的最终结果是用户能够说出诸如“取‘[任意字符串 1][任意字符串 2]’并以不同方式处理‘[任意字符串 1]’和‘[任意字符串 2]’”之类的话。该\special
机制听起来就像我想要这样做的方式,所以我最初认为我的问题是关于它的,但我意识到这可能是一个 XY 问题,所以如果其他方法有效,我也可以使用它。
此外,我明白,在表格等更奇特的情况下,这种小部分的概念甚至毫无意义,但将表格等复杂的东西渲染为 tex 字符串并不是我的程序的预期用途,我可以肯定地说,这种事情就是不受支持。在每种使用此功能的情况下,用户都可以清楚地知道应该为哪些颜色着色。
需要注意的一点是,我确实考虑过滥用这个xcolor
包,为每个部分设置不同的颜色,然后在实际渲染时忽略颜色,但它有同样的问题。写入\color{red} e_1 ^{\color{blue} 2}
会产生蓝色 1。