我是使用 LaTeX 的完全新手,刚开始使用 overleaf 在线工具,注意到源代码中运行的第一行之一是\usepackage[utf8]{inputenc}
。
我知道这是为了运行 Unicode,但我不明白这是什么意思,从 Google 搜索中我发现它的意思是“计算机处理中文本的通用字符表示标准”和“它提供了一种编码多语言纯文本的一致方法,使国际间文本文件交换更加容易”。但是,我真的不明白这一点。有没有办法把它分解成更简单的解释,这样我每次看到它都知道这个代码是什么?
另外,我已经看到 Unicode 和 ASCII 是字符编码标准,有人可以向我解释一下什么是编码标准吗?
答案1
据我所知,Overleaf 使用 UTF-8 来编码文件,因此下面这一行
\usepackage[utf8]{inputenc}
可以省略,因为 UTF-8 输入几年来一直是 LaTeX 的默认输入。
计算机中的文件只是一个字节序列,即8位数字,即从0到255。
当您使用文本编辑器打开文件时,机器会根据文本编辑器向操作系统公布的编码将这些数字解释为字符。
有许多这样的编码,它们都扩展了传统的 ASCII 7 位编码,但方式不兼容。
上世纪 80 年代末,人们意识到这种过多的编码并不是解决存储和交换文本文件问题的最佳方式,因此设计了一种 21 位编码,并命名为 Unicode。另一方面,将文本文件存储为 21 位数字序列非常不方便,因为它会使大多数文件的大小增加 3 倍。想想文件系统中成千上万个配置文件,当您启动机器或应用程序时,这些配置文件是必需的。
许多文字的字符集已经超出了 8 位编码的 256 个限制,例如,日语已经为其非常大的字符集设计了多字节编码:第一次尝试使用两个字节来编码一个字符,因此可用的位置是 65536 个。但这太小了!您无法同时编码两种表意文字,而且,全世界使用的文字太多了。
但是,正如我所说,使用 21 位来编码一个字符并不方便,因此引入了一种不同的方式来表示 Unicode,称为 UTF-8。
Unicode 字符由 1、2、3 或 4 个字节表示。1 字节字符是传统 ASCII 编码的字符。当机器找到 128 到 255 之间的字节时,它会将其解释为前缀,该前缀首先告诉需要读取多少个字节才能获得 Unicode 字符;根据一些不太复杂的规则,两个、三个或四个字节合起来对应一个 Unicode 字符。
请注意,并非所有从 128 到 255 的字节都是合法的前缀,但这与讨论无关。
TeX(原始和pdftex
)不知道编码。它只知道 ASCII。但它可以被编程来解释更高范围的字节(128-255),以适应各种传统编码包括UTF-8。
直到几年前,你还必须向 LaTeX 宣布文件应该以哪种编码保存。后来,团队决定将 UTF-8 设为默认编码。因此,现在inputenc
只有当要处理的文件是不是UTF-8。