是否有可能禁用为整个文档添加智能(上下文)引号?如果可以,怎么做?
特别是,是否可以通过某些选项或方法保留单引号 '、双引号 " 和反引号 ` 的原样,以直接禁用此类替换?
\documentclass{article}
% minimal document which illustrates the issue.
\begin{document}
Can "double quotes", 'single quotes' and `backticks`
substitutions to any curly, smart, quote, contextual
be switched off for the whole document?
\end{document}
包裹upquote
似乎仅限于\verbatim
类型部分。包csquotes
具有用户可定义的“智能引号”命令和环境…然而,完全禁用智能引号的某些切换仍难以实现。
问题“是否有类似 upquote 的软件包,用于提供正文而不是逐字文本?”正在寻找包加宏而不是关闭开关。
系统性影响添加包对阵拨动开关(选项?)有着内在的差异。
一方面,“添加包”是下游方法。下游文件在作者的文件中增加了集群和复杂性。 例如x
,为宏添加此包y
,然后添加该包z
,然后覆盖a
,然后定义b
,以便b
其本身可以被覆盖。每个添加的包、定义和覆盖也可能为动态运行时执行增加一些计算复杂性。
另一方面,“拨动开关”是上游方法。我猜这些引号替换源自各种 TeX/LaTeX 引擎。假设或理想情况下,可以编译和链接智能引号选项开关,以便在源头高效执行……使用一些伪逻辑,例如:
// over simplified pseudo code
if smartQuotesOption == true {
// make quote substitutions happen
}
else {
// just skip the substitutions.
// so, maybe nothing or little to do.
}
那么从概念上讲,用户将使用命令行选项:
pdflatex --no-smart-quotes document.tex
或者在 LaTeX/TeX 文件中使用类似下面的一些直接开关:
\smartquotesdisable
\smartquotesenable % default for backward compatibility
这种智能替换启用/禁用切换确实存在于各种 markdown 工具pandoc
和主流文字处理器等文档创建环境中。
那么,“智能报价替换是否只是已关闭“?”……
如果是,那就太好了。
如果没有,那么在哪里可以提交智能替代切换功能请求?或者,了解这样的功能是否已经在路线图上?:-)
答案1
asciigrave
我对更改和的catcode 有一些保留意见quotedbl
因为这些字符通常用于更改其他字符的 catcode。但也许这样没问题。
已更新以适用于pdflatex
、xelatex
和lualatex
。
\documentclass{article}
\usepackage{ifxetex}
\usepackage{ifluatex}
\newif\ifxetexorluatex
\ifxetex
\xetexorluatextrue
\else
\ifluatex
\xetexorluatextrue
\else
\xetexorluatexfalse
\fi
\fi
\ifxetexorluatex
\usepackage{fontspec}
\begingroup
\catcode 34=13
\catcode 39=13
\catcode 96=13
\gdef"{\textquotedbl}
\gdef'{\textquotesingle}
\gdef`{\textasciigrave}
\endgroup
\else
\usepackage[TS1,T1]{fontenc}
\begingroup
\catcode 39=13
\catcode 96=13
\gdef'{{\fontencoding{TS1}\selectfont\textquotesingle}}
\gdef`{{\fontencoding{TS1}\selectfont\textasciigrave}}
\endgroup
\fi
\def\smartquotedisable{%
\ifxetexorluatex
\catcode 34=13
\fi
\catcode 39=13
\catcode 96=13
}
\def\smartquoteenable{%
\ifxetexorluatex
\catcode 34=12
\fi
\catcode 39=12
\catcode 96=12
}
\begin{document}
`Hello'
"Hello"
``Hello''
\smartquotedisable
`Hello'
"Hello"
``Hello''
\smartquoteenable
`Hello'
"Hello"
``Hello''
\end{document}