我使用的是 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}$}}}