通常,Haskell 中的列表连接运算符在书中打印为重叠的双加号。
(在 ASCII 中它只是 ++)
我怎样才能在 Haskell 中排版这个符号(在数学模式之内或之外)?
还有哪些 Haskell 运算符可以在 LaTeX 中排版得更漂亮?
答案1
我找不到中的符号symbols
,但是定义起来很容易:
\newcommand\doubleplus{+\kern-1.3ex+\kern0.8ex}
\newcommand\mdoubleplus{\ensuremath{\mathbin{+\mkern-10mu+}}}
这产生了
如果您使用xelatex
或,lualatex
则unicode-math
只需写入 ⧺ (U+29FA DOUBLE PLUS) 或其别名 \doubleplus。这给出(使用 XITS 字体)
答案2
我不同意通常情况下,Haskell 中的列表连接运算符在书中打印为重叠的双加号,相反,大多数关于 Haskell 的手稿更喜欢使用 ASCII(有时是 monotype,有时带有额外的突出显示)来表示 Haskell 操作。例外通常是那些关注 Haskell 中方程推理的作者,他们受到 Bird-Meertens 形式主义的影响。
我认为,问题在于 Haskell 有很多多字符、非字母的中缀运算符。Haskell 98 报告有!!
、^^
、**
、==
、/=
、、、、和,其中只有少数明显对应于字形。自己编写可能会造成混淆:即使是相对明显的 到 ≡ 的映射也会引起混淆。在 Haskell 论文中,<=
失去将漂亮打印的代码映射到可以输入的内容的属性是一个非常严重的问题。在一本书的长度处理中,这个问题不那么严重,但它仍然存在。所以我建议使用类似>=
&&
||
>>
>>=
$!
==
铸造。
如果你真的想表示“++”,我发现 Caramdir 的解决方案将两条垂直线放得太近了。Gibbons (1994),Bird-Meertens 形式主义简介将线条分开得稍微宽一些,但更宽一些,三等分线的每个部分都相等,在我看来更具吸引力:
\documentclass{minimal}
\def\drawplusplus#1#2#3{\hbox to 0pt{\hbox to #1{\hfill\vrule height #3 depth
0pt width #2\hfill\vrule height #3 depth 0pt width #2\hfill
}}\vbox to #3{\vfill\hrule height #2 depth 0pt width
#1 \vfill}}
%Poor man's typography
\def\concat{\mathrel{\drawplusplus {12pt}{0.4pt}{5pt}}}
%It would be better to specify these in font-relative measures, but it
%probably doesn't scale anyway.
\begin{document}
\[x = y \concat z\]
\end{document}
答案3
这些可能有点明显,但->
作为 → (U+2192 向右箭头)、=>
作为 ⇒ (U+21D2 向右双箭头) 和<-
作为 ← (U+2190 向左箭头) 很好。
我觉得使用 Haskell 进行编程Graham Hutton 编写的这篇文章写得很好。你可以在这里找到一个例子:http://www.cs.nott.ac.uk/~gmh/solutions.pdf 也许它可以给你一些想法。
还有开源TeX,但我发现它的输出相当臃肿。
答案4
一个简单的解决方案是
\newcommand{\doubleplus}{\mathbin{{+}{+}}
使用\mathbin
它看起来像一个二元运算符。