当我尝试使用西班牙语和等宽字体的 babel 包编译包含以“r”开头的引号单词的 PDF 时,遇到了一个奇怪的问题。
这个最小的例子
\documentclass[]{book}
\usepackage[spanish]{babel}
\begin{document}
\texttt{"rword"}
\end{document}
失败并出现错误
! Bad character code (-1).
\es@chf ->\char \hyphenchar \font
l.5 \texttt{"rword"}
A Unicode scalar value must be between 0 and "10FFFF.
I changed this one to zero.
如果我
- 删除
\usepackage[spanish]{babel}
(但需要渲染两次), - 使用
\usepackage[ensligh]{babel}
, - 删除等宽格式(
"rword"
而不是\texttt{"rword"}
) - 删除引号(
\texttt{rword}
而不是\texttt{"rword"}
) - 删除“r”(
\texttt{"word"}
而不是\texttt{"rword"}
)或将其更改为任何其他字母。
在引号和字母“r”之间添加任意数量的空格仍然会触发错误。
虽然除“r”之外的其他字母也能编译,但其中一些会导致奇怪的输出。例如,这是来自\texttt{"aword"}
我尝试了 Texmaker 上可用的所有 LaTeX 引擎(XeLaTeX、LuaLaTeX、PDFLaTeX 和 LatexMk),但它们都因相同的错误而失败。此时此刻,我只是对这个错误的特殊性感到困惑和困惑。
答案1
此问题是由babel
西班牙语的简写引起的"
。使用
\usepackage[spanish,shorthands=off]{babel}
解决了问题。您也可以使用 暂时禁用它\shorthandoff
(正如 David Carlisle 在评论中提到的那样),然后使用 重新启用\shorthandon
它。您可能会定义一个执行此操作并切换到 的环境\ttfamily
。如果您需要其他速记,您也可以只关闭那一种速记。但是,如果您以西班牙语为主要语言写作,您可能可以在键盘上输入所需的所有字符,而不需要速记。
你也可以通过以下方式判断babel
这"r
不是简写:
"{}rword"
然而,在 TeX 中"
,结束引号(当它不是特殊字符时),因此您可能想要加载\usepackage{fontspec}
或\usepackage[T1]{fontenc}
写入
``rword" or “rword”
这可能就是为什么该包"a
首先认为将等定义为简写是可以接受的。
如果您确实想以等宽字体逐字显示带有直引号的命令的确切语法,则可能需要使用环境verbatim
。