背景

背景

(为了自己,我最后写了一段相当冗长的背景,所以你可以直接跳到问题以下。)

背景

TeX 或 LaTeX(我不知道哪个具体起什么作用)在数学模式下有三类用于自动间距的符号:

  • 一元运算符如余弦或者\mathop),后面跟着一个细跳过(\mskip\thinmuskip\,);
  • 二元运算符+或者×\mathbin)周围是中型箕斗(\mskip\medmuskip\:);
  • 二元关系如=或者\mathrel)周围是厚厚的横线(\mskip\thickmuskip\;)。

它没有专门的逻辑连接词类,例如或者。这些显然被视为二元运算符。这有时是有道理的,尤其是在编写关于逻辑本身,并定义它的语法,或者你正在考虑抽象公式,如。但是,我觉得它不适合工作逻辑(至少对我来说,逻辑更为常见),以及连接具体的大公式。例如,考虑排版公式 0 ≤  ∧  < n

\documentclass{minimal}
\usepackage{amsmath}
\begin{document}
\[ 0 \leq i          \land        i < n \] % spacing of an operator (default)
\[ 0 \leq i \mathrel{\land}       i < n \] % spacing of a relation
\[ 0 \leq i   \;\;\;{\land}\;\;\; i < n \] % thrice the spacing of a relation
\end{document}

\land 的不同间距(LaTeX 渲染)

我发现前两个渲染图很难读懂(在默认设置下,它们之间的区别对我来说太微妙了)。此外,第一个(当然)和第二个(可以说)也是概念上错了,因为它们破坏了层次结构:

  1. 运算符(构建更大的表达式),
  2. 关系(构建关于表达式的原子公式),
  3. 连词(构建更大的公式)。

例如第一个应该读作 0 ≤ ()< n我发现,为了让公式在我眼中足够易读,它需要的间距至少是关系的三倍。

我尝试过

为了解决这个问题,我想到最好的办法是:

% creates a length akin to \thinmuskip, \medmuskip, \thickmuskip, for logical connectives:
\newmuskip \verythickmuskip
\verythickmuskip = 3\thickmuskip % default value (for instance)

% provide a command akin to \mathop, \mathbin, \mathrel, for logical connectives:
\newcommand \verythickspace {\mskip\verythickmuskip}
\newcommand \mathlop[1] {\verythickspace#1\verythickspace}

% define large-spacing logical connectives, using capitalized names
% (we rather not override the existing names as it breaks many things):
\newcommand \ANDop {\mathord{\land}}
\newcommand \AND   {\mathlop{\ANDop}}
\newcommand \ORop {\mathord{\lor}}
\newcommand \OR   {\mathlop{\ORop}}
% etc.

问题在于,它\mathlop{…}只能拙劣地模仿内置符号类。它粗暴地在符号周围添加空格,而不考虑上下文,因此无法像内置类那样处理空格。这些都无法按预期工作:({\AND}禁用空格)、 (强制空格)等。无法通过应用等{}\AND{}再次更改类;特别是,无法只恢复符号而不保留空格。\mathbin\mathord

问题

有没有更好的方法可以做到这一点?可以\mathlop更好地实现吗?一些包是否已经为具有大间距的逻辑连接词提供了宏?

我看到包 amsmath 简单地定义\implies\;\Longrightarrow\;,所以也许确实没有更好的解决方案……

相关内容