автоматически применять специальное форматирование к выбранным словам в тексте

автоматически применять специальное форматирование к выбранным словам в тексте

Возможно ли и, более того, конструктивно заставить LaTeX автоматически форматировать определенные слова определенным образом? Допустим, например, я хотел бы, чтобы каждое вхождение слова «привет» было жирным голубым моноширинным шрифтом, тогда как остальная часть документа оставалась бы обычной, без засечек и черной.

Как мне этого добиться, не выполняя поиск и замену для помещения «hello» в пользовательскую команду каждый раз перед компиляцией .tex-файла?

решение1

Скомпилируйте это с помощью XeLaTeX

\documentclass{article}
\usepackage{color,xesearch}

\SearchList*{redwords}{\textcolor{red}{#1}}{hello}

\begin{document}
This is hello and this is hellow.
\end{document}

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

Но не используйте его. Если вы хотите специально отметить слово, используйте макрос.

Почему? Полагаться на автоматические процедуры всегда рискованно: если у меня есть выбор, я предпочитаю явную разметку. Другая причина в том, что xesearchэто ресурсоемко и в настоящее время не поддерживается.

Ничего похожего для pdflatex; возможно, что-то можно сделать с LuaLaTeX. Я пробовал, chickenizeно, похоже, он не предлагает эту функцию.

решение2

Немного опоздал на вечеринку, но вот решение на основе LuaLaTeX. Оно устанавливает функцию, которая сканирует входные данныедоTeX выполняет всю обычную обработку; любые строки экземпляров helloзаменяются «на лету» на {\ttfamily\bfseries\color{cyan}hello}, подлежащие обработке LaTeX.

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

\documentclass{article}
\usepackage{fontspec}
\setmonofont{Courier New}[BoldFont="Courier New Bold"]
\usepackage{luacode,xcolor}
\begin{luacode}
function hello ( s ) 
   return (string.gsub(s , "(hello)(%L)", "{\\ttfamily\\bfseries\\color{cyan}%1}%2"))
end
\end{luacode}
\AtBeginDocument{\directlua{
  luatexbase.add_to_callback("process_input_buffer", hello, "hello")}}
\begin{document}
hello hellow Hello hello.
\end{document}

решение3

В ConTeXt вы можете использовать translateмодуль для выполнения поиска и замены во время компиляции:

\usemodule[translate]
\definehighlight[SPECIAL][color=cyan, style=\ttbf]
\def\HELLO{\SPECIAL{hello}}
\translateinput[hello][\HELLO{}]
\enableinputtranslation

\setupbodyfont[ss,12pt]

\starttext
When you greet people, you say hello. 
\stoptext

который дает:

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

решение4

Для моего развлечения при использованииLaTeX3, код ниже определяет среду boldwords, которая принимает список слов, разделенных запятыми, которые должны быть набраны жирным шрифтом внутри среды. Запуск MWE дает:

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

Обратите внимание, что login catalogueне выделено жирным шрифтом, поскольку это не полное слово.

\documentclass{article}
\usepackage{environ}
\usepackage{expl3}

\ExplSyntaxOn
\clist_new:N \l_bold_word_clist
\tl_new:N \l_BODY_tl
\NewEnviron{boldwords}[1]{
   \clist_set:Nn \l_bold_word_clist {#1}
   \tl_set:No \l_BODY_tl {\BODY}
   \clist_map_inline:Nn \l_bold_word_clist {
      \regex_replace_all:nnN {\b##1\b} { \c{textbf}\cB\{##1\cE\} } \l_BODY_tl
   }
   \l_BODY_tl
}
\ExplSyntaxOff

\begin{document}

  \begin{boldwords}{dog, log}
     a dog, a cat, a frog a log and a catalogue
     a dog, a cat, a frog a log and a catalogue
     a dog, a cat, a frog a log and a catalogue

     a dog, a cat, a frog a log and a catalogue
     a dog, a cat, a frog a log and a catalogue
  \end{boldwords}

\end{document}

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