如何在数学模式下忽略字符之间的自动间距?

如何在数学模式下忽略字符之间的自动间距?

我意识到这是一个有点奇怪的要求。

我想在数学模式下排版一些字符(例如1 \land \lnot 2 \lor 3),并让它们以等距显示,而不是自动间距。默认情况下,此代码生成

您可以看到 就\lnot在 2 旁边。当多个数字在一起时,它们也彼此靠近。我怎样才能使它们均匀分布,以便字符之间没有区别?

答案1

这不是好的风格。自动间距应该是正确的量。但如果你真的想要它:一种方法是将所有内容置于自己的数学模式中:

\documentclass{article}

\begin{document}

$ 1 \land \lnot 2 \lor 3 $  % for comparision

$1$ $\land$ $\lnot$ $2$ $\lor$ $3$

\end{document}

结果

(我还将数字置于数学模式以确保始终使用正确的数学字体。但默认情况下这没有任何区别。)


$自动添加 s,您可以使用循环逐个读取每个数字、字符或宏。只需将多个数字组合在一起即可:

\documentclass{article}

\makeatletter
\newcommand\equspacedmath[1]{%
  \mbox{% to ensure text mode
    \@tfor\L:=#1\do{%
        $\L$\space
    }%
  }%
}
\makeatother

\begin{document}

\equspacedmath{1 \land \lnot 2 \lor 3}

\equspacedmath{1 \land \lnot {23} \lor 4}

$ \equspacedmath{1 \land \lnot 2 \lor 3} $

\[ \equspacedmath{1 \land \lnot {23} \lor 4} \]

\end{document}

答案2

\documentclass[a4paper]{article}

\makeatletter
\newcommand{\formula}[2][\the\thinmuskip]{%
  \hbox{$\thinmuskip=#1\relax\@formula#2\@endformula$}}
\def\@formula#1{%
  \def\@tempa{#1}
  \ifx\@tempa\@endformula
    \expandafter\relax
  \else
    \mathop{\kern0pt#1}
    \expandafter\@formula
  \fi}
\def\@endformula{\@endformula}
\makeatother

\begin{document}
\formula{1 \land \lnot 2 \lor {333}\lor A}
\end{document}

您必须将数字分组,以便将其作为一个单位;带有参数的命令(例如)也应放在括号中。您可以通过更改为其他单位值或为提供可选参数来\mathbf{x}设置不同的间距(我选择了通常的细间距):\the\thinmuskipmu\formula

\formula[6mu]{...}

间距将是默认值的两倍。

基本上,我们一次搜索一个标记并将其排版为 mathop:在两个连续的 mathop 原子之间 TeX 总是会留出\thinmuskip空格。

对于简单的公式,这可能就足够了;其他事情可以通过在部分中添加代码来容纳\else。不过,我只会在直接或逆波兰表示法中使用此约定。

答案3

插入一些空格

$ 1 \land {\lnot\,} 2 \lor 3 $ 


您可以定义\Lnot是否需要多次

在此处输入图片描述

答案4

您还可以使用包裹listings这应确保中间的间距不会缩小或拉伸:

在此处输入图片描述

\documentclass[border=2pt]{standalone}
\usepackage{xcolor}
\usepackage{listings}
\lstset{basicstyle=\ttfamily, mathescape=true}

\begin{document}
\lstinline{1 $\land$ $\lnot$ 2 $\lor$ 3}
\end{document}

相关内容