字符串符号的连接

字符串符号的连接

在他 1989 年的作品中免费定理!(doi:10.1145/99370.99404预印本.dvi) 论文中,Wadler 将连接运算排版为两个“加号”折叠起来: 在此处输入图片描述

我问write-math.com解毒命名这个操作符但没有成功,除了一个不太优雅的解决方案之外找不到任何东西,这个解决方案是由博客,其内容是定义

\newcommand{\concat}{\ensuremath{+\!\!\!\!+\,}}

这个运算符是否在我不知道的包中定义,这个符号没有使用根本

答案1

我认为将两个加号部分叠加的想法并没有什么不好。我以前从未见过这样的符号,但做对并不难,而你找到的宏则不然。

\documentclass{article}
\usepackage{amsmath}

\newcommand{\concat}{%
  \mathbin{{+}\mspace{-8mu}{+}}%
}

\newcommand{\starop}[1]{\mathop{#1^*}}

\begin{document}

\begin{gather*}
({\concat}): \forall X.\ X^* \to X^* \to X^* \\
\starop{a}(xs\concat_{A} ys)=(\starop{a} xs)\concat_{A'}(\starop{a} ys)
\end{gather*}

\end{document}

在此处输入图片描述

与原文对比:

在此处输入图片描述

它们似乎只是为了在我的输出中更好地留出空间而有所不同。;-)也许垂直条之间的距离略有不同,请调整以适应。

是的,从我转换成 PDF 的 DVI 文件来看,原文使用了两个加号。

替代版本

您可能更喜欢不同的符号,与标准加号一样高和宽。

使用颜色是为了精确显示两个符号具有相同的宽度(红色或黑色不会溢出)。再次调整垂直条之间的距离以适应。

\documentclass{article}
\usepackage{amsmath,pict2e,color}

\makeatletter
\newcommand{\concat}{\mathbin{\mathpalette\conc@t\relax}}
\newcommand{\conc@t}[2]{%
  \vcenter{\hbox{%
    \sbox\z@{$\m@th#1-$}%
    \setlength{\unitlength}{\wd\z@}%
    \begin{picture}(1,1)
    \roundcap
    \put(0.1,0.5){\line(1,0){0.8}}
    \put(0.35,0.1){\line(0,1){0.8}}
    \put(0.65,0.1){\line(0,1){0.8}}
    \end{picture}%
  }}%
}
\makeatother

\newcommand{\starop}[1]{\mathop{#1^*}}

\begin{document}

\begin{gather*}
\rlap{\color{red}$+$}{\concat}{\concat}\llap{\color{red}$+$}\\
\rlap{\color{red}$\concat$}{+}{+}\llap{\color{red}$\concat$}\\
{+}{\concat}\quad a_{\concat_{\concat}}\\
{+}\\
{\concat}\\
({\concat}): \forall X.\ X^* \to X^* \to X^* \\
\starop{a}(xs\concat_{A} ys)=(\starop{a} xs)\concat_{A'}(\starop{a} ys)
\end{gather*}

\end{document}

在此处输入图片描述

答案2

例如,尝试+\kern -0.4em+的值-0.4em提供了一些不错的外观,但是当然可以改变。

\documentclass[a4paper,10pt]{article}    
\usepackage{amsmath}

\DeclareMathOperator{\dplus}{+\kern -0.4em+}

\begin{document}
$ z_a \dplus z_b $
\end{document}

在此处输入图片描述

答案3

我认为二进制符号与另一个二进制符号正确对齐很重要。一个明显的解决方法是使用\scalebox和兄弟,但如果有人想展示的话,我会把它们留给另一个答案。这是一个(令人惊讶地)有效的版本。

我从 egreg 复制了代码:)

\documentclass{scrartcl}

\usepackage{mathtools,calc}

\makeatletter
\newcommand*\concat
  {\mathbin{\mathmakebox[\widthof{${+}\m@th$}]{+\hskip-1emplus1fil+}}}
\newcommand*\starop[1]{\mathop{#1^*}}
\makeatother

\begin{document}

\begin{gather*}
({\concat})\colon \forall X.\ X^* \to X^* \to X^* \\
\starop{a}(xs\concat_{A} ys)=(\starop{a} xs)\concat_{A'}(\starop{a} ys)
\end{gather*}

\begin{align*}
  a + b + c + d \\
  a \concat b \concat c \concat d
\end{align*}

\end{document}

在此处输入图片描述

相关内容