在他的书中,实用排版,巴特里克发表了如下评论。
计算机科学家和文档编写者请注意:软件代码中的直引号和反引号永远不应转换为弯引号。当然,这些标记是代码功能语法的一部分,必须逐字复制。虽然 LaTeX 的粉丝经常写信给我吹嘘其排版优势,但我从未见过任何用 LaTeX 创建的文档能做到这一点。
这些评论让我很困惑。据我所知,在 LaTeX 中获得左引号的正确方法是使用反引号字符。Butterick(一个似乎很了解他的东西的人)是否反对标准 LaTeX 语法,或者是否有更好的方法在 LaTeX 中使用左引号而我不知道?
答案1
既不是计算机科学家,也不是文档作者。我是人文专业的学生!但我认为这就是他的意思。
在普通 LaTeX 中(即在环境之外verbatim
)书写时,我们使用重音符(也称为反引号 (`))来打开撇号或引号对。同时,我们使用撇号 (') 或打字机撇号 (') 来关闭。这在通过 LaTeX 时会产生正确的花括号。因此,它不会造成问题,如下所示:
然而,巴特里克并不喜欢 LaTeX 的做法,即在verbatim
编码环境中继续使用重音符号来代替开头的撇号和引号。大多数作家会提出以下观点:
\documentclass{article}
\begin{document}
\section*{Incorrect usage}
\begin{verbatim}
if(``James Bond'' = trustworthy)
smile
if(`turkey-bacon' = bacon)
cry
\end{verbatim}
\end{document}
注意结果如何产生花括号。Butterick 认为这是不好的做法,因为代码本来就应该有打字机撇号。在编写代码时,您希望使用原始符号,因为它作为代码的一部分具有独特的功能目的,因此使用其他符号是不准确的。这与普通的 LaTeX 形成对比,在普通的 LaTeX 中,重音符和打字机撇号只是花括号的印刷不良替代品,专门设计用于在编译期间用更好看的替代符号替换。即使您尝试使用打字机撇号,LaTeX 也会给您一个花括号。
您可以通过以下方式轻松解决这些问题:
- 正在加载
upquote
包(文档) 与\usepackage{upquote}
;以及 - 将代码中的所有重音符号替换为撇号
将这两个步骤应用到我们现有的例子:
\documentclass{article}
\usepackage{upquote}
\begin{document}
\section*{Incorrect usage}
\begin{verbatim}
if(``James Bond'' = trustworthy)
smile
if(`turkey-bacon' = bacon)
cry
\end{verbatim}
\end{document}
这具有双重好处:使代码与您想要复制到您正在处理的任何内容中的代码完全相同,并消除任何语义歧义。
答案2
我不是 LaTeX 用户。但对于代码示例,使用verbatim
(或\verb
) 通常是正确的答案。如果您需要将直引号混合到非verbatim
文本中,例如英尺和英寸标记,尝试这种方法。
我在书中加上这个脚注的原因是,我经常收到 LaTeX 用户的邮件,他们声称只要使用 LaTeX,他们的排版就万无一失。事实并非如此。如果你想要用 LaTeX 制作的排版错误的例子,可以试试 Kent Dybvig,Scheme 编程语言,第 4 版,或计算机程序的结构和解释, 第二版
例如,来自 Dybvig — 在这段 Scheme 代码中,开引号应该是反引号;闭引号应该是单直引号:
“但这些代码示例其实并不模棱两可,因为每个人知道不要输入花括号。”这是一个草率的论点,尽管对于只接受 ASCII 输入的语言来说,这可能是正确的。但许多当代语言(例如,球拍) 接受 UTF-8 输入。在这种情况下,花括号可以合法地成为输入流的一部分,因此产生歧义是真实存在的可能。
底线:这不是个人品味的问题。在代码示例中,引号替换 — — 以及任何其他类型的“美化” — — 在语义上都是错误的。