如何在 LaTeX 中排版 C++ 增量符号?

如何在 LaTeX 中排版 C++ 增量符号?

我该如何排版增量“+=”符号?它应该充当一种关系(如 =),但“+”和“=”之间不应该有多余的空格。

答案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{+=}以获得正确的间距。

答案4

\hspace根据您的喜好调整手动间距。

\documentclass{article}

\newcommand{\plusequals}{\mathrel{\mathord{+}\hspace*{-1pt}\mathord{=}}}

\begin{document}
$x \plusequals y$

$x = y$

$x + y$
\end{document}

在此处输入图片描述

相关内容