![用命令替换符号的环境(或类似环境)](https://linux22.com/image/421769/%E7%94%A8%E5%91%BD%E4%BB%A4%E6%9B%BF%E6%8D%A2%E7%AC%A6%E5%8F%B7%E7%9A%84%E7%8E%AF%E5%A2%83%EF%BC%88%E6%88%96%E7%B1%BB%E4%BC%BC%E7%8E%AF%E5%A2%83%EF%BC%89.png)
看这有关如何用 \cdot 替换 * 的示例。
我想做同样的事情,但只在一个环境中。例如:
\newenvironment{starmultiply}
{
% Something here...
}
{
% Undo previous effect
}
另一个很好的用法是用\langle
and替换 < 和 > \rangle
。
我并不总是想在整个文档中这样做,因此DeclareMathSymbol
不能使用(它只是序言)。另外,
\newenvironment{starmultiply}
{
\mathcode`\*="8000 %
{\catcode`\*=\active\gdef*{\cdot}}
}
{
% Undo previous effect
}
似乎不起作用。我收到“未定义控制序列”错误。有没有不太糟糕的解决方案?
答案1
您可以简单地更改 的数学代码*
。\gdef*
不建议这样做,而且无论如何也不会起作用;有更好的方法可以在本地进行定义。请参阅下面的扩展代码。
\documentclass{article}
\usepackage{amsmath}
\newenvironment{starmultiply}
{\mathcode`*=\cdot\ignorespaces}
{\ignorespacesafterend}
\begin{document}
This is a standard multiplication $a\cdot b$
\begin{starmultiply}
This is a nonstandard multiplication $a*b$
\end{starmultiply}
\end{document}
对于\langle
它来说\rangle
,它有点复杂:
\documentclass{article}
\usepackage{amsmath}
\newenvironment{starmultiply}
{%
\mathcode`*=\cdot
\mathcode`<="8000
\mathcode`>="8000
\begingroup\lccode`~=`< \lowercase{\endgroup\let~}\langle
\begingroup\lccode`~=`> \lowercase{\endgroup\let~}\rangle
\ignorespaces}
{\ignorespacesafterend}
\begin{document}
This is a standard multiplication $\langle a\cdot b\rangle$
\begin{starmultiply}
This is a nonstandard multiplication $<a*b>$
\end{starmultiply}
\end{document}