无需触及源代码即可用 guillemets 替换“and”

无需触及源代码即可用 guillemets 替换“and”

我正在写一本书,出版商希望我使用引号而不是 ``' 引号。我在这个 stack exchange 上读过不少有很好答案的问题,但我还没有找到我的问题的确切答案。

我想知道是否有办法让 LaTeX 自动生成“当我写”时,和“当我写”时。另一种方法,我不太喜欢,就是浏览一本由 15 多个不同的 .tex 文档组成的整本书,然后手动完成。

非常感谢您的帮助。

答案1

您使用 Overleaf 平台是个好消息,因为它允许您使用 Lua(La)TeX 来编译您的文档。:-)

如果您还不熟悉 LuaLaTeX:如今,它基本上是 pdfLaTeX 的超集。这意味着,如果您的文档在 pdfLaTeX 下正确编译,那么您无需进行太多更改即可使其在 LuaLaTeX 下正确编译。您必须进行的主要更改是停止加载inputencfontenc包。如果您的文档使用任何特殊文本或数学字体,可能还需要加载字体规格打包并发出合适的等说明。如果您使用任何非默认字体\setmainfont\setsansfont请注明。

我建议采用以下解决方案,分两个步骤进行。首先,确保加载引用带有选项的包norwegian=guillemets;此包提供了一个名为的宏\enquote,它用一对匹配的 guillemets 包围其参数。其次,您需要定义并激活一个 Lua 函数,该函数充当输入流的预处理器,将所有的实例转换为,``并将\enquote{所有的实例转换''}“动态”。使用 Lua 函数作为预处理器,LaTeX 开始正常工作时,LaTeX 实际上从未“看到”任何``和的实例'';相反,LaTeX 只能看到并操作\enquote指令的实例。

以下测试文件提供了这样一个 Lua 函数,称为use_enquote,以及两个用于激活和(如果需要)停用 Lua 函数的实用宏。

在此处输入图片描述

%% this document must be compiled with LuaLaTeX.
\documentclass{book} % or some other suitable document class
\usepackage{fontspec} % don't load the 'inputenc' and 'fontenc' packages

\usepackage[norsk]{babel} % or '\usepackage[norwegian]{babel}'
\usepackage[norwegian=guillemets]{csquotes} % customize appearance of quoted material

%% A Lua function that performs all of the work:
\directlua{
  function use_enquote ( s )
    s = s:gsub ( "``" , "\\enquote{" )
    return ( s:gsub ( "''" , "}" ) )
  end
}

% Two LaTeX utility macros:
\newcommand\EnquoteOn{\directlua{luatexbase.add_to_callback(
   "process_input_buffer", use_enquote, "use_enquote" )}}
\newcommand\EnquoteOff{\directlua{luatexbase.remove_from_callback(
   "process_input_buffer", "use_enquote" )}}
  
\begin{document}

\EnquoteOn % activate the Lua function 
``Hei Verden''

\EnquoteOff % deactivate the Lua function
``Hei Verden''

\end{document}

相关内容