我该如何排版增量“+=”符号?它应该充当一种关系(如 =),但“+”和“=”之间不应该有多余的空格。
答案1
这取决于你认为什么是正确的。首先要注意的是,符号应该代表一种关系。TeX 在两个连续的关系之间不留空格(也不留换行符)。所以
\documentclass{article}
\newcommand{\pluseq}{\mathrel{+}=}
\newcommand{\eqplus}{=\mathrel{+}}
\begin{document}
$x\pluseq 2$
$x\eqplus 2$
\end{document}
将产生
如果你喜欢(字体相关的)负字距,只需添加它;将上述定义更改为
\newcommand{\pluseq}{\mathrel{+}\mathrel{\mkern-2mu}=}
\newcommand{\eqplus}{=\mathrel{\mkern-2mu}\mathrel{+}}
你会得到
尝试并决定。使用宏意味着你可以对符号做任何你想做的事情,而不需要改变任何事物在文档正文中。
答案2
Donald Knuth 和 Silvio Levy 的 CWEB 系统使用纯 TeX 来“漂亮地打印” C 或 C++ 列表,作为文学程序的一部分。
CWEB 宏用于\mathrel{+{=}}
排版此运算符。下面的示例演示了如何操作。
以这个源文件为例plus.w
:
@* Increment operator in \.{CWEB}.
@p
#include<stdio.h>
@#
int main(void)
{
int x = 2;
x += 2;
printf("x + 2 = %d\n", x);
return(0);
}
.tex
通过运行将其转换为文件cweave plus
,然后使用 进行排版pdftex plus
。您将获得以下排版:
那么 CWEB 如何在 TeX 中做到这一点?看看生成的文件plus.tex
:
\input cwebmac
\N{1}{1}Increment operator in \.{CWEB}.
\Y\B\8\#\&{include} \.{<stdio.h>}\7
\&{int} \\{main}(\&{void})\1\1\2\2\6
${}\{{}$\1\6
\&{int} \|x${}\K\T{2};{}$\7
${}\|x\MRL{+{\K}}\T{2};{}$\6
${}\\{printf}(\.{"x\ +\ 2\ =\ \%d\\n"},\39\|x);{}$\6
\&{return} (\T{0});\6
\4${}\}{}$\2\par
\fi
\inx
\fin
\con
相关行是${}\|x\MRL{+{\K}}\T{2};{}$\6
。
这些宏在 TeXLive 发行版中的 中定义cwebmac.tex
(在标准 Linux 安装中是 )/usr/local/texlive/2015/texmf-dist/tex/plain/cweb/cwebmac.tex
。这两行是使用的宏:
(l. 85) \def\MRL#1{\mathrel{\let\K==#1}}
(l. 308) \let\K== % assignment operator
因此程序使用\MRL{+\K}
,+=
并且首先扩展为\mathrel{\let\K== +{\K}}
,然后最后扩展为\mathrel{+{=}}
。
因此,CWEB 使用\mathrel{+{=}}
,QED。
答案3
使用\mathrel{+=}
以获得正确的间距。