![LaTeX:輸入時自動將“...”轉換為“\ldots”](https://rvso.com/image/328454/LaTeX%EF%BC%9A%E8%BC%B8%E5%85%A5%E6%99%82%E8%87%AA%E5%8B%95%E5%B0%87%E2%80%9C...%E2%80%9D%E8%BD%89%E6%8F%9B%E7%82%BA%E2%80%9C%5Cldots%E2%80%9D.png)
我已經讀過自動將“...”轉換為“\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}