(pdf)LaTeX 可以识别文本字符串并替换(扩展)它们吗?

(pdf)LaTeX 可以识别文本字符串并替换(扩展)它们吗?

我希望 LaTeX 能用e^来代替\mathrm{e}^。我知道我可以制作一个宏\e来执行此操作,但我知道我会忘记使用它。

LaTeX 可以查找和替换字母组合吗(我不是指查找和替换编辑器的功能(我的意思是真正的 TeX,类似宏的扩展)。

答案1

只能在数学模式下激活e,并且只能作为带有 mathcode 的数学字符激活"8000,这不会干扰宏名称扫描:

\documentclass[a4paper]{article}

\begingroup\lccode`~=`e\lowercase{\endgroup
  \edef~{\noexpand\mathrm{\mathchar\the\mathcode`e}}}
\mathcode`e="8000

\begin{document}
$e^x\leq e^y$
\end{document}

但我建议不要使用这种方法。最好使用宏\euler或任何其他名称。

为了使用"8000分配给 的特殊数学代码e,必须存在 的有效定义作为e活动字符。因此,众所周知的\lowercase技巧(那里使用的许多命令e在其名称中都有)。

答案2

在纯 TeX 中,'的定义相当巧妙,以便多个连续字符'能够正常工作。出于这个原因(也可能出于其他原因),Knuth 引入了在数学模式下通常不活动的字符变为活动字符的可能性。这是由 设置的\mathcode`\e="8000。我们定义一个活动字符e来检查下一个字符并决定是否变为活动\mathrm{e}字符。

\documentclass{article}

\begingroup
\makeatletter
\catcode`\~=13\relax
\lccode`\~=`\e% pretend that a lowercase "~" is "e".
\lccode`\^=`\^% make sure it doesn't get change (who knows...)
\lowercase{\endgroup % restore the former catcodes and lccodes.
  \newcommand{~}{\@ifnextchar^{\@firstoftwo{\mathrm{\true@e}^}}{\true@e}}%
  \edef\true@e{\mathchar\the\mathcode`\e}% save the true e.
}
\mathcode`\e="8000\relax


\begin{document}

As everyone knows, $e^{i\pi}+1=0$ and if $e=0$, $\frac{1}{e}$ blows up. Of course, we can try more complicated things:
\begin{equation}
\epsilon^{e^{e_a^b}}+e_a^{e^a}
\end{equation}

\end{document}

答案3

(仅总结评论。)

可以从技术上讲,可以通过创建一个活跃角色来实现这一点e,但这会破坏各种各样的东西,而且可能不值得。

定义\e或者仅仅进行搜索和替换可能是一个更好的主意。

相关内容