我已经读过了自动将“...”转换为“\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}