告诉 Latex 忽略所有 unicode 错误?

告诉 Latex 忽略所有 unicode 错误?

我有一个 Web 界面,可以生成发送给客户的 LaTeX 信件。这些信件是动态呈现的。有些客户的名字中有一些特殊字符,LaTeX 无法翻译,所以我经常遇到 unicode 错误。

*.tex-Template 包含\usepackage[utf8]{inputenc},但是我一直遇到 unicode 字符的问题。

以下是今天的两个错误消息:

Unicode char \\u8:\xc2\xb0 not set up for use with LaTeX.

Unicode char \\u8:\xe5\x8d\x97 not set up for use with LaTeX.

目前,我使用 Python 字典将一些已经识别为有问题的字符转换为正确的 LaTeX 代码。但这项工作永无止境。

有没有办法告诉 LaTeX 忽略全部与 unicode 相关的编译错误,例如告诉 LaTeX 将所有有问题的字符转换为一个?-char?

答案1

您显示的错误消息形式表明使用的是较旧的乳胶版本,但对于所有版本,错误都来自此版本或具有相同名称的较旧版本。

\def\UTFviii@defined#1{%
  \ifx#1\relax
      \PackageError{inputenc}{Unicode\space char\space\expandafter
                              \UTFviii@splitcsname\string#1\relax
                              \MessageBreak
                              not\space set\space up\space
                              for\space use\space with\space LaTeX}\@eha
  \else\expandafter
    #1%
  \fi
}

所以

\makeatletter
\def\UTFviii@defined#1{%
  \ifx#1\relax
      ?%
  \else\expandafter
    #1%
  \fi
}

\makeatother

加载 inputenc 后应该会消除错误。

答案2

你有一个XY问题。您实际上希望在后端使用现代 TeX 引擎,可能是 LuaTeX,它本身就理解 Unicode。传统的 8 位 TeX 不适合这项工作,并且永远无法满足您的要求。

没有一种字体可以支持所有的 Unicode,但您可以babel在 LuaTeX 或ucharclassesXeTeX 中检测大多数脚本并自动切换到合适的字体。如果没有语言标记,有时无法区分中文和日语,或俄语和保加利亚语,但大多数语言只要有合适的模板,就可以立即使用。

如果不这样做,您遇到的绝大多数 Unicode 错误将来自用户输入组合重音符,而 PDFTeX 无法理解这些重音符。您可以(合理地)做的最好的事情(如果您还没有这样做)是在将输入传递给 TeX 之前将其转换为 NFC 格式,同时对其进行清理。这会将尽可能多的组合重音符转换为预组合字符。您还可以删除后端不支持的任何 Unicode 字符,但许多字体会为您提供所需的后备字符。

如果您确实想添加对个别缺失 Unicode 字符的支持,最好的方法是使用newunicodechar。这将允许您定义例如零宽度空格为{\hskip0}和零宽度非连接符为{}。理论上,您可以将所有不受支持的 Unicode 代码点转换为?这种方式,但您最好在前端执行此操作并向用户提供更好的错误消息。

相关内容