无法使 unicode 在 \title 中工作(inputenc:Unicode 字符未设置为用于 LaTeX)

无法使 unicode 在 \title 中工作(inputenc:Unicode 字符未设置为用于 LaTeX)

我想在标题中使用底部括号 ⎵:

\documentclass[11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{titling}

\usepackage[lf]{venturis}
\usepackage[T1]{fontenc}

\title{Foo⎵Bar}  % this has the offensive character
\author{Myself}
\date{}

\begin{document}
\maketitle
\end{document}

我所得到的是

! 程序包 inputenc 错误: Unicode 字符 ⎵ (U+23B5)

(inputenc) 未设置为与 LaTeX 一起使用。

答案1

简短回答:您可以使用\DeclareUnicodeCharacter{23B5}{\textvisiblespace}。或者您可以使用(U+2423 打开盒子),已经定义为\textvisiblespace,而不是使用U+23B5 底部方括号)。


长答案:当您输入文件并使用 UTF-8 编码(这可能是编辑器中的默认编码)保存时,此字符U+23B5 底部方括号存储为字节序列E2 8E B5。然后当 TeX 读取文件时,由于\usepackage[utf8]{inputenc}前导码中有,它知道当看到这些字节时,应该将其理解为字符U+23B5。这很好,但 TeX 需要知道如何处理该字符。

事实上,你可以为任何字符提供任何指令。对于你来说,这就像简单地选择一个符号并排版一样简单。你可以查找综合 LaTeX 符号列表(可能在您的计算机上可用texdoc symbols-a4)并看到符号可用(实际上在“常用符号”下)为\textvisiblespace。因此您可以使用它:

\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage[lf]{venturis}
\usepackage[T1]{fontenc}
\DeclareUnicodeCharacter{23B5}{\textvisiblespace}

\title{Foo⎵Bar}  % this is fine now
\author{Myself}
\date{}

\begin{document}
\maketitle
\end{document}

生产

来自 pdflatex 的截图

\DeclareUnicodeCharacter{23B5}{\textvisiblespace}你也可以\newunicodechar{⎵}{{\textvisiblespace}}使用新unicode字符包裹。)

事实上,一些常见的定义附带着典型的 TeX 分布:具体来说,在我的计算机上/usr/local/texlive/2017/texmf-dist/tex/latex/base/utf8.def包含 ©、®、º、ˆ、˜、ZWNJ、…、™、␣ 的定义:

\DeclareUnicodeCharacter{00A9}{\textcopyright}
\DeclareUnicodeCharacter{00AA}{\textordfeminine}
\DeclareUnicodeCharacter{00AE}{\textregistered}
\DeclareUnicodeCharacter{00BA}{\textordmasculine}
\DeclareUnicodeCharacter{02C6}{\textasciicircum}
\DeclareUnicodeCharacter{02DC}{\textasciitilde}
\DeclareUnicodeCharacter{200C}{\textcompwordmark}
\DeclareUnicodeCharacter{2026}{\textellipsis}
\DeclareUnicodeCharacter{2122}{\texttrademark}
\DeclareUnicodeCharacter{2423}{\textvisiblespace}

但定义\textvisiblespace不是其中之一。


替代方案:如果您使用支持 Unicode 的 TeX 引擎(如 XeTeX 或 LuaTeX)(使用xelatexlualatex而不是编译文件pdflatex),那么您可以简单地使用包含它的系统字体中的 ⎵ 字符。例如:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{FreeSerif} % Sets this font for the entire document
\begin{document}
Foo⎵Bar
\end{document}

或者

\documentclass{article}
\usepackage{fontspec}
\newfontfamily{\symbolfont}{Noto Sans Symbols}
\usepackage{newunicodechar}
\newunicodechar{⎵}{{\symbolfont⎵}} % Use this font for this specific character
\begin{document}
Foo⎵Bar
\end{document}

请注意,TeX 在此处存在相当严重的(在我看来)可用性/设计缺陷:如果字体中缺少字符,则不会导致错误,而只是在文件中显示缺少字符的警告.log可以使用 \tracinglostchars=2在终端中显示消息,但您仍然需要留意它。

相关内容