在谢克特的经典和非经典逻辑中,他通过用运算符号圈起来的方式,将语义层面的符号与句法层面的符号区分开来。例如,形式逻辑使用“∧”( ) 表示合取,而语义逻辑使用带圆圈的版本,可以通过以下方式\wedge
实现\owedge
包裹stmaryrd
:
\rightarrow
但蕴涵(“→”, )和否定(“¬”, )对应的语义运算\neg
符在通常的符号。如何生成这些内容以便能够从 LyX 中使用?
答案1
就我个人而言,我将所有数学宏保存在一个单独的 LyX 文件中,然后我可以从其他 LyX 文档中包含该文件(通过“插入”>“文件”>“子文档”)。解决方案需要将一些 LaTeX 代码放在 LyX 序言中(因为 LyX 宏无法处理\mathpalette
宏的结构)。因此,我还为序言代码准备了一个单独的 LaTeX 文件,然后我可以\input{…}
在子 LyX 文档和父 LyX 文档的“LaTeX 序言”设置中使用它。
在 中math-macros-preamble.tex
,我放置:
\newcommand{\semanticlogic}[2]{\ooalign{$\m@th#1\ocircle$\cr\scalebox{0.9}[1]{$\m@th#1#2$}\cr}}
\newcommand{\encircled}[1]{\mathpalette\semanticlogic{#1}}
\semanticlogic
是一个宏,其参数为 (1) 样式宏(由 提供\mathpalette
)和 (2) 要包围的运算符。该\encircled
宏会进行包装\mathpalette
,因此很容易在 LyX 宏中使用。
在 中math-macros.lyx
,我\input{math-macros-preamble}
向其前言中添加内容,然后从 定义一个宏\newcommand{\oimplies}{\mathbin{\encircled{\shortrightarrow}}}
,为其提供 LyX 表示,如\mathbin{$\ocircle\shortrightarrow$}
,以便在内联到父文档时看起来更美观。同样,我创建\onot
为\encircled{\mkern1mu \neg}
。
在父文档中,我使用逻辑运算符,也添加到它的序言中,并将其作为子文档\input{math-macros-preamble}
包含。math-macros.lyx
答案2
圆圈稍微粗了一点,但我相信模拟是可以通过的。
\documentclass{article}
\usepackage{amsmath,stmaryrd,graphicx}
\makeatletter
\newcommand{\orightarrow}{\mathrel{\mathpalette\math@circled\rightarrow}}
\newcommand{\oleftarrow}{\mathrel{\mathpalette\math@circled\leftarrow}}
\newcommand{\olnot}{\mathord{\mathpalette\math@circled\lnot}}
\newcommand{\math@circled}[2]{%
\begingroup
\sbox0{$\m@th#1\owedge$}%
\sbox2{$\m@th#1\mskip1mu$}%
\raisebox{\wd2}{%
\resizebox{\wd\z@}{!}{%
\ooalign{$\m@th#1\varbigcirc$\cr\hidewidth$\m@th#1#2$\hidewidth\cr}%
}%
}%
\endgroup
}
\makeatother
\begin{document}
$X\orightarrow Y\owedge \olnot Z\oleftarrow U$
{\ooalign{$\orightarrow$\cr$\owedge$\cr}}
\end{document}
第二行表示符号具有相同的尺寸。
我不知道您是否可以将其与 LyX 一起使用。