![在 Latex 中写入真正的 UTF32?](https://linux22.com/image/373300/%E5%9C%A8%20Latex%20%E4%B8%AD%E5%86%99%E5%85%A5%E7%9C%9F%E6%AD%A3%E7%9A%84%20UTF32%EF%BC%9F.png)
是否可以编写独立于输入语言(拉丁语、阿拉伯语、日语、印地语)的 Latex 文档?
我当时\usepackage[utf8]{inputenc}
确实想这样做,但例如日语与拉丁字符混合时不会显示。我当前的解决方案是导入必要的语言包,例如\usepackage{xeCJK}
日语和\usepackage{CJK}
中文。但是,有没有办法定义 UTF32 而不必担心所有特定于语言的包,例如xeCJK
和CJK
?
答案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 中,您需要的不仅仅是字体切换,连字和间距(以及其他内容)是特定于语言的,最好由文档中的明确命令控制(然后也可以选择合适的字体),因此,当发现缺少的字形时切换字体的机制可能总是会产生较差的输出,尽管乍一看它似乎比当前根本没有输出的行为有所改进。