使用 LuaLaTeX 将一个单词替换为另一个单词

使用 LuaLaTeX 将一个单词替换为另一个单词

我希望能够以这样的方式使用 LuaLaTeX,即根据使用上下文将一个单词替换为另一个单词。

这是一个简单的例子:当我用斜体书写时,将单词“ and ”(在“a”之前和“d”之后有一个空格)替换为“ & ”。

但总是用“ ”代替“and”是不切实际的\and。很容易忘记一个“ \”,这会降低书写速度。

我不太熟悉 LuaLaTeX 提供的所有可能性(我最近才放弃 PDFLaTeX),但在我看来,LuaLaTeX 允许这样的单词替换,而并不总是使用“ \and”命令。

你知道怎么做吗?

\documentclass{article}

\begin{document}

LuaLaTeX code to automatically convert “\textvisiblespace and\textvisiblespace” to “\textvisiblespace\&\textvisiblespace” if \texttt{\textbackslash textit} is used : \bigskip

\noindent salt and pepper\\
\textit{salt and pepper}\\
should produce :\\
salt and pepper\\
\textit{salt \& pepper}

\end{document}

答案1

\documentclass{article}
\usepackage{luacode}
\begin{luacode}
     fonts.handlers.otf.addfeature {
         name    = "itand",
         type    = "chainsubstitution",
         lookups = {
             {
                 type = "ligature",
                 data = {
                     ['&'] = { "a", "n", "d" },
                 },
             },
         },
         data = {
             rules = {
                 {
                     -- the space is redundant as 0xFFFC contains it
                     before  = { { " ", 0xFFFC } },
                     after   = { { " ", 0xFFFC } },
                     current = { { "a" }, { "n" },  {"d" } },
                     lookups = { 1 },
                 },
              },
         },
     }
\end{luacode}
\usepackage{fontspec}

\setmainfont{texgyretermes}[ItalicFeatures={RawFeature=+itand}]
\begin{document}
abc and cde bande band and ande 
\itshape abc and cde bande band and ande 
\end{document}

在此处输入图片描述

相关内容