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
告诉inputenc
LaTeX,当<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
。