为什么加粗时字体高度会改变?


9

真烦人...

当一行上的任何文本的表面更改为粗体时,行的高度将增加(我假设)单个像素。最好用图像显示:

在此处输入图片说明

为什么是这样?我该如何预防?


根据要求,平台上的信息:

  • 在AMD64上的Debian GNU / Linux SID(不稳定)
  • Emacs在XFCE 4.12上使用libgtk-3.so.0(gtk 3.14.5)

我在8pt,9pt,10pt和11pt尝试了以下字体:

  • DejaVu Sans Mono
  • 德贾武·桑斯(DejaVu Sans)
  • DejaVu Serif
  • Droid Sans Mono
  • 解放单声道

仅对于DejaVu Sans Mono和DejaVu Sans,并且仅在9pt和10pt,才会出现此问题。(上图显示DejaVu Sans Mono-9。)


2
您应该在放置空格之前先看一下defunexample的face属性,然后在defunexample之间放置一个空格后再在每个单词上查看。通过将光标置于所需的位置然后键入,可以完成此操作C-u C-x =。您可能会发现影响defun的人脸或影响示例的人脸具有与您看到的行为有关的不同属性-例如,除了前景的基本颜色以外。面部属性可以由用户自定义。
法律学家

您能否在问题中添加操作系统和窗口管理器,以及有关Emacs使用哪种GUI(例如Gtk2,Gtk3等)的一些信息?
lunaryorn 2015年

@lawlist:谢谢你。在空格处,它应用了font-lock-function-name-face,其高度没有指定(所以我认为是默认值吗?)。没有空格,就不会应用任何面孔(因此,我又想使用默认值吗?)在主题中将默认值设置为:height 90(9pt)。
edam 2015年

@lawlist:一些更多的研究....在主题,如果我删除/添加/删除/添加:weight boldfont-lock-function-name-face(并重新执行主题的custom-theme-set-faces命令),我能看到的高度defun由1px的换线!我认为,这绝对是导致它的大胆属性。
edam 2015年

根据您的评论,我的猜测是您选择的字体家族对于粗体属性具有不同的高度,因此除非您手动减小字体大小,否则就不能更改它-通过缓慢减小磅数来尝试和出错。或者,选择一个应用粗体时不会改变高度的族。由于各种与缓冲区中视觉效果相关的原因,我个人不再在任何自定义主题中使用粗体或下划线-当我为当前行创建下划线时,它会使用覆盖层。对于粗体,我只使用强烈的颜色,例如洋红色,黄色等
。–法律学家

Answers:


2

字体高度在DejaVu中在该点大小处会发生变化,因为两个普通字体和粗体字体之间的字体高度信息在应该相同时会有所不同。

我使用的DejaVu Sans Mono 10字体不会在普通和粗体之间更改字体高度。我在.emacs中将其设置为(set-frame-font "DejaVu Sans Mono-10")

因此,您可以通过(Emacs 25上的font-info)来比较“ DejaVu Sans 10”字体的信息:

(font-info "DejaVu Sans Mono-10")
["-unknown-DejaVu Sans Mono-normal-normal-normal-*-13-*-*-*-m-0-iso10646-1" 
"DejaVu Sans Mono:pixelsize=13:foundry=unknown:weight=normal:slant=normal:
width=normal:spacing=100:scalable=true" 13 17 0 0 0 8 13 4 8 8 
"/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf" (opentype ((DFLT ...) )))]

根据后续信息进行编辑:

在上面的字体信息中,我显示的字体高度为17,而您报告的高度为15(正常)或16(粗体)。在emacs 25中,在这3个0之后有其他字体信息,特别是字体下降为4。

尽管我在Emacs 24或25上使用DejaVu Sans Mono和Bold变体没有问题,但最简单的方法是使用不会改变普通和粗体之间的宽度(如font-info所示)的字体和大小或DejaVu以外的其他内容。

至于是什么原因造成的,它可能是您的一个库(我的gtk是libgtk-x11-2.0.so.0),但是我怀疑这将是这个特定的库。还怀疑它是ttf文件或软件包。Freetype渲染更有可能(我有libfreetype.so.6)。由于DejaVu的缩放比例与其他对您有用的字体的缩放比例一样,DejaVu编写方式所产生的计算错误会解释为什么这些字体在某些尺寸下会起作用,而在其他尺寸下无法起作用。

要验证问题是否是Emacs特有的,您可以打开两个终端窗口,一个带有粗体提示,另一个不带,并比较它们之间的行距。如果像Emacs这样不同,则这与渲染和/或字体有关。

如果您编译了emacs,则可能会发生某些情况。


DejaVu Sans Mono-9没用...(我正在使用BTW)。我将更新上面的描述...
edam

模式行字体是相同的。Mono 10表现出相同的行为,但8和11pr却没有!这与字体渲染和正常和粗体返回的不同行高有关。Emacs是否使用fontconfig?
edam 2015年

1
Emacs不使用fontconfig,在字形选择方面通常相当独特
wasamasa

(font-info "DejaVu Sans Mono-10")给我["-unknown-DejaVu Sans Mono-normal-normal-normal-*-13-*-*-*-m-0-iso10646-1" "DejaVu Sans Mono:pixelsize=13:foundry=unknown:weight=normal:slant=normal:width=normal:spacing=100:scalable=true" 13 15 0 0 0]。我也已经fonts-dejavu-core安装了,也ttf-dejavu-core。它们都提供了一个DejaVuSansMono.ttf(在不同的目录中,但是它们是相同的文件,因此我认为这并不重要)。我也Height: 98从脸上得到帮助(使用DajaVu Sans Mono-10时,会出现上述问题)。我愿意接受任何其他建议!:)
edam

请注意,您的某些字体信息参数是不同的。我有“ 13 17 ...”,而您有“ 13 15 ..”。而且,如果您获得功能字体帮助信息,您会看到第17个差(我)与15个差(您)是高度。因此,尝试将高度更改
rocky
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.