双重嵌套的逻辑与和逻辑或符号?

双重嵌套的逻辑与和逻辑或符号?

我正在排版一堆源代码,我非常喜欢双嵌套逻辑与和逻辑或符号表示按位逻辑与/或的方式。

不幸的是,LaTeX 似乎没有这些符号,因此我只能自己动手,使用\land\lor仔细旋转并对齐规则的组合。在我看来,10pt 的结果是可以接受的,但由于几个原因,规则的放置很不稳定。放大后的效果如下:

主滚动双重嵌套逻辑与和逻辑或

它们脆弱的第一个原因是因为(违背我的判断,但不知道更好的方法),我对间距做出了假设:

\newcommand{\bland}{% bitwise logical and
  \hbox{%
    $\land$%
    \hspace{-.47em}%
    \raisebox{-.04em}{%
      \rotatebox{66}{%
        \vrule width .3em height .45pt depth 0pt%
      }%
      \hspace{.065em}%
      \rotatebox{-66}{%
        \hspace{-.3em}%
        \vrule width .3em height .45pt depth 0pt%
      }%
    }%
    \hspace{.20em}%
  }%
}

因此,当以较小的尺寸显示时(例如,堆叠在顶部=或上方时\Leftarrow),内部线条会出现轻微但明显的偏差。

第二个原因更加隐蔽,似乎与 PDF 转换或显示中的舍入误差有关:内楔在各种尺寸下“摆动”半个像素左右(与外楔相比)。

我想知道这里最好的解决方案是什么。我并不反对(理论上)深入研究 XeLaTeX 来了解它的外观U+2A53U+2A54效果,但如果可能的话,我更愿意避免对 XeTeX/XeLaTeX 的依赖。另外,我尝试的第一件事是将 a 嵌套\tiny\land在 a 中\land,但笔触的斜率不同。基本上我需要具有相同斜率和厚度的东西,如果它们有圆边就更好了,但我没有 TeXpertise 来实现这一点。

以下是符号在更常规大小下的样子(第一行是常规布尔逻辑运算符;第二行是按位布尔运算符):

示例代码

顺便说一句,我确实在标准 LaTeX 包中遇到了双重嵌套的小于和大于,我想我可以或许使用——如果我将它们旋转 90 度——但我遇到的问题是它们会覆盖/重新定义\ll\gg而不是添加新的控制序列,而我在其他地方想要使用真正的\ll\gg

答案1

您无需加载mathabx包即可使用一个符号:只需加载必要的字体并查阅包以了解对应的插槽\lll;事实证明字体是matha,插槽是"CE

\usepackage{graphicx}

\DeclareFontFamily{U}{matha}{\hyphenchar\font45}
\DeclareFontShape{U}{matha}{m}{n}{
      <5> <6> <7> <8> <9> <10> gen * matha
      <10.95> matha10 <12> <14.4> <17.28> <20.74> <24.88> matha12
      }{}

\newcommand{\bland}{\mathbin{
  \raisebox{.1ex}{%
    \rotatebox[origin=c]{-90}{\usefont{U}{matha}{m}{n}\symbol{\string"CE}}}}}
\newcommand{\blor}{\mathbin{
  \raisebox{.1ex}{%
    \rotatebox[origin=c]{90}{\usefont{U}{matha}{m}{n}\symbol{\string"CE}}}}}

在此处输入图片描述

如果在下标和上标中也需要这些符号,则需要做更多工作。可能的定义是

\usepackage{graphicx}

\DeclareFontFamily{U}{matha}{\hyphenchar\font45}
\DeclareFontShape{U}{matha}{m}{n}{
      <5> <6> <7> <8> <9> <10> gen * matha
      <10.95> matha10 <12> <14.4> <17.28> <20.74> <24.88> matha12
      }{}

\makeatletter
\newcommand{\blandor}[1]{\mathbin{\@blandor{#1}}}
\newcommand{\@blandor}[1]{\mathchoice
  {\@@blandor{#1}{\tf@size}}
  {\@@blandor{#1}{\tf@size}}
  {\@@blandor{#1}{\sf@size}}
  {\@@blandor{#1}{\ssf@size}}
}
\newcommand{\@@blandor}[2]{%
    \raisebox{.1ex}{\rotatebox[origin=c]{#1}{%
      \fontsize{#2}{#2}\usefont{U}{matha}{m}{n}\symbol{\string"CE}}}%
}
\makeatother
\newcommand{\bland}{\blandor{-90}}
\newcommand{\blor}{\blandor{90}}

相关内容