LaTeX:輸入時自動將“...”轉換為“\ldots”

LaTeX:輸入時自動將“...”轉換為“\ldots”

我已經讀過自動將“...”轉換為“\ldots”但提出/回答這個問題是為了幫助提問者透過多個文件節省大量替換操作。

就我而言,我正在嘗試創建\input幾個符合整個故事的單獨場景(對於小說)的文件。我有興趣使單獨的文件盡可能簡單,這意味著我想使用更少的 TeX/LaTeX 命令。原因是我將發送單獨的文件進行修訂,並且大量\ldots文字會使閱讀/修訂變得更加困難。但是,我想使用 Linux Libertine 或 Junicode 以外的字體,因此引用的解決方案主要不適用於我的文件。

當然,我可以等到修改過程結束,然後批量替換。然而,我希望有一種更好的——更具編程性的方式——用省略號替換“...”,而無需實際修改源文件以將每個文件替換為\ldots.

範例main.tex

\documentclass[statementpaper,9pt,openany]{memoir}
\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc}
\usepackage{mynovel}
\usepackage{ebgaramond}

\begin{document}
    \pagestyle{plain}
    \story{stories/first_story.tex}
\end{document}

範例mynovel.sty

\ProvidesPackage{mynovel}
\RequirePackage{lettrine}
% Most code here is to provide a lettrine automatically
\def\capitalize#1#2 {
    \lettrine[lhang=1,nindent=0pt,loversize=0.5,lines=2]{#1}{#2}
}
\newcommand{\story}[1]{
    % some code here explicitly omitted
    \expandafter\capitalize\@@input#1
}

範例stories/first_story.tex

Había una vez un hombre. El hombre dijo:

---Buenos días... ¿me da una taza de café?

答案1

如果你可以使用LuaLaTeX,即LaTeX格式與 LuaTeX引擎(而不是 pdfTeX 引擎),可以直接編寫一個 Lua 函數,在編譯過程的早期階段將所有實例替換為...\dots動態」(TeX 開始其通常的處理)。

下面的範例設定了這樣一個名為 的 Lua 函數,並提供了兩個名為和dots2ellipses的 LaTeX 宏,它們啟動和停用 Lua 函數的操作。\dotstoellipsisON\dotstoellipsisOFF

在此輸入影像描述

(程式碼使用“Arno Pro”而不是“EB Garamond”,因為前者產生“...”和“\dots”的外觀更容易看到的差異。)

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Arno Pro} % for a clear difference between "..." and "\dots"

%% Lua-side code
\usepackage{luacode}
\begin{luacode}
function dots2ellipses ( buff ) 
   return ( buff:gsub ( "%.%.%." , "\\dots{}" ) )
end
\end{luacode}

%% TeX-side code: macros to switch Lua function on/off
\newcommand\dotstoellipsisON{\directlua{luatexbase.add_to_callback(
   "process_input_buffer", dots2ellipses, "dots2ellipses" )}}
\newcommand\dotstoellipsisOFF{\directlua{luatexbase.remove_from_callback(
   "process_input_buffer", "dots2ellipses" )}}

\begin{document}
\dotstoellipsisON
here ... there ... everywhere --- with ``\textbackslash dots''

\dotstoellipsisOFF
here ... there ... everywhere --- without ``\textbackslash dots''

\end{document}

答案2

如果您使用任何格式(Plain、LaTeX)和活動的 encTeX 引擎,您可以撰寫以下內容:

\mubyte\dots...\endmubyte
\mubytein=1 % make it 0 to turn off conversion

something ... or another

然後你就得到了預期的輸出。 encTeX 可在 8 位元 TeX 引擎(Knuth、eTeX、pdfTeX)中使用。

答案3

試試這個,用 xelatex 編譯:

   \documentclass{article}
    \usepackage{ebgaramond}
    \usepackage{xesearch}
\UndoBoundary{.}
\SearchList{list1}{\ldots}{...}

\begin{document}

    Hello ... World

\end{document}

相關內容