主文档和输入文件(以及.tex
图像等)的文件名中可以使用哪些字符?我不是问建议使用哪些字符,而是问用户可能在文件名中使用的所有字符的列表。了解这一点很重要,以便支持文件名相关软件包中的字符(例如currfile
,,svn-multi
...)。
我可以在这里看到两个用例:
- 在命令行上,例如使用
pdflatex <filename>
。
这可能需要单引号和/或\
转义命令行 shell 中的特殊字符,但对于 TeX 来说可能再次需要。 - 在 (La)TeX 内部,例如
\input{<filename>}
。
例如:在 Linux 下使用 TeXLive 2011 的 LaTeX 中,在 (主文档) 文件名中使用%
似乎是不可能的。Apdflatex 'test%it.tex'
会产生提示,输入后\relax
会得到:! I can't find file `test'.
。因此,%
在这种情况下, 也用作注释字符。
命令行上的文件名似乎还有更多问题,因为我收到以下警告:
# pdflatex 'test$it*gdg!£$^&%_*(){.tex'
warning: test$it*gdg!£$^&%_*(){.tex: Unrecognized variable construct `$^'.
答案1
文件名语法是 TeX-the-program 中少数几个明确依赖于系统的部分之一。
在 texlive(即 web2c tex)中,大多数字符都是允许的(特别是在语法更改为允许"
引用名称(包括空格)之后)。当然,这些字符在被视为可能的文件名字符之前会由 TeX 的宏扩展进行解释,因此%
和朋友需要特殊处理。
这是test%it.tex
在我的 texlive 2010 上输入的(在 Windows 中使用 cygwin bash shell,但我想其他命令行也会类似)
pdflatex "\begingroup\lccode44=37 \lowercase{\endgroup\input test,it}"
您提到的警告$
来自 kpathsea,如其手册中所述
3.3.2 变量扩展 路径元素中的 '$foo' 或 '${foo}' 将被替换为 (1) 环境变量 'foo' 的值(如果已定义);(2) 'texmf.cnf' 中 'foo' 的值(如果已定义);(3) 空字符串。 如果 '$' 后的字符是字母数字或 '_',则变量名由所有连续的此类字符组成。 如果 '$' 后的字符是 '{',则变量名由直到下一个 '}' 的所有内容组成(变量名周围不能嵌套括号)。 否则,Kpathsea 会给出警告并忽略 '$' 及其后跟字符。
您可以使用 tests sch 测试 kpathsea 的处理能力
$ FOO=ZENV tex kps
This is TeX, Version 3.1415926 (Web2C 2010)
(./kps.tex (./a b c.tex
a b c found
) (./ZENV.tex
ZENV found
) )
No pages of output.
Transcript written on kps.log.
这表明你可以从 tex 中引用环境变量,kps.tex 是
\input "a b c.tex"
\catcode`\$=12
\input "$FOO.tex"
\bye
a b c.tex
是
\immediate\write20{a b c found}
并且 ZENV.tex 是
\immediate\write20{ZENV found}
答案2
如果您尝试前 128/256 个字符以外的字符,情况就会变得有趣;例如,TL2011 中的 XeTeX 无法处理 Windows 7 上输入文件名中的 unicode 字符(如“äöüß”)。但这高度依赖于系统。
最好只使用字母数字 ASCII(即 [a-zA-Z0-9])作为文件名,因为这些将总是工作。