*TeX 世界之外

*TeX 世界之外

关于重复索赔的话题 - 我测试过告诉 Latex 忽略所有 unicode 错误?- “解决方案”导致 LaTeX 显示“?”而不是“⌀”。

感谢那些提供高质量且非常有用的答案的人。


我在文本中添加了 ⌀,现在 pdflatex 崩溃了

包 inputenc 错误:Unicode 字符 \u8:⌀ 未设置为用于 LaTeX。

我知道我可以使用 \DeclareUnicodeCharacter 或类似方法引入此字符的特殊处理,但每次输入中出现新的 UTF-8 字符时都这样做是不可接受的。

它需要在 pdflatex(或其他 pdf 生成 latex 编译器)中工作,因为我仅使用 latex 作为 pdf 生成器(LaTeX 由输入生成,pdflatex 生成 pdf 输出)。

梅威瑟:

\begin{document}
\end{document}

MWE 提供我的文件声明

\documentclass{article}
\usepackage[a4paper, total={6.5in, 10.5in}]{geometry}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{cprotect}
\usepackage{fvextra}
\usepackage{textcomp}

% make TOC work correctly
\makeatletter
\def\l@section{\@dottedtocline{1}{1em}{2em}}
\makeatother
\usepackage{index}
\makeindex

\DeclareUnicodeCharacter{00A0}{~}

\DefineVerbatimEnvironment{escape}
  {Verbatim}
  {fontfamily=\rmdefault,breaklines,breaksymbolleft={}}
\CustomVerbatimCommand\escapeinline{Verb}{fontfamily=\rmdefault,breaklines,breaksymbolleft={}}

\begin{document}
\end{document}

答案1

你可以这样想:为了让 LaTeX(或任何系统)在页面/屏幕上绘制“⌀”(或任何字符),该字符的“形状”(视觉外观)必须可用某处

*TeX 世界之外

在大多数“现代”应用程序、文本编辑器、浏览器等中,这是通过字体回退机制:

  1. 应用程序(例如您的浏览器)首先尝试在当前字体中查找该字符的字形。(当我在 tex.stackexchange.com 网站上键入这些字母时,它们会以“Lucida Grande”字体显示,这是该网站的 CSS 指定的。)
  2. 如果当前字体不支持该字符,应用程序将尝试查找一些系统上安装的包含该字符字形的字体,然后从该字体中选取字形。(在这种情况下,使用安装在我电脑上的字体,我的浏览器显示“Cambria”字体中的“⌀”字符,因为“Lucida Grande”字体中没有该字符。) 在此处输入图片描述

  3. 如果没有这样的字体,那么您可能会看到一个方框、一个问号、一个空格或一些缺少字符的描述(可能是来自“最后的手段”后备字体)。例如,在以下显示数字 0 到 9 的文本中,对于奇数,我首先使用数字“婆罗米文”Unicode 区块(我已经安装了字体),然后从“Masaram Gondi” Unicode 区块(在 2017 年 6 月几天前发布的 Unicode 10.0.0 版本中添加到该版本),我(可能还有你)没有安装该字体:

    0

答案2

您会收到一条错误消息,告知您没有 的默认定义,因为任何标准字体中都不存在该定义。

综合清单告诉我们\diameter

  • mathabx
  • MnSymbol
  • wasysym

并且只是为了提供一些符号而添加其中一个包是很具争议的。

您会收到一条错误消息,告诉您准确的详细信息;例如,做出选择wasysym并将代码更改为

\documentclass{article}
\usepackage[a4paper, total={6.5in, 10.5in}]{geometry}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{cprotect}
\usepackage{fvextra}
\usepackage{textcomp}

\usepackage{wasysym} % for \diameter

% make TOC work correctly
\makeatletter
\def\l@section{\@dottedtocline{1}{1em}{2em}}
\makeatother
\usepackage{index}
\makeindex

%\DeclareUnicodeCharacter{00A0}{~} % not needed in recent versions of LaTeX
\DeclareUnicodeCharacter{2300}{\diameter}

\DefineVerbatimEnvironment{escape}
  {Verbatim}
  {fontfamily=\rmdefault,breaklines,breaksymbolleft={}}
\CustomVerbatimCommand\escapeinline{Verb}{fontfamily=\rmdefault,breaklines,breaksymbolleft={}}

\begin{document}
\end{document}

你不需要inputenc使用 LuaTeX,但是你需要支持字形的字体。

请注意,当当前字体中没有字形时,其他软件可能会自动进行字体替换。LuaLaTeX 和 XeLaTeX 则不会这样做,因为它们旨在实现良好的排版,而自动替换可能会产生冲突。与以前的想法相同:内核无法为每个 Unicode 字符提供定义,因为这需要从替代字体中进行选择。


不过,用户可能输入了 U+2300 来获取符号\varnothing,如果文档是关于数学而不是技术主题的话,这种情况很有可能发生。在这种情况下,要加载的包是amssymb

\usepackage{amssymb}

\DeclareUnicodeCharacter{2300}{\varnothing}

相关内容