为什么 \twoheadleftarrow 和 \leftarrow 如此不同?

为什么 \twoheadleftarrow 和 \leftarrow 如此不同?

我想知道为什么\twoheadleftarrow下面代码中的看起来与如此不同(更糟糕)\leftarrow,虽然根据LaTeX符号列表,箭头应该具有相同的高度等。

output

\documentclass{article}

\usepackage{amssymb}
\usepackage{bm}
\usepackage{Sweave}
\usepackage{listings}

\lstset{
  language=R,
  basicstyle=\ttfamily,
  literate={<-}{{$\bm\leftarrow$}}2{<<-}{{$\bm\twoheadleftarrow$}}2
}

% undefine Sinput, and Soutput (due to missing 'lstrenewenvironment')
\expandafter\let\csname Sinput\endcsname\relax
\expandafter\let\csname endSinput\endcsname\relax
\expandafter\let\csname Soutput\endcsname\relax
\expandafter\let\csname endSoutput\endcsname\relax

\lstnewenvironment{Sinput}[1][]{#1}{}

\begin{document}
<<foo>>=
x <- 1
x <<- 1
@
\end{document}

答案1

您的最小示例本来可以更简单:-)

enter image description here

查看日志

\documentclass{article}

\usepackage{amssymb}


\begin{document}
\showoutput
$ a \leftarrow b $

$ x \mathrel{\leftarrow\mkern-14mu\leftarrow} y $

$c \twoheadleftarrow d $

\end{document}

您会看到单箭头来自原始 CM 字体,但双箭头来自 AMS 字体,并且箭头并不真正匹配。

您的选择是寻找具有匹配箭头的字体集,或者通过重复打印单箭头来伪造双箭头,如我的示例所示。一旦箭头匹配bmsweave包就可以完成它们的工作,但如果基本的底层箭头定义不匹配,bmsweave无法使它们匹配。

相关内容