LaTeX:在 \input 时自动将“...”转换为“\ldots”

LaTeX:在 \input 时自动将“...”转换为“\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}

相关内容