我意识到这是一个有点奇怪的要求。
我想在数学模式下排版一些字符(例如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\thinmuskip
mu
\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}