如何重新定义宏内的符号间距?

如何重新定义宏内的符号间距?

在写数学表达式时,我想删除符号周围的空格+

对于简单的表达式,我可以通过像 这样的a+b括起来来实现。但是对于复杂的表达式,例如 ,则需要更多的劳动:+a{+}ba+b+c+d+e

我想问一下是否有可编程的这样我就可以定义一个宏fooplus

\newcommand{\fooplus}[1]{do some thing here about +}

这样是否\fooplus{a+b+c+d+e}会产生相同的结果a{+}b{+}c{+}d{+}e

感谢您花时间阅读我的问题。

答案1

+对于简单的情况,只需更改(在组中)的数学代码即可:

\documentclass{article}

\newcommand\fooplus[1]{%
  \begingroup\mathcode`+=\numexpr\mathcode`+-"2000\relax
  #1
  \endgroup
}

\begin{document}
$\fooplus{a+b+c+d+e}\neq x+y$

$a+b+c+d+e\neq x+y$
\end{document}

解释。由于+应该是二进制运算符号,其数学代码的形式为"2abc,因此减去后"2000我们将其变成普通符号。

在此处输入图片描述

答案2

如果您会使用 LuaLaTeX,那么设置一个 Lua 函数来将+-- 以及-*=-- 的状态更改为数学普通状态并不需要花费太多功夫。(Lua 提供了强大而灵活的字符串处理函数。)\fooplus下面的 LaTeX 宏只是调用 Lua 函数。

在此处输入图片描述

% !TeX program = lualatex
\documentclass{article}
\usepackage{luacode} % for 'luacode' environment and '\luastring' macro
\begin{luacode}
function fooplus ( s )
  tex.sprint (( string.gsub ( s , "[%+%-%*%=]" , "{%0}" ) ))
end
\end{luacode}
\newcommand\fooplus[1]{\directlua{fooplus(\luastring{#1})}}

\begin{document}
$\fooplus{a+b+c+d+e=f-g*h}$

$a+b+c+d+e=f-g*h$
\end{document}

相关内容