
В программировании -=
и +=
другие подобные операторы довольно популярны. Но я не могу написать такой оператор красиво в уравнениях Latex.
Например, когда я использую, x += \frac{\partial C}{\partial x}
я получаю следующую формулу:
Проблема в том, что +=
они слишком далеко друг от друга. Есть ли какой-нибудь оператор латекса, который позволяет писать их ближе друг к другу?
решение1
Вы можете использовать
\[
x \mathrel{+}= \frac{\partial C}{\partial x}
\]
это не добавит пробела между знаками + и = и будет рассматривать весь блок как один символ отношения.
Конечно, определение будет более уместным:
\newcommand{\pluseq}{\mathrel{+}=}
\newcommand{\minuseq}{\mathrel{-}=}
и
a \pluseq b \minuseq c
напечатал бы
решение2
Операторы +
и -
в +=
и -=
должны быть реляционными операторами, как показано в egreg.отвечать, поскольку TeX не устанавливает пробел между +
/ -
и =
, а все выражение +=
/ -=
становится реляционным символом относительно пробела до и после.
Этот ответ пытается найти автоматическое решение. Символы +
и -
активируются только в математическом режиме. Затем активный символ может проверить, следует ли за ним знак равенства. Если результат положительный, используется реляционная версия операторов +
и -
, в противном случае берется исходная двоичная версия.
Для обеспечения совместимости с amsmath
:
\documentclass{article}
\usepackage{amsmath}
% save original binary + and - as \binplus and \binminus
\mathchardef\binplus=\the\mathcode`+
\mathchardef\binminus=\the\mathcode`-
% define relational + and -
\mathchardef\relplus=\numexpr\the\binplus + "1000\relax
\mathchardef\relminus=\numexpr\the\binminus + "1000\relax
% define active + and -, which check for a following =
\makeatletter
\catcode`+=\active
\catcode`-=\active
\def+{\@ifnextchar=\relplus\binplus}
\def-{\@ifnextchar=\relminus\binminus}
\@makeother\+
\@makeother\-
\makeatother
% enable active + and - for math mode
\AtBeginDocument{%
\mathcode`+="8000\relax
\mathcode`-="8000\relax
}
% patch \newmcodes@ of package `amsopn.sty'
\usepackage{etoolbox}
\makeatletter
\@ifpackageloaded{amsopn}{%
\patchcmd\newmcodes@{%
\mathchardef\std@minus\mathcode`\-\relax
}{%
\let\std@minus\binminus
}{}{\errmessage{\noexpand\newmcodes@ could not be patched}}%
}{}
\makeatother
\begin{document}
\[
a += b + c \qquad x -= y - z \qquad \operatorname{foo-bar}
\]
\end{document}