在逻辑中,模态通常用命题前的几何符号来表示,其中形状的选择很大程度上取决于传统。
amsfonts
并amssymb
提供各种符号,如\square
和\lozenge
,一开始看起来就很好。
然而,寻找更多符号似乎特别具有挑战性。由于模态通常是链接在一起的,因此视觉高度和笔划粗细应该大致相同才能很好地适应。我通过符号表进行了广泛的搜索,如果我没有遗漏任何东西,似乎没有一个圆圈符合标准。类似地,它们的\triangleleft
高度也不相同。
这些符号应该被当作\mathord
或视为微分符号d
(前面有一个细小的空格,后面没有空格)。下面是我手头正好有的一本书的例子。
目前我使用 TikZ 绘制符号。有没有更好的方法?
答案1
您可以使用logix
包。它需要 Unicode 引擎(lualatex 或 xelatex)。符号在数学和文本模式下均可用。
\documentclass{article}
\usepackage{logix}
\begin{document}
\FacNec\FacPos\FacNext\FacFutr\FacPast\FacCont\FacNonCont
\end{document}
根据该软件包,它们是为与 Stix 字体一起使用而设计的,因此如果 logix 字体与您使用的字体不匹配,您可以尝试将以下内容添加到序言中:
\setmainfont{STIX Two Text}
\setmathfont{STIX Two Math}
答案2
您已经有了一个很好的 LaTeX 答案,使用 logix 包及其特定字体(在排版逻辑方面,它确实似乎涵盖了很多内容)。我认为 ConTeXt lmtx 答案是有用途的,如果不是为了让更多人意识到为此类任务定义新数学类的可能性,并设置一致的间距。
如果我们context
在文件上运行
% \showglyphs
% \showmakeup[mathglue]
% \setupbodyfont[pagella]
\registerengineclass [modal] [MOD]
\setnewconstant \mathmodalcode \mathclassvalue modal
\copymathspacing \mathmodalcode \mathordinarycode
\Umathchardef \modalnecessary \mathmodalcode 0 "25A1
\Umathchardef \modalpossible \mathmodalcode 0 "25CA
\Umathchardef \modalnext \mathmodalcode 0 "25CB
\Umathchardef \modalleft \mathmodalcode 0 "22B2
\Umathchardef \modalright \mathmodalcode 0 "22B3
\Umathchardef \modalU \mathbinarycode 0 "1D4B0
\starttext
\startTEXpage[offset=1DK]
Some inline formulas:
\im {\modalnecessary _F(\varphi \rightarrow \psi ) \rightarrow (\modalnecessary _F \varphi \rightarrow \modalnecessary _F \psi)}
\im {\modalnext (\varphi \rightarrow \psi) \rightarrow (\modalnext \varphi \rightarrow \modalnext \psi)}
\im {\modalnext \neg\varphi \leftrightarrow \neg\modalnext \varphi}
\im {\varphi \modalU \psi \rightarrow \modalpossible_F \psi}
\im {\modalleft \psi \rightarrow \neg \modalright \varphi}
Changing the spacing:
\im{A\modalnecessary B \neq A \square B}
\inherited\setmathspacing \mathordinarycode \mathmodalcode \allsplitstyles \thinmuskip
\inherited\setmathspacing \mathordinarycode \mathmodalcode \allscriptstyles \pettymuskip
\im{A\modalnecessary B \neq A \square B}
\stopTEXpage
\stoptext
我们得到
有几条评论如下:
- 我不太了解模态逻辑,所以我不确定到底想要什么。
- 和
\startTEXpage
仅\stopTEXpage
用于为该示例提供一小页。
现在来看看重点部分:
- 并启动一个新的原子类。确保
\registerclass
默认情况下它获得与普通类相同的原子间间距。\setnewconstant
\copymathspacing
- 这些
\Umathchardef
行定义了具有新类的各种数学字符。注意:我只是随机选择了这些名字。\modalU
当然,modalbinary
如果需要的话,可以激发一个新的原子类,该原子类继承了二进制原子类的间距,并进行了修改。(也许它根本不应该有二进制运算符的间距?) - 然后只需在内联数学模式中设置公式即可(
\im
) - 在底部,我们展示了如何设置间距,以防有人真的想设置它。在这里,我们设置了普通类和新类之间的间距,我们对
\allsplitstyles
(所有非脚本样式)和\allscriptstyles
(所有脚本样式)都这样做,但可以更细粒度。
如果想要调试并更好地查看间距,可以取消注释前两行。
这种方法还可以根据需要切换字体。字体是否好看取决于字体。如果我们取消注释第三行,我们得到