Unicode 对破折号的支持

Unicode 对破折号的支持

em dash我正在使用 XeLaTeX。我的目标是在我的 PDF 文件中显示 Unicode 。\dash无法编译,如下所示:它说

! Undefined control sequence. 

以下是最小(非)工作示例:

\documentclass{article}

\usepackage[utf8]{inputenc}

\DeclareUnicodeCharacter{2014}{\dash}

\begin{document}

hello
\dash
there!

\end{document}

答案1

这些是等效的

\documentclass{article}
% XeLaTeX
\usepackage{fontspec}
%\usepackage{libertine}
%\DeclareUnicodeCharacter{2014}{\dash}%
\DeclareRobustCommand\dash{—}
\newcommand\xdash{---}

\begin{document}

Em-dash: —

Em-dash: ---

Em-dash: \xdash

Em-dash: \dash

Em-dash: \char"2014

\end{document}

答案2

运行 XeLaTeX 并希望它能打印任何 Unicode 字符,但结果并不成功,正如您所经历的那样。让我来解释一下出了什么问题。

示例文档

\documentclass{article}
\begin{document}
Hello world!
\end{document}

将产生与 PDFLaTeX 或 XeLaTeX 完全相同的输出,因为只出现 ASCII 字符。如果我们(在最新的发行版上)尝试

\documentclass{article}
\usepackage[utf8]{inputenc}
\begin{document}
Hello—world!
\end{document}

其中单词之间的字符是 U+2014 EM DASH,文件保存为 UTF-8。如果我们用 PDFLaTeX 处理它,我们会得到预期的

在此处输入图片描述

但使用 XeLaTeX 编译我们得到

在此处输入图片描述

日志文件中有几个警告

Package inputenc Warning: inputenc package ignored with utf8 based engines.

Missing character: There is no — in font cmr10!

这是为什么呢?使用 PDFLaTeX,输入是逐字节扫描的,UTF-8 则在稍后阶段输入。选项utf8告诉inputencLaTeX,当<E2><80><94>按顺序找到字节时,应将它们转换为控制序列,进而告诉 TeX 在当前字体的位置(十进制 124)\textemdash打印字符。"7C

使用 XeLaTeX 时,inputenc正如警告消息中所述,加载会被忽略,因为 XeTeX 直接解释 UTF-8,因此该包的任何技巧都不起作用。第二个警告证明了这一点:在找到 U+2014 后,XeTeX 只是将其作为要打印的字符发送,但由于当前字体只有 127 个字符,因此在十进制位置 8212 处没有字符。

当然,补救措施是加载fontspec更改设置:默认字体将不是传统的 Computer Modern,而是 OpenType 版本的 Latin Modern字符位于位置"2014(十进制 8212)。事实上,

\documentclass{article}
\usepackage{fontspec}
\begin{document}
Hello—world!
\end{document}

生产

在此处输入图片描述

顺便说一句,以传统方式输入破折号也---可以,因为fontspec(在其最新版本中)会自动应用Ligatures=TeX

相关内容