我的书中大多数(但不是全部)数学模式的内容都包含清晰逻辑的术语和公式:
这些项是由常数递归构造的(例如0,1,2,真的,F,G,+,∈,或者,不是,...任意元数(包括 0)和变量(例如年代,X,是,……)使用术语对其他术语的应用(例如1+x,f(0,g(y)),x∈S, …)。
原子公式的形式为t₁ = t₂, 在哪里t₁和t₂是术语(例如3 = x+2,x∈S 且不为 false = true, …)。
这些公式是使用逻辑否定从原子公式递归构造的(¬)公式(例如¬(1=2+3),¬(f(x)=g(0,y)), …), 连词 (∧) 和析取 (∨) (例如v=2+x∧y+2=z,v=x∨y∈S=真,...)和变量绑定(例如∃ x:x+1=2,∀ x,y:x+y=y+x,{x|x+1>y}, …)。
(顺便说一句,所有术语都有排序,并且对术语和原子公式也施加了良好排序的条件。为了简单起见,我们在这里将其删除。)
现在,当我排版包含等式的公式时=和二元逻辑联结词∧和∨,我得到的距离是否违反直觉?例如,在 中v=x \land y=z
,左右 (LaTeX 中的二元运算符) 的距离\land
小于左右=
(LaTeX 中的关系),不是吗?
如果是这样,在我的设置中修复此问题最干净的方法是什么?我真的不知道,正在考虑类似的事情
\documentclass{article}
\newcommand{\formulaConjunction}{\mskip1.2mu plus.6mu minus.6mu\land\mskip1.2mu plus.6mu minus.6mu}
\newcommand{\formulaDisjunction}{\mskip1.2mu plus.6mu minus.6mu\lor\mskip1.2mu plus.6mu minus.6mu}
\newcommand{\memberOf}{\mathbin{\in}}
\begin{document}\noindent
\(v\memberOf S = \mathsf{true} \formulaConjunction y=f(z)\)\\
\(v=x+1 \formulaDisjunction y=z\)
\end{document}
这样,逻辑与和或连接词周围的距离就会变得比逻辑等号周围的距离稍大,而等号周围的距离就会变得比中缀运算符周围的距离稍大(例如+,∈),不是吗?然而,这对我来说似乎非常临时。在我以这种方式更改书中的数百个公式之前,是否存在任何潜在的陷阱?有没有更好的方法可以适用于所有 [pdf|xe|lua]latex ?我的猜测是,上述逻辑在某种程度上是标准的,所以一定有人已经做过这个(或至少是类似的)练习。
答案1
我了解到您希望更改 TeX 在某些类型的符号周围插入的空格量mathbin
——特别是\land
和\lor
,但可能还有其他一些符号。mathbin
对象默认的空格量(由参数控制\medmuskip
)4mu
在 PlainTeX 和我熟悉的所有 LaTeX 文档类中都是如此。您可能希望将其至少增加到6mu
或 7mu
。您可能会问,为什么不呢5mu
?因为这是的默认值\thickmuskip
,该参数控制状态为的对象周围的空格量mathrel
。
不幸的是,不同的数学类型或数学状态类别的数量非常有限,并且现有的类别都无法轻松满足您的排版需求。例如,您不想修改具有状态mathbin
和的对象的属性mathrel
,对吗?
不过,我建议您通过以下方式创建两个新的用户宏:
\newcommand\Nashland{{\mkern7mu{\land}\mkern7mu}}
\newcommand\Nashlor{{\mkern7mu{\lor}\mkern7mu}}
并使用\Nashland
and\Nashlor
代替\land
and \lor
。当然,此设置假设\Nashland
and\Nashlor
只会被具有数学状态的对象包围mathord
。那是您发布的示例中的情况就是如此。但是,我不知道这个假设是否始终有效。
另一条评论:你可能期待很多——而且很有可能太多了——如果您需要读者注意并充分理解 TeX 在各种数学对象周围放置的空格数量的细微差别的语义意义,请从您的读者那里获得。在“普通”(非纳什……)符号中,实际上没有语义mathbin
对象(例如+
和-
)和mathrel
对象(例如=
、>
和)周围的空格量具有重要意义<
。我非常确定,在诸如 和 之类的表达式中,可以切换\medmuskip
和的值,而不会对读者造成重大干扰(尽管很可能引起一些轻微的不适)。但在需要和的用例中,这是不允许的,不是吗?因此,我认为您最好明智地使用括号,而不要依赖读者真正理解空格量细微差异的语义意义。\thickmuskip
1+1<2+2
\Nashland
\Nashlor
这是 MWE(最小工作示例)。请注意,我不得不将\Nashland
和中涉及的空格数量设置\Nashlor
为一个惊人的数字10mu
,以确保读者别无选择,只能注意到 和 符号周围的空格数量必须具有非随机的语义含义\land
。\lor
好吧,您可能能够使用9mu
或8mu
来代替10mu
;我当然不会低于8mu
。
相比之下,使用括号则完全不需要注意空格数量的细微差别。括号确实会造成视觉混乱。但更糟糕的是:造成一些视觉混乱,还是冒着造成普遍混乱的风险?
\documentclass{article}
\usepackage{amsmath} % for 'gather*' env.
\newcommand{\true}{\mathsf{true}}
%\newcommand{\false}{\mathsf{false}} % not needed for this example
\newcommand\Nashland{{\mkern10mu{\land}\mkern10mu}}
\newcommand\Nashlor{{\mkern10mu{\lor}\mkern10mu}}
\begin{document}
Case 1: \texttt{\string\land} and \texttt{\string\lor}:
\begin{gather*}
v \in S = \true \land y=f(z) \\
v=x+1 \lor y=z
\end{gather*}
\medskip
Case 2: \texttt{\string\Nashland} and \texttt{\string\Nashlor}:
\begin{gather*}
v \in S = \true \Nashland y=f(z) \\
v=x+1 \Nashlor y=z
\end{gather*}
\medskip
Case 3: Parentheses alongside \texttt{\string\land} and \texttt{\string\lor}:
\begin{gather*}
(v \in S = \true) \land (y=f(z)) \\
(v=x+1) \lor (y=z)
\end{gather*}
\end{document}
答案2
=
您可能希望在选定的地方将和的性质更改\in
为二元运算而不是关系。
您可能需要其他符号。
\documentclass{article}
\newcommand{\true}{\mathsf{true}}
\newcommand{\false}{\mathsf{false}}
\newcommand{\logic}[1]{%
\begingroup
\expanded{\mathchardef\in = \the\numexpr\in-"1000}%
\mathcode`= = \numexpr\mathcode`=-"1000\relax
#1
\endgroup
}
\begin{document}
\[
\logic{v \in S = \true \land y=f(z)}
\]
\[
\logic{v=x+1 \lor y=z}
\]
\end{document}