![源文件的允许文件名](https://linux22.com/image/251010/%E6%BA%90%E6%96%87%E4%BB%B6%E7%9A%84%E5%85%81%E8%AE%B8%E6%96%87%E4%BB%B6%E5%90%8D.png)
包含(\include
)的文件名中可能出现哪些字符?
连字符和下划线可以吗?包含的内容是否依赖于底层文件系统或 LaTeX 源的编码?是否只允许使用 ASCII 字符?
答案1
文件名语法是 TeX 中少数几个明确依赖于系统的部分之一。基于 web2c 的 TeX 系统允许使用文件系统允许的大多数字符。(例如,如果用"
引号括住整个路径,则允许使用空格)。
请注意,例如 LaTeX不是假设扩展名(基本名称)由附加扩展名组成.
。某些系统不允许这样的名称,通常称为的文件article.cls
可能位于article
目录中cls
或[cls]article
任何其他各种语法可能性中。该文件textsys.cfg
在格式化时被读取,默认情况下会自动确定以下内容:
This file contains the site specific definitions of the four macros\\
|\@currdir|, |\input@path|, |\filename@parse| and |\@TeXversion|.
但可以在本地定义为任何适合系统的内容。
请注意,特殊字符可能需要特殊处理才能传递给文件名读取器。例如,~
允许使用字符,但 LaTeX 通常会为其提供扩展后的定义,而\nobreakspace{}
这不是文件名的预期解释。\string~
但可以。请参阅这个问题有关如何处理文件名中的空格的说明。类似的问题与非 ascii 字符有关。如果使用经典 TeX(而不是 xetex/luatex),8 位字符将获得专为排版而不是用作文件名字符串。此外,文件系统可能使用 utf8 或使用本地代码页,而 LaTeX 可能不知道到底是哪种(web2c 系统的底层文件 IO 大概知道,但 TeX 宏无法访问),因此您可能必须再次使用输入“逐字”使用\string
或某种等效引用方法,以便将字节直接传递给底层文件名读取器。这一切都取决于……