编辑: 我知道这个问题已被标记为重复,但我链接到的问题对我来说没有解决方案(除非我遗漏了一些明显的东西,这很可能)。打印在纸上时效果非常明显。有人能建议我如何避免这个问题,并且仍然使用拉丁现代字体来处理非数学文本吗?我使用的是 pdfLaTeX。
我在使用暗示字形时遇到了问题。我使用的是拉丁现代字体,12pt 文档。组成箭头的水平线在中间有一个“凸起”。我在尝试弄清楚时发现了类似的问题,但打印后问题仍然存在。
\implies 和 \Longrightarrow 可能存在错误 - 中间有一个点
为了说明,这里有一张图片:
当我使用时,问题基本上消失了\scriptstyle
,但我宁愿不这样做。有什么想法吗?
\documentclass[12pt]{article}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{mathtools}
\begin{document}
$\implies$\par
$\scriptstyle \implies$
\end{document}
答案1
问题是这样的:(\Longrigtharrow
在其上\implies
定义)由来自不同字体的两个字符构建。
加长箭头的等号取自\textfont0
(普通文本字体),箭头(\Rightarrow
)取自\textfont2
(数学符号字体)。
当当前字体大小为 10pt 时,lmodern
定义\textfont0
为rm-lmr10
(前缀rm
表示 OT1 编码) 和\textfont2
和lmsy10
均正确。如果当前字体大小为 11pt,则字体为rm-lmr10 at 10.95pt
和lmsy10 at 10.95pt
,它们再次彼此一致。
问题出在 12pt 上:在这种情况下\textfont0
是rm-lmr12
,而\textfont2
是lmsy10 at 12pt
。问题就出在这里:笔触的粗细按比例缩放,\Rightarrow
但没有按比例缩放=
,差异很明显,尤其是在低分辨率下。
下面的图像是\mag=4000
通过输入编译pdftex
以4 倍放大率 ( ) 拍摄的
\mag=4000
\font\xy=lmsy10 at 12pt
\font\xz=rm-lmr12
\textfont2=\xy \textfont0=\xz
$\Longrightarrow$
\bye
并且差异不能归因于屏幕预览器的像素调整。
一种可能的解决方法是重新定义用于在当前字体大小超过 10pt 时\textfont0
使用缩放的字体,并使用 T1 作为文本字体的默认编码。rm-lmr10
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\makeatletter
% Load the OT1 definitions for lmodern
\input{ot1lmr.fd}
% Change the definition for \OT1/lmr/m/n/<size>
\DeclareFontShape{OT1}{lmr}{m}{n}%
{<-5.5> rm-lmr5 <5.5-6.5> rm-lmr6
<6.5-7.5> rm-lmr7 <7.5-8.5> rm-lmr8
<8.5-9.5> rm-lmr9 <9.5-> rm-lmr10
}{}
\makeatother
\begin{document}
\noindent
$\Longrightarrow$\\
The text font\\
is \expandafter\texttt\expandafter{\fontname\font}
\end{document}
答案2
包amsmath
用于\Longrightarrow
获取\Implies
符号。\Longrightarrow
和\Longleftarrow
由标准字体组成的符号(除非使用数学字体,其中包含符号的现成字形)。箭头取自\Rightarrow
和\Leftarrow
,等号=
用作延长,请参阅宏\Relbar
。在较大的字体大小下,线条不太匹配,如问题图像中所示。
一个简单的例子:
\documentclass{article}
\begin{document}
\Huge$\Longrightarrow$
\end{document}
以下重新实现\Longrightarrow
和\Longleftarrow
使用不同的方法来获得延长。不使用等号,而是将的左侧部分\Rightarrow
用作新宏的左侧部分\NewRelbar
,将的右侧部分\Leftarrow
用作的右侧部分\Leftbar
。等号的宽度太大,无法将延长完整地取出。此外,侧边距被保留,新符号可用于\Longrightarrow
和\Longleftarrow
。
实施和测试示例:
\documentclass{article}
% Save original macros
% --------------------
\usepackage{letltxmacro}
\LetLtxMacro\OriginalLongrightarrow\Longrightarrow
\LetLtxMacro\OriginalLongleftarrow\Longleftarrow
% Implement new macros
% --------------------
\usepackage{trimclip}
\DeclareRobustCommand\Longrightarrow{\NewRelbar\joinrel\Rightarrow}
\DeclareRobustCommand\Longleftarrow{\Leftarrow\joinrel\NewRelbar}
\makeatletter
\DeclareRobustCommand\NewRelbar{%
\mathrel{%
\mathpalette\@NewRelbar{}%
}%
}
\newcommand*\@NewRelbar[2]{%
% #1: math style
% #2: unused
\sbox0{$#1=$}%
\sbox2{$#1\Rightarrow\m@th$}%
\sbox4{$#1\Leftarrow\m@th$}%
\clipbox{0pt 0pt \dimexpr(\wd2-.6\wd0) 0pt}{\copy2}%
\kern-.2\wd0 %
\clipbox{\dimexpr(\wd4-.6\wd0) 0pt 0pt 0pt}{\copy4}%
}
\makeatother
% Testing
% -------
\usepackage{booktabs}
\usepackage{color}
\begin{document}
\Huge
\newcommand*{\Test}[1]{%
\color{red}%
$#1\OriginalLongrightarrow\OriginalLongleftarrow$&%
\color{blue}%
$#1\Longrightarrow\Longleftarrow$%
}
\begin{tabular}{cc}
\toprule
Original & New \\
\midrule
\Test{}\\
\Test\scriptstyle\\
\Test\scriptscriptstyle\\
\bottomrule
\end{tabular}
\end{document}
答案3
截至 2020 年,这是几十年前的技术债务之一,你可以通过加载来清除它unicode-math
。