考虑一个具有支持 UTF-8 字符所需的最小配置的 LaTeX 文档 — — 据我所知,这样的文档看起来像这样:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\begin{document}
Text goes here.
\end{document}
在这样的文档中,pdfLaTeX 能识别和支持哪些 Unicode 字符?是否仅支持属于 T1 编码的字符(显然看起来像这)?是当前字体的功能吗?是内置的特别指定随着新的 LaTeX/pdfTeX/pdfLaTeX 版本的发布,列表将会扩大吗?
这个答案告诉我字符是在t1enc.dfu
(和/或utf8enc.dfu
?)中定义的,但我对更多感兴趣内涵的,而非外延的, 回答。
答案1
当前的 LaTeX 格式将输入 omsenc.dfu、ot1enc.dfu、t1enc.dfu 和 ts1enc.dfu(与您链接的答案相比,这是当前乳胶中的新内容)。
您可以在 中找到所有四个文件tex/latex/base
并检查它们支持哪种 unicode 输入。顾名思义,它们的支持范围与输出编码有关,但不存在严格的 1-1 关系。t1enc.def
例如还包含\DeclareUnicodeCharacter{00A0}{\nobreakspace}
。
当前的 latex 不需要加载 inputenc。utf8 无论如何都是默认的。因此您也可以通过此文档获得此支持:
\documentclass{article}
\usepackage[T1]{fontenc}
\begin{document}
Text goes here.
\end{document}
答案2
您的问题定义不明确,因为“最小前言”可以解释为“支持所需的 Unicode 字符所需的最小值”,这有点循环。
如果我添加西里尔文文本,发布的示例序言将产生以下内容
! Package inputenc Error: Unicode character П (U+041F)
(inputenc) not set up for use with LaTeX.
由于西里尔字母代码点未默认设置,但与输入编码无关,因此它们无论如何都不会排版,因为指定了 T1 字体编码,该编码仅涵盖拉丁字母。
您不需要inputenc
在当前的乳胶中使用 UTF-8,因为默认的是 UTF-8,如果您指定了包含西里尔字母的字体编码(如 X2),则会加载合适的 Unicode 映射,
x2enc.dfu
该映射位于基础乳胶分布中。
因此运行没有错误:
\documentclass{article}
\usepackage[T1,X2]{fontenc}
\begin{document}
{\fontencoding{T1}\selectfont Text goes here}. Привет
\end{document}
该文件/usr/local/texlive/2020/texmf-dist/tex/latex/base/utf8enc.dfu
(用于在本地系统上查找文件)列出了基础发行版中kpsewhich utf8enc.dfu
编码文件中声明的所有字符,但贡献的软件包可能会添加更多。dfu
grep '[.]dfu' `kpsewhich --all ls-R`
将列出所有可用的,以及我所看到的核心拉丁希腊语和西里尔语编码armglyphs.dfu
pmboxdrawenc.dfu
otf-hangul.dfu
。
基本上,限制不在于对 UTF-8 的解释。Pdflatex 的 inputenc 代码可以理解完整的 UTF-8 编码,因此您可以指定任何 Unicode 编号。但是 pdflatex 中的字体只能有 256 个字符,因此大多数 Unicode 字符无法定义,除非您指定字体来覆盖所需的字符集。
如果您拥有覆盖 Unicode 范围的字体;则匹配的 inputenc 映射可能已经存在(并且将自动输入序言中声明的任何字体编码)或可以轻松添加。