在 Latex 中写入真正的 UTF32?

在 Latex 中写入真正的 UTF32?

是否可以编写独立于输入语言(拉丁语、阿拉伯语、日语、印地语)的 Latex 文档?

我当时\usepackage[utf8]{inputenc}确实想这样做,但例如日语与拉丁字符混合时不会显示。我当前的解决方案是导入必要的语言包,例如\usepackage{xeCJK}日语和\usepackage{CJK}中文。但是,有没有办法定义 UTF32 而不必担心所有特定于语言的包,例如xeCJKCJK

答案1

XeTeX 确实内置了对 UTF-32 的支持(并且可以用 Lua 为 luatex 编写代码)

例如

在此处输入图片描述

产自

\XeTeXinputencoding UTF-32
XXX\XXXdXXXoXXXcXXXuXXXmXXXeXXXnXXXtXXXcXXXlXXXaXXXsXXXsXXX{XXXaXXXrXXXtXXXiXXXcXXXlXXXeXXX}XXX\XXXbXXXeXXXgXXXiXXXnXXX{XXXdXXXoXXXcXXXuXXXmXXXeXXXnXXXtXXX}XXXhXXXeXXXlXXXlXXXoXXX XXXwXXXoXXXrXXXlXXXdXXX\XXXeXXXnXXXdXXX{XXXdXXXoXXXcXXXuXXXmXXXeXXXnXXXtXXX}

其中每个都X被 0 字节替换,ascii 空值(控制- @)(我必须对 X 进行替换才能发布到这个网站,因为发布空字节很棘手)

很少有编辑器支持这种格式。即使是 emacs 默认也只支持 utf-8 和 utf-16,而不支持 utf-32。

在 UTF-32 中,每个字符占用四个字节,因此每个 ascii 字符前面都有三个零字节,这意味着(与 UTF-8 相反)在 UTF-8 和传统编码之间切换很棘手,因为字符串\XeTeXinputencoding在 UTF-32 中的表示字节序列与在 UTF-8 或 ASCII 中的表示字节序列不同。

但是 UTF-8、UTF-16 和 UTF-32 是同一底层 Unicode 字符集的文件编码,因此无论您使用哪种编码,都可以表示相同的字符。该字符是否排版不取决于源文件编码,而是取决于所使用的字体。但是,如果您为中文指定代码点,如果当前字体是拉丁现代字体,您将收到缺少字形警告,因为拉丁现代字体没有这些字符。

可以使用 fontspec 来指定用于不同范围的 Unicode 的不同字体,但通常在 LaTeX 中,您需要的不仅仅是字体切换,连字和间距(以及其他内容)是特定于语言的,最好由文档中的明确命令控制(然后也可以选择合适的字体),因此,当发现缺少的字形时切换字体的机制可能总是会产生较差的输出,尽管乍一看它似乎比当前根本没有输出的行为有所改进。

相关内容