我有一份文件,其中所有内容都以以下形式引用:
``quote''
如何让它们在输出文档中显示为
“引用”
谢谢
答案1
这是对我有用的东西。它基于在 TeX 中将右单引号设为活动字符。我必须承认,我没有信心这不会破坏其他东西,尤其是考虑到 @egreg 对原始问题的负面评论。
让我们从包含多个引号的示例开始。第一行显示了我们希望双引号如何显示。
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\begin{document}
This is the \textquotedblleft{}quote\quotedblbase{} that I'd want.
Let's play with some ``double quotes'' and
some ``more double quotes'' and yet ``some more''
and then with some `single quotes' and
some `more single quotes' and yet `some more'
and see what happens.
\end{document}
现在,在序言中添加以下几行:
\makeatletter
\catcode`'=\active
\def'{\futurelet\@rqpeek\@rqhack}
\def\@rqhack{\ifx\@rqpeek'\expandafter\dbl@rq\else\rq\fi}
\def\dbl@rq'{\quotedblbase}
\makeatother
你就能得到你想要的。
编辑:在 egreg 对这个包含素数的调整破坏数学做出评论之后,例如$f'(x)$
,我提供了一个修复程序并在最后给出了一个简短的解释和免责声明。
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\makeatletter
\catcode`\'=\active
\def'{\ifmmode\expandafter\active@math@prime\else\expandafter\@rqtext\fi}
\def\@rqtext{\futurelet\@rqpeek\@rqhack}
\def\@rqhack{\ifx\@rqpeek'\expandafter\dbl@rq\else\rq\fi}
\def\dbl@rq'{\quotedblbase}
\def\pr@m@s{%
\ifx'\@let@token
\expandafter\pr@@@s
\else
\ifx^\@let@token
\expandafter\expandafter\expandafter\pr@@@t
\else
\egroup
\fi
\fi}
\makeatother
\begin{document}
This is the \textquotedblleft{}quote\quotedblbase{} that I'd want.
Let's play with some ``double quotes'' and
some ``more double quotes'' and yet ``some more''
and then with some `single quotes' and
some `more single quotes' and yet `some more'
and see what happens.
Let's see some math too:
if $f(x) = x^2$ then $f'(x) = 2x$ and
$$f''(x) = 2$$
And some more `single' and ``double'' quotes.
\end{document}
修复分为两个部分。首先,活动引号必须检查它是在数学模式还是文本模式下找到的。其次,内部宏\pr@m@s
(在数学模式下处理连续素数)必须在这里重复(逐字重复latex.ltx
),因为它会检查下一个字符是否是'
,现在它必须检查是否存在活动'
。
免责声明:
将右单引号设为活动字符预计会破坏已将其视为活动字符的所有内容。我想到的例子有:软件包babel
(某些带重音符号的语言)、各种数学软件包(如)euler
、各种逐字文本软件包(如)alltt
。但也有一些软件包,例如xspace
(暂时)将的设置\catcode
为\'
13。我已经测试过euler
,alltt
和xspace
它们似乎可以很好地处理这个问题。话虽如此,我已经警告过你了。如果某个软件包因此而出现问题,我预计修复不会很明显……