问号与感叹号

问号?和一个感叹号!是诚实的角色:你只需输入它们,它们就会出现。但围绕它们的约定因语言而异。英语赋予它们与句号相同的更宽的句尾空间; French 在它们前面留了一个薄薄的空格;西班牙语以颠倒的 ¿ 或 ¡ 开头;日语使用全角?和!。本页按语言分类、如何键入它们以及 LaTeX 为您处理的间距。

西方?和 !

在英语和其他西方文本中,您可以直接从键盘输入?!。不需要转义,也没有特殊的命令。英语的惯例是将它们紧邻前面的单词——前面没有空格——后面有一个普通的空格。

在内部 TeX 为每个字符分配一个空间因子。句号.、问号?和感叹号!都带有空格因子3000,这将后面的空格标记为句末空格。在默认值(\nonfrenchspacing)下,句子间的空间设置为比单词间的空间稍宽,并且允许拉伸和收缩大约三倍。因此,以 ?! 结尾的句子会自动获得与句点相同的稍宽的间隙。

一个陷阱:TeX 假设大写字母后面的标点符号不会结束句子(它防止像 Ph.D. 这样的缩写)。在极少数情况下,您在大写字母之后结束句子 — Who is FBI? — 将 \@ 放在 ? 之前,表示“这确实是结束了”。相反,要完全删除较宽的句尾空间并使其等于字间空间,请在序言中声明\frenchspacing。 “自动插入空格”页面更深入。

latex
Really? Yes! It works.

% After a capital, mark the true sentence end:
He joined the FBI\@. Then he left.

法语是不同的。它的正字法在 ! ? : ; 之前放置了一个薄空格,如Vraiment ? 中。您不必手动插入此内容:使用 [french] 选项 (babel-french) 加载 babel 会自动在这些标记之前放置正确的(不间断的)空格。

西班牙语倒置标记 ¿ ¡

西班牙语在子句的 开始 处用倒置标记打开问题或感叹号:问题是 ¿…?,感叹号是 ¡…!,由开始标记和结束标记括起来。结束?! 正常输入;问题是如何输入开头 ¿ 和 ¡

传统的方法是连字输入。在标准文本字体编码中,感叹号后跟反引号变成 ¡,问号后跟反引号变成 ¿。即:开头感叹号是!,然后是` `, and the opening question is ? then ``。反引号不会出现在输出中——您会得到一个倒转的标记。

另一种方式是显式命令。 ¡ 为\textexclamdown,¿ 为\textquestiondown。许多人更喜欢这些:意图一目了然,而且即使在连字被禁用的情况下它们也能工作。使用[spanish] 加载babel 还会设置西班牙语连字符和标题,并调整?! 周围的处理以适应语言。

latex
% Ligature input (mark + backtick):
?`Como estas?
!`Hola!

% Explicit commands (identical output):
\textquestiondown Como estas?
\textexclamdown Hola!

需要注意的是:在 pdfLaTeX 下,这些连字用作字体编码功能,但在 Unicode 原生 XeLaTeX / LuaLaTeX 下,最安全的做法是不要依赖它们 — 直接在源代码中键入倒置的 ¿ ¡(或使用 \textquestiondown / \textexclamdown)。

日语?和!

在日语文本中,您使用全角?和!,而不是半角? !。您可以直接在源代码中编写它们,并且支持日语的引擎(upLaTeX 或带有 luatexja 的 LuaLaTeX)按原样设置它们。不需要转义。

日语排版通常在中间文本?或!之后放置全角空格(zenkaku aki)。 W3C“日语文本布局要求 (JLREQ)”指定句尾问号或感叹号为全角,并后跟全角空格 — 只不过当后面有右括号时,它被设置为实心(无间隙)。关键点:您通常不应该自己输入全角空格;引擎自动将其插入作为标点符号间距。在顶部添加手动全角空格将使间隙加倍。

另请注意,以“?”或“!”结尾的句子在日语中并不像句号那样使用。标志着正式的句子结束。它们常见于对话和较轻的语体中,而 。 在正式写作中带有句尾。当 ? 或 ! 落在行尾并且其尾随全角空格会被保留时,最好抑制该行尾空格(大多数类和包都会处理此问题)。

输入查找

输入→输出→注释。连字行中的反引号是产生开始标记的输入的一部分;它不会出现在输出中。

输入输出注释
?西方问号;更宽的句尾空间 (SF 3000)
!西方感叹号;更宽的句尾空间 (SF 3000)
?-backtick?然后`¿连字;开头问号(西班牙语)
!-backtick!然后`¡连字;开头感叹号(西班牙语)
textquestiondown\textquestiondown¿显式命令;即使没有连字也能工作
textexclamdown\textexclamdown¡显式命令;即使没有连字也能工作
fullwidth-question?(全角)日语;尾随全角空格是自动的
fullwidth-exclam!(全角)日语;尾随全角空格是自动的

工作示例

这是跨语言的真实示例。西班牙语用开始和结束标记将子句括起来;在法语中,babel-french 在标记前插入空格;在日语中,您只需放入全角标记,后面跟着空格即可。

latex
% --- Spanish ---
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[spanish]{babel}
\begin{document}
?`Como estas? !`Que bien!

\textquestiondown Listo\textexclamdown
\end{document}

通过连字(? ! 后跟反引号)生成开头 ¿ ¡ 的行和使用显式命令的行给出完全相同的输出。接下来是日本的例子;请注意,在“?”或“!”之后不要输入全角空格。

latex
\documentclass{ltjsarticle}
\begin{document}
本当ですか? はい、できました! 次に進みましょう。
\end{document}

编译此代码会生成一个可读的日语段落,在“本当ですか?”之后有一个全角空格,在“できました!”之后还有一个全角空格。你没有手工添加空格,但间距却是正确的——这就是日语排版的便利性。

提交前标记检查

问号和感叹号很小,但它们立即暴露了语言政策。提交之前,扫描整个文档,检查标记是半角还是全角,周围的空格是否是手动输入的,以及西班牙语倒置开头标记是否缺失。在日语段落中,将?! 混合会改变行尾和间距行为,即使句子声调相同也是如此。

  • 以日语为中心的报告: 使用全角 表示正文问题和强调,并且不要在其后键入额外的空格。
  • 西方引文、代码和专有名称: 保留半角?! 与源代码一样,将它们与日本正文政策分开对待。
  • 西班牙语句子: 不仅检查结束标记,还检查开始¿¡。缺少倒置的开头标记会损害外观和语言的正确性。
  • 法语散文: 预先决定让 babel 等语言支持管理精简空间,而不是手动插入。