我希望在 LaTeX 输入中输入 ' 时获得直引号 ',在 LaTeX 输入中输入 " 时获得直双引号 "。在任何地方、任何情况下:普通文本、章节标题、命令内部\texttt
……\verb
我只希望在使用键盘输入时获得“好”的引号(我会自己输入,谢谢)。
这问题列出了几个类似的问题,但我没有找到这个特定的问题:大多数问题都是关于 XeLaTeX 的情况,或者仅在某些特殊情况下获取直引号。
我尝试根据自己的情况调整对上述问题的回答。以下是 MWE。
\documentclass{article}
\usepackage{textcomp}
\begin{document}
\newcommand{\algoupquote}{\mbox{\textquotesingle}}
\newcommand{\algoupquotes}{\mbox{\char`\"}}
\begingroup\lccode`\~=`\'\lowercase{\endgroup\let~}\algoupquote
\begingroup\lccode`\~=`\"\lowercase{\endgroup\let~}\algoupquotes
\catcode`\'=\active\catcode`\"=\active
A "“'straight'” quoting".
\texttt{A "'straight' quoting".}
\end{document}
我有几个问题。
- 这段代码是否“危险”,因为它会做一些事情(例如,声明新的活动字符),这会大大增加与我可能在某一天要使用的某个包不兼容(或奇怪行为)的可能性?(我宁愿放弃自己照顾我的引文的梦想,也不愿冒着将来出现各种问题和进行长时间调试的风险。)
- 我该如何适当地简化上述代码?具体来说,我想用
\algoupquote
命令的定义替换命令,但如果我这样做,我会被 LaTeX 侮辱(如果我敢报告它,它会说“ \UTFviii@three@octets 的参数有一个额外的 }”)。 - 对于大型文档来说,编译时间明显延长是否存在风险?
- 我可以/应该声明“和”活动并使用类似的内容吗
\DeclareUnicodeCharacter{0027}{\textquotesingle}
?这样做的优点和缺点是什么?
(我知道 XeLaTeX 和其他 LaTeX 变体已经被设计用于很好地处理 Unicode 输入,但我更喜欢保持最大的兼容性并使用大多数人使用的标准 LaTeX。)
答案1
一种解决方案是激活单引号和反引号,并将它们定义为所需的命令。在定义中,可以为数学模式和文本模式设置不同的输出。此解决方案部分基于在数学模式下将反引号 ` 替换为幂/插入符号 ^。我想重复一下那里给出的警告,这可能会破坏任何期望任何一个字符具有通常类别代码的代码。
MWE 中使用 T1 字体编码,因为该编码中可用“”,因此不需要进行额外的 catcode 更改或定义。
梅威瑟:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\def\pr{^{\prime}}
\def\qsingle{\ifmmode\pr\else\textquotesingle\fi}
\def\gravesingle{\ifmmode\pr\else\textasciigrave\fi}
\catcode`\'=\active
\let'\qsingle
\catcode`\`=\active
\let`\gravesingle
\begin{document}
A "'straight' quoting".
\texttt{A "'straight' quoting".}
$a 'b' c` x$
The character ` is the grave accent.
\end{document}
结果: