使用特殊字符为 pdflatex 指定 -job-name 选项

使用特殊字符为 pdflatex 指定 -job-name 选项

我正在编写一个 Python 脚本,它将根据工作列表编译一系列 Latex 文档。基本上,该脚本会读取文档的文件名和标题,添加一些应始终包含的内容并向pdflatex命令行发送调用。该命令具有以下形式:

>pdflatex -job-name="The title" "\somestuff\input{thefile}"

(我也使用了一些输出目录选项,但为了简洁起见,这里省略了它们......)

现在,列表中有几个文档需要在标题中包含特殊字符。发生这种情况时,文件名会被破坏。如果我使用 python 循环遍历文件名,则以 utf8 读取它们会显示与我的 Windows 资源管理器窗口中相同的内容,但以 latin1 读取它们会显示正确的名称。

目前ÅÄÖåäö是唯一有问题的字符,但我希望支持整个 utf8 字符集。有什么方法可以让 pdflatex 正确编码这些文件名吗?

当我完成整个系统后,我会将其移动到具有另一个操作系统的服务器系统,因此我可能需要使用其他编码对这些东西进行编码。因此,通用编码的解决方案会获得加分 =)

答案1

您想要的目前无法实现。Microsoft 的 C 标准库实现(pdfTeX 最终使用该库)从不对标准 C 函数使用 UTF-8。按照 Aditya 的建议,在调用 TeX 时仅对所有文件名使用 ASCII 字符。

读取 Python 中的文件名之所以有效,是因为 Python 运行时绕过了 Windows 上的 C 标准库。在 Windows 上使用 Unicode 文件名始终需要兼容层(例如 Cygwin)或 Windows 特定代码,我不知道任何引擎是否实现了这些(但这可能是 LuaTeX 的一个宝贵建议)。

答案2

有四种软件的字符编码可能与此相关:

  1. 您似乎已经掌握了 Windows 资源管理器;
  2. Python 应该假设其输入是 UTF8。但无论如何,如果它所做的只是在读取字符串时输出字符串,那么它的字符编码就无关紧要了;
  3. Pdftex。正如 mpg 所说,这也应该将字符串不加解释地传递给文件系统,但您可以检查是否使用 Luatex(它确实假设在任何地方都是 UTF8;使用--jobname=whatever),并查看是否有任何变化;
  4. 最有可能的怀疑就是您用来输入命令的终端所使用的编码pdflatex:您能看出这是否是 Latin-1 吗?

相关内容