如何在 tex 中生成正确的单引号和双引号

如何在 tex 中生成正确的单引号和双引号

我正在使用书籍文档类编写 tex 文档。我已经输入了近 100 页,但我在输入单引号和双引号时犯了一个错误。我按照如下方式操作: "test double quotes"'test double quotes'生成了以下形式的输出:在此处输入图片描述

有没有办法可以生成正确的输出而不更改所有地方的引号?我看到了一些类似的答案@除了 `` + '' 之外,在 LaTeX 中还有其他方法可以使用双引号吗?但似乎都不起作用。

答案1

这是一个基于 LuaLaTeX 的解决方案,它不需要您修改现有的"..."'...'引号对。它由一个名为msq(“make smart quotes”的 Lua 函数)和两个名为 的实用 LaTeX 宏组成,\msqOn它们\msqOff分别激活和停用 Lua 函数。通过“激活 Lua 函数”,我的意思是将其分配给 LuaTeX 的process_input_buffer回调,它在其中充当输入流的预处理器。

在此处输入图片描述


附录,发布于 2023 年 3 月 1 日:如果 (a) 您的文档使用"表示十六进制数(例如"FF=256),并且输入行中有两个以上的十六进制数,(b) 如果您"在 babel 简写表达式中使用,或者 (c) 如果您使用"表示包含空格的文件名;例如,xxx"aaa bbb"ccc.tex表示文件名 ,则您不应使用此答案将“愚蠢”替换为“智能”双引号xxxaaa bbbccc.tex。请参阅@DavidCarlisle 最近的回答了解更多信息。当然,如果这些问题之一恰好出现在文档中界限分明的部分,您可以msq通过在有问题的部分开始时执行来“保护”它免受预处理器的操作\msqOff(稍后再执行\msqOn以重新启动预处理器操作)。

\documentclass{book}
\usepackage[english]{babel} % or some other suitable language choice
\usepackage[autostyle]{csquotes}

\usepackage{luacode}
\begin{luacode}
-- msq: "make smart quotes"
function msq ( s ) 
  s = s:gsub ( '"(.-)"' , "\\enquote{%1}" )
  s = s:gsub ( "'(.-)'" , "`%1'" )
  return s
end
\end{luacode}

\newcommand{\msqOn}{\directlua{  luatexbase.add_to_callback( 
   "process_input_buffer", msq , "msq" )}}
\newcommand{\msqOff}{\directlua{ luatexbase.remove_from_callback( 
   "process_input_buffer", "msq" )}}

\begin{document}
\msqOn
"test double quotes" and 'test single quotes'


 "\,'Twas brillig and the slithy toves \ldots"

\medskip    
\msqOff
"test double quotes" and 'test single quotes'
\end{document}

答案2

首先用编辑器替换最后一个引号,然后“搜索并替换”

"<space>  -> }

然后用

" -> \enquote{

然后总是使用:

\documentclass{article}
\usepackage[french,ngerman,english]{babel}
\usepackage[autostyle]{csquotes}

\begin{document}

\enquote{quote} 
\enquote*{quote}

\enquote{quote \enquote{quote in quote}}

\foreignquote{ngerman}{quote}   
\foreignquote*{ngerman}{quote}

\foreignquote{ngerman}{quote \foreignquote{ngerman}{quote in quote}}

\foreignquote{french}{quote}    
\foreignquote*{french}{quote}

\foreignquote{french}{quote \foreignquote{ngerman}{quote in quote}}

\end{document}

在此处输入图片描述

答案3

您可以将"和设置'为活动字符并做适当的定义:

\catcode`\"=13 \def"{\bgroup \def"{”\egroup}“}
\catcode`\'=13 \def'{\bgroup \def'{\char`\'\egroup}`}

"test double quotes" and 'test double quotes'

\bye

相关内容