我正在写一本书,出版商希望我使用引号而不是 ``' 引号。我在这个 stack exchange 上读过不少有很好答案的问题,但我还没有找到我的问题的确切答案。
我想知道是否有办法让 LaTeX 自动生成“当我写”时,和“当我写”时。另一种方法,我不太喜欢,就是浏览一本由 15 多个不同的 .tex 文档组成的整本书,然后手动完成。
非常感谢您的帮助。
答案1
您使用 Overleaf 平台是个好消息,因为它允许您使用 Lua(La)TeX 来编译您的文档。:-)
如果您还不熟悉 LuaLaTeX:如今,它基本上是 pdfLaTeX 的超集。这意味着,如果您的文档在 pdfLaTeX 下正确编译,那么您无需进行太多更改即可使其在 LuaLaTeX 下正确编译。您必须进行的主要更改是停止加载inputenc
和fontenc
包。如果您的文档使用任何特殊文本或数学字体,可能还需要加载字体规格打包并发出合适的等说明。如果您使用任何非默认字体\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}