pdfLaTeX 以最少的前导码支持哪些 Unicode 字符?

pdfLaTeX 以最少的前导码支持哪些 Unicode 字符?

考虑一个具有支持 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 映射可能已经存在(并且将自动输入序言中声明的任何字体编码)或可以轻松添加。

相关内容