在不觸及原始程式碼的情況下用 guillemets 取代 `` 和 ''

在不觸及原始程式碼的情況下用 guillemets 取代 `` 和 ''

我正在寫一本書,出版商希望我使用 guillemets 而不是「」引號。我在這個堆疊交換中閱讀了很多問題並給出了很好的答案,但我還沒有找到我的問題的確切答案。

我想知道是否有一種方法可以讓 LaTeX 自動產生 « 當我寫 `` 時,以及 » 當我寫 '' 時。我不太喜歡的另一種選擇是通讀由超過 15 個不同 .tex 文件組成的整本書並手動完成。

非常感謝任何幫助。

答案1

好消息是您使用的是 Overleaf 平台,因為它允許您使用 Lua(La)TeX 來編譯文件。 :-)

如果您(尚)不熟悉 LuaLaTeX:如今,它很大程度上是 pdfLaTeX 的超集。這尤其意味著,如果您的文件在 pdfLaTeX 下正確編譯,則無需進行太多更改即可使其在 LuaLaTeX 下也正確編譯。您要做的主要更改是停止載入inputencfontenc套件。如果您的文件使用任何特殊文字或數學字體,則可能還需要加載字體規範包裝並發出適當的說明\setmainfont\setsansfont。如果您使用任何非預設字體,請註明。

我建議採用以下解決方案,分兩步驟進行。首先,請務必加載cs報價帶有選項的封裝norwegian=guillemets;這個套件提供了一個名為 的宏\enquote,它用一對匹配的 guillemets 包圍它的參數。其次,您需要定義並啟動一個 Lua 函數,該函數充當輸入流上的預處理器,將``to的所有實例和to\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}

相關內容