LaTeX 遵循排版标准,能够很好地正确分隔关系符号(如“=”或“∈”)和运算符号(如“+”或“∧”)。例如,
$a + b = x + y$
LaTeX 在“=”周围添加了比“+”周围的更多空格,因此表达式被正确地解释为“(a+b)=(x+y)”,而不是“a+(b=x)+y”——这是没有意义的。请参阅 Downes 的 § 3.1简短数学指南。
不过,请考虑以下之间的关系和操作:命题涉及相等的。例如,我们想说a
和的相等意味着和b
的相等。直接写x
y
$a = b \Rightarrow x = y$
或者
$a = b \mathop{\Rightarrow} x = y$
会产生错误的间距,提示“a=(b⇒x)=y”。解决这个问题的一种方法可能是以某种方式在命题周围添加引号,以获得类似
"a = b" ⇒ "x = y"
但这个表达式看起来很混乱。当然,也可以手动添加/删除空格——但要添加多少呢?
概率公式中会出现更复杂的情况,例如,如果我们想说和相等的可能性a
与和b
相等的可能性一样大,或者考虑两者之和:x
y
$P(a = b) = P(x = y)$
$P(a = b) + P(x = y)$
我的问题有两个:
– 像这样的情况,排版规则是什么?
– LaTeX 用户(关心正确间距的人)如何解决这个问题?
我很高兴了解一致且优雅的解决方案。
干杯!
答案1
我对此事的(个人)看法
我不知道这方面的印刷规则,但我认为在关系或操作周围添加额外的空间之间命题非常有意义,因为它们在某种意义上处于不同的层次。所以我可能会在 中的箭头周围添加一些空间$a=b \Rightarrow x=y$
,我可能会对 做同样的事情a=b \land x=y
(尽管我可能不会在内联方程中做)。
不过,我不认为同样的道理也适用于概率,因为这些只是数字。我认为在“或”上添加额外的空格P(a=b) + P(x=y)$
是P(a=b) = P(x=y)$
不必要的,而且实际上有点不一致。你总是可以为了易读性而添加空格,但我看不出有任何语法上的理由。
关于implies
,\impliedby
和\iff
该amsmath
包(您可能已经在使用)实际上定义了宏\implies
,\iff
和\impliedby
作为的版本\Longrightarrow
,\Longleftrightarrow
和\Longleftarrow
在两侧插入一些额外的空格(尽管\iff
实际上没有也可以工作amsmath
)。您可以在这里看到它们的实际效果:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\[P \implies Q \iff R \impliedby S\]
\[P \Longrightarrow Q \Longleftrightarrow R \Longleftarrow S\]
\end{document}
这些命令分别定义为\DOTSB\;\Longrightarrow\;
、\DOTSB\;\Longleftrightarrow\;
和\DOTSB\;\Longleftarrow\;
。其中最重要的是\;
,插入一个\thickmuskip
并有效地将这些箭头周围的空间加倍。
\DOTSB
实际上不做任何事情;它只是一个标记,amsmath
告诉“魔法”\dots
这是一个二元运算符/关系。
如果你认为\implies
默认情况下 et al. 有点太长,你可以使用以下方法重新定义它们
\renewcommand\implies{\DOTSB\;\Rightarrow\;}
\renewcommand\impliedby{\DOTSB\;\Leftarrow\;}
\renewcommand\iff{\DOTSB\;\Leftrightarrow\;}
你也可以定义你喜欢的符号的版本,增加更多空间
\newcommand\metasomesymbol{\DOTSB\;<somesymbol>\;}
\DOTSB
如果您不使用\dots
并且确定永远不会使用,那么您可以忽略它,但始终如一地包含它需要相对较少的努力。
当然,每次添加一对也可以达到相同的效果\;
(只要没有\dots
around )。
建议
由于我(个人)认为所有这些额外的空间在内联方程式中实际上会相当令人不快,因此这里有一种方法可以定义仅在显示样式中获得额外空间的符号。我用它\mathchoice
来做这件事。关于它如何工作的解释可以在以下答案中找到:这个问题。
\documentclass{article}
\usepackage{amsmath}
\newcommand*\mathmeta[1]{\DOTSB\mathchoice{\;#1\;}{#1}{#1}{#1}}
\newcommand*\newmetasymbol[2]{\newcommand#1{\DOTSB\mathmeta{#2}}}
\newcommand*\renewmetasymbol[2]{\renewcommand#1{\DOTSB\mathmeta{#2}}}
\renewmetasymbol\implies{\Rightarrow}
\renewmetasymbol\impliedby{\Leftarrow}
\renewmetasymbol\iff{\Leftrightarrow}
\usepackage{amssymb}
\newmetasymbol\nimplies{\nRightarrow}
\newmetasymbol\nimpliedby{\nLeftarrow}
\newmetasymbol\niff{\nLeftrightarrow}
\begin{document}
This is an inline equation: $x=y \implies x^2=y^2 \iff y^2=x^2 \impliedby y=x$.
This is a displayed equation:
\[
x=y \implies x^2=y^2 \iff y^2=x^2 \impliedby y=x.
\]
Here are a few more symbols: $(x = y \mathmeta{\land} y = z) \implies x = z$, but
\[
(x = y \mathmeta{\lor} y = z) \nimplies x = z
\]
\end{document}