禁用整个文档的智能(上下文)引号?

禁用整个文档的智能(上下文)引号?

是否有可能禁用为整个文档添加智能(上下文)引号?如果可以,怎么做?

特别是,是否可以通过某些选项或方法保留单引号 '、双引号 " 和反引号 ` 的原样,以直接禁用此类替换?

\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似乎仅限于\ver­ba­tim类型部分。包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。但也许这样没问题。

已更新以适用于pdflatexxelatexlualatex

\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}

output

相关内容