\Longrightarrow 在 12pt 中看起来不太好

\Longrightarrow 在 12pt 中看起来不太好

我使用的是 12pt 的标准 CM 字体(如果相关的话,还有 amsmath)。我的问题是它\Longrightarrow给出了类似这样的输出,我觉得有点烦人。我知道这是一个组合符号,但在 10pt 和 11pt 中它看起来很完美,那么为什么它在 12pt 中也不起作用呢?

顺便说一下,我是通过\Huge\Longrightarrow输入mathurl.com,所以它不是我的 TeX 系统的产物(它告诉我们 mathurl 使用 12pt ...)。此外,它不只是屏幕上的东西,我还在打印输出上看到了它(我不知道排版时使用的是哪个 LaTeX 发行版)。

我想我很久以前还在使用 LaTeX 2.09 的时候第一次见到过这个!

答案1

(以 CW 身份发帖,因为我不喜欢将我的 Google Fu 的好成​​绩归功于自己)

黑客攻击发生在http://programming.itags.org/tex/124077/\Longrightarrow在这里,您可以使用 而不是符号cmr12的版本(适当缩放的版本)来重新实现 的构造。这样, 就会像 10 pt 版本一样,但更大。以下是 Ulrike Fischer 在该线程中提供的示例。=cmr10\Longrightarrow

\documentclass[12pt]{article}
\DeclareFontFamily{OT1}{cmrx}{}
\DeclareFontShape{OT1}{cmrx}{m}{n}{<->cmr10}{}
\begin{document}\pagestyle{empty}
$\Longrightarrow$

%Redefine \Longrightarrow as the following to get the 'fixed' version
$\mathrel{%
  \mbox{\fontfamily{cmrx}\fontencoding{OT1}\selectfont=}}%
\joinrel\Rightarrow$

\end{document}

上述解决方案的缺点是,将其用作现有文件的补丁是危险的:修复的\Longrightarrow轻微地比原始版本更长,因此这可能会影响换行符。以下版本没有此缺点:

\documentclass[12pt]{article}
\DeclareFontFamily{OT1}{cmrx}{}
\DeclareFontShape{OT1}{cmrx}{m}{n}{<->cmr10}{}
\let\saveLongrightarrow\Longrightarrow
\makeatletter
\renewcommand*{\Longrightarrow}{%
    \mathrel{\rlap{\fontfamily{cmrx}\fontencoding{OT1}\selectfont=}%
    \hphantom{\saveLongrightarrow}%
    \llap{$\m@th\Rightarrow$}}}
\makeatother
\begin{document}
$a\saveLongrightarrow b$

$a\Longrightarrow b$
\end{document}

答案2

问题是,虽然存在cmr12字体(pdflatex 使用),但没有cmsy12,因此cmsy10将其缩放到 12pt 以使其匹配。不幸的是,计算机现代字体的 10pt 和 12pt 版本之间存在细微的差异(metafont 参数设置略有不同),不匹配的结果就是您所看到的效果。

附注:当你放大很多时,你会看到实际的差异很小,但是由于两种字体使用不同的抗锯齿|提示,效果变得更糟。

我能想到的唯一“解决方案”是修补 ot1cmr.fd 文件,以便使用它cmr10而不是cmr12,但也许 LaTeX 专家会知道更好的方法。

答案3

另一个虚假解决方案:使用 tikz 为您绘制箭头:

\usepackage{tikz}

\newcommand{\tikzLongrightarrow}{%
 \mathbin{\tikz{\draw[arrows={-latex},line width=1.2pt,double=white] (0,0) -- (3em,0);}}
}
\let\oldLongrightarrow=\Longrightarrow
\def\Longrightarrow{\tikzLongrightarrow}

一个缺点是 tikz 包含的内容太多,仅针对一个符号而言。如果您已经包含 tikz,则不是问题。另一个缺点是,需要做更多工作才能使其看起来像常规的\Longrightarrow

答案4

好的,我设法想出了一些可行的办法。这个想法是\textcolor{white}xcolor包中使用,类似于我不太好的方法降低 \widetilde。代码如下:

\makeatletter
\newcommand{\myRelbar}{%
    {\Rightarrow}%
    \llap{\textcolor{white}{\rule[-0.2ex]{1.1ex}{2ex}}}%
    \kern-1.5ex}
\let\saveLongrightarrow\Longrightarrow
\renewcommand{\Longrightarrow}{%
    \mathrel{\rlap{$\m@th\myRelbar\myRelbar$}%
    \phantom{{\saveLongrightarrow}}%
    \llap{$\m@th\Rightarrow$}}}
\makeatother

问题是 LaTeX 的大小\Relbar刚好是=,而且 12pt 的水平线太靠近彼此。因此,我\myRelbar通过\Rightarrow用白色框截断箭头来构造。这不够长,所以我截取了两个。

我尝试了第二个版本,它使用了软件包\scalebox中的graphicx功能。我强烈反对使用此版本;这只是基于我与 Taco Hoekwater 的简短讨论的尝试,它表明 Taco 是对的:缩放会让它变得更好,但它仍然不完美。

\Relbar\joinrel\mathrel{\raisebox{0.024ex}{\scalebox{0.956}{${\Rightarrow}$}}}

相关内容