LaTeX: автоматически преобразовывать "..." в "\ldots" при \input

LaTeX: автоматически преобразовывать "..." в "\ldots" при \input

Я уже прочиталАвтоматически преобразовывать "..." в "\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 с именами \dotstoellipsisONи \dotstoellipsisOFF, которые активируют и деактивируют работу функции Lua.

введите описание изображения здесь

(В коде используется «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}

Связанный контент