(看看这样的包裹l3string,字符串和字符串诱惑我发表以下内容:)
在我看来,“字符串”和“字符”的概念在 (La)TeX 中定义不明确。
因为:
- LaTeX 有不同的处理阶段,术语“字符串”和“字符”指的是哪个处理阶段并不总是很清楚。
问题如下:- 如果它们引用 .tex 输入文件的字符,则通常会以逐字模式对内容进行标记。
- 在宏扩展阶段,这些概念可能引用明确的字符标记(序列),其中每个字符标记都可以作为无分隔符的宏参数进行处理。
- 连字符应该针对多个字符,还是针对字符串中的单个字符?
\hbox{A}
那么在水平模式下处理时会在输出文件中产生单个字符的情况怎么样?
- 在处理/扩展宏的阶段,LaTeX 以标记(字符标记和控制序列标记)的形式工作,并且检测哪些标记序列构成字符并非易事。
问题包括:- 8 位引擎上的多字节编码产生一个由多个引擎原生字符标记表示的多字节字符;
- 不同的符号/标记星座可能会产生重音字母/变音符号等;
\char
-符号;- 定义宏时需要将第 6 类哈希值加倍,宏的扩展将产生一个包含哈希值的字符串;
- 存在的标记不一定产生可见的输出,例如,作用域组的 1/2 类括号;
- 存在的标记表示在 pdf 文件中视觉输出级别上根本不涉及“字符串”和“字符”概念的材料,例如绘制规则、插入字距/粘合、包括图形、执行分配、本地范围的指令......
- 通过创建重复字符序列的“字符串”
\leaders
; - ...
- 通常,“字符”和“字符串”概念也与“字素”和“字形星座”等概念相关。
例如:在什么条件下,可以作为变音符号组成部分的东西(例如变音符号的音素、重音符号)可以被视为单独的“字符”? - 所讨论的“字符串”的用途也很重要。
例如:- 在 内使用
\csname..\endcsname
。 - 使用 TeX 维护某种数据库时的数据名称/标识符(通过包进行数据库维护)数据工具;编写外部 .csv 文件;LaTeX 的 .aux 文件可以被视为某种数据库(
\@writefile
其中的条目构成数据库,\newlabel
其中的条目构成数据库)。 - 需要排版的东西。
- pdf 编码的字符串。
- 超链接的目标/锚点/目的地的名称。
- pdf-书签。
- ...
- 在 内使用
每当我尝试将“字符串”和“字符”的概念转移到 TeX/LaTeX 中时,例如,实现一个检测字符串长度或从“字符串”中提取一些“字符”或检查某些字符串是否被视为“相等”的例程,我都觉得我必须做出一些削减,甚至可能不会考虑所有值得考虑的事情。
是否有任何论文对“将概念‘字符串’和‘字符’转移到 TeX/LaTeX”这一主题以及所涉及的问题提供良好的(理论)概述并提出如何处理这些问题?