作为综合的现有的符号集没有尽一切可能可能存在的符号,如果你不能很好地排版它,那么发明一个新符号就毫无乐趣了。
我知道的一个选项是以某种方式“组合”现有符号,例如负空间。所以我可以写类似的东西m \gg\!\!= k
,但这种技术有明显的局限性。
这里最好的方法是什么?(“停止无缘无故地编造新符号”是一个有效的答案。)
编辑:简单说一下,我真正感兴趣的是更好地显示排版源代码,特别是使写成多个 ASCII 字符的常用操作符看起来更像一个符号。这通常会导致其他程序员无法识别的符号,而负间距技术就足够了。正如在对 vanden 的回答的评论中提到的,我对更普遍的情况很好奇。
答案1
虽然我不会去定义全新的符号,但我确实偶尔会发现自己想要一些与标准符号略有不同的符号。我在讲课时遇到过这种情况:例如,我发现我希望 ⇔ 看起来更重要一些。对于这些情况,我使用 TikZ 重新绘制它:
\newcommand{\textIff}{\tikz \draw (-3ex,.25ex) -- (-.25ex,.25ex) (-3ex,-.25ex) -- (-.25ex,-.25ex) (-.5ex,.5ex) -- (0,0) -- (-.5ex,-.5ex) (-2.75ex,.5ex) -- (-3.25ex,0) -- (-2.75ex,-.5ex);\xspace}
\newcommand{\mathIff}{\mathrel{\textIff}}
\newcommand{\Iff}{\ifmmode\mathIff\else\textIff\fi\xspace}
我猜想使用 TikZ 而不是 MetaFont 是因为我已经知道如何将 TikZ 用于我的其他图表。
答案2
我正在努力避免引入 dontdothat 标签:-)
虽然确实有需要新标志的情况,但大多数地区似乎已经拥有了太多标志。发明新标志应该经过深思熟虑,因为这样做会给沟通带来新的障碍。
我认为我们应该能够在 TeX 及其朋友中引入新的符号(我们可以),但它应该足够困难以阻止轻浮的新奇事物。
如果一个人真的想要一个新的符号,而将现有的符号叠加在一起是不行的,那么元字体是为了。
答案3
我在这里使用 Gerold Meisinger 定义的 lst 环境:http://lambdor.net/?p=273
他使用listings
环境将标签的 Haskell 表示替换到代码中。请注意如何>>=
定义为>\!\!>\!\!=
\lstloadlanguages{Haskell}
\lstnewenvironment{HaskellCode}
{\lstset{}%
\csname lst@SetFirstLabel\endcsname}
{\csname lst@SaveFirstLabel\endcsname}
\lstset{
basicstyle=\small\ttfamily,
escapeinside={/+}{+/},
flexiblecolumns=false,
basewidth={0.5em,0.45em},
literate={+}{{$+$}}1 {/}{{$/$}}1 {*}{{$*$}}1
{=}{{$=$}}1 %{/=}{{$\neg$}}1
{>}{{$>$}}1 {<}{{$<$}}1 {\\}{{$\lambda$}}1
{++}{{$+\!\!\!+$}}1 {::}{{$:\!\!\!:$}}1
{\\\\}{{\char`\\\char`\\}}1
{->}{{$\rightarrow$}}2 {>=}{{$\geq$}}2 {<-}{{$\leftarrow$}}2
{<=}{{$\leq$}}2 {=>}{{$\Rightarrow$}}2
{\ .\ }{{$\circ$}}2 {(.)}{{($\circ$)}}2
{<<}{{$\ll$}}2 {>>}{{$\gg$}}2 {>>=}{{$>\!\!>\!\!=$}}2
{<<<}{{$\lll$}}2 {>>>}{{$\ggg$}}2 {-<}{{$\leftY$}}1 {^<<}{{$\hat{}\!\!\ll$}}2 {^>>}{{$\hat{}\!\!\gg$}}2
{|}{{$\mid$}}1
{undefined}{{$\bot$}}1
{not\ }{{$\neg$}}1
{`elem`}{{$\in$}}1
{forall}{{$\forall$}}1
}