LaTeX: convierte automáticamente "..." a "\ldots" al realizar \input

LaTeX: convierte automáticamente "..." a "\ldots" al realizar \input

ya leíConvertir automáticamente "..." a "\ldots"pero esta pregunta se hizo/respondió para ayudar al autor de la pregunta a guardar muchas operaciones de reemplazo en varios archivos.

En mi caso, estoy intentando \inputvarios archivos de escenas separadas (para una novela) que conforman una historia completa. Estoy interesado en mantener los archivos separados lo más sencillos posible, lo que significa que quiero usar menos comandos TeX/LaTeX. La razón es que enviaré los archivos separados para su revisión, y tener mucho \ldotstexto hace que la lectura/revisión sea más difícil. Sin embargo, me gustaría utilizar una fuente distinta a Linux Libertine o Junicode, por lo que la solución a la que se hace referencia no funcionará principalmente para mi documento.

Por supuesto, podría esperar hasta el final del proceso de revisión y luego reemplazarlo por lotes. Sin embargo, esperaba una forma mejor (más programática) de reemplazar "..." con puntos suspensivos, sin modificar realmente los archivos fuente para reemplazar cada uno con \ldots.

Ejemplo de 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}

Ejemplo de 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
}

Ejemplo de stories/first_story.tex:

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

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

Respuesta1

Si puedes usar LuaLaTeX, es decir, el LaTeXformatocon el LuaTeXmotor(en lugar del motor pdfTeX), es sencillo escribir una función Lua que reemplace todas las instancias de ...con \dots"sobre la marcha", en una etapa muy temprana del proceso de compilación (antesTeX inicia su procesamiento habitual).

El siguiente ejemplo configura dicha función Lua, denominada dots2ellipses, y proporciona dos macros LaTeX, denominadas \dotstoellipsisONy \dotstoellipsisOFF, que activan y desactivan la operación de la función Lua.

ingrese la descripción de la imagen aquí

(El código utiliza "Arno Pro" en lugar de "EB Garamond", ya que el primero genera una diferencia más fácilmente visible en la apariencia de "..." y "\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}

Respuesta2

Si utiliza cualquier formato (Plain, LaTeX) con un motor encTeX activo, puede escribir algo como esto:

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

something ... or another

y obtienes el resultado esperado. encTeX está disponible en motores TeX de 8 bits (Knuth, eTeX, pdfTeX).

Respuesta3

Prueba esto, compilando con xelatex:

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

\begin{document}

    Hello ... World

\end{document}

información relacionada