关于重复索赔的话题 - 我测试过告诉 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 世界之外
在大多数“现代”应用程序、文本编辑器、浏览器等中,这是通过字体回退机制:
- 应用程序(例如您的浏览器)首先尝试在当前字体中查找该字符的字形。(当我在 tex.stackexchange.com 网站上键入这些字母时,它们会以“Lucida Grande”字体显示,这是该网站的 CSS 指定的。)
如果当前字体不支持该字符,应用程序将尝试查找一些系统上安装的包含该字符字形的字体,然后从该字体中选取字形。(在这种情况下,使用安装在我电脑上的字体,我的浏览器显示“Cambria”字体中的“⌀”字符,因为“Lucida Grande”字体中没有该字符。)
如果没有这样的字体,那么您可能会看到一个方框、一个问号、一个空格或一些缺少字符的描述(可能是来自“最后的手段”后备字体)。例如,在以下显示数字 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}