Showing posts with label 字体. Show all posts
Showing posts with label 字体. Show all posts

Thursday, June 11, 2009

[Linux]字体配置

X下有两套字体系统:古老的X11 core font system 以及新的Xft and fontconfig.一般说来我们应该尽可能的使用后者.
  1. Xft是"X FreeType"的缩写。当Xft被使用的时候,字体是由使用这些字体的应用程序来渲染,而不是像在X11 core font system中那样由X server负责渲染.

    在xft中用fontconfig库来决定字体该如何渲染.它包括系统定义的配置/etc/fonts/fonts.conf 以及用户自定义配置~/.fonts.conf.

    如果要自己添加字体,可以把字体文件或目录添加到/usr/local/share/fonts/.网上教程之类的通常是这样做.不过你也可以直接添加到~/fonts/这个路径下,该路径被/etc/fonts/fonts.conf默认的访问.所以你只需要把新添加的字体拷到~/.fonts就好了.比如我就把windows下的C:\WINDOWS\Fonts的simsun.ttc以及simshei.ttf文件考到了上述目录下.这样我就可以在linux中使用windows下的宋体,新宋和黑体.

    字体描述:采用如下格式[2]:
    <family>-<size>:<name>=<value>...
    比如
    times-12:bold:slant=italic,oblique

    常用命令:
    • fc-list pattern 显示符合指定条件的可用字体.比如
      "fc-list ":lang=zh-CN" family style weight file"就显示所有系统中可用的简体中文字体的名称,式样,权重以及包含该字体的文件的完全路径.
    • fc-cache option 为fontconfig系统建立字体cache
      "fc-cache -fv"强制(f,force)建立cache(哪怕之前的还up-to-date),v是verbose
  2. X core font system

    字体描述: X logical font description (XLFD)[3][4].
    比如75-dpi, 12-point, Charter font的字体用XLFD格式描述出来便是:
    -bitstream-charter-medium-r-normal--12-120-75-75-p-68-iso8859-1

    常用命令:

    • xfontsel 选定并显示X字体的字符
    • xfd 显示指定X字体的字符
    • xlsfonts 输出匹配给定条件的X字体名称
    • mkfontdir 创建指定(默认当前)目录下X字体索引
    • mkfontscale 创建指定(默认当前)目录下矢量字体索引
参考
[1] Installing and Configuring Fonts
[2] An Xft Tutorial
[3] X Logical Font Description Conventions
[4] X logical font description -- wikipedia

Wednesday, April 15, 2009

[Emacs]调整字体

update @ 2009/6/09
对于最新的emacs 23版本,字体描述格式,已经从X Logical Font Description (XLFD)转变为更为简单的fontconfig方式.关于两种字体系统,可以参见本blog里这个帖子.不过为了向前兼容,XLFD依然被支持.比如同是描述13pt的Courier New字体,两种格式分别如下:
  •      XLFD: -*-Courier New-normal-r-*-*-13-*-*-*-c-*-iso8859-1
  •      Fontconfig: Courier New-13
在emacs 23里,set-default-font已经过时.实际如果在.emacs中使用了set-default-font,普通模式下emacs字体依然正确.但是如果是用daemon模式运行emacs23的client时候, client会不正常的设置字体.解决方法是在set-frame-font,或是使用default-frame-alist来添加字体, 如下
(add-to-list 'default-frame-alist '(font . "DejaVu Sans Mono-14"))
这样普通和daemon模式就都可以正确设置字体了.
对于emacs22以及更早版本的字体设置如下:
-------------------------------------------------------------------------------
说实话emacs里要调整个字体什么的还真挺麻烦的。一般的基于GUI的editor都比它来的简单直接。

1 关于Linux下的字体
使用xlsfonts来查看系统里有哪些字体
$xlsfonts
得到像如下格式的输出
-adobe-courier-medium-r-normal--17-120-100-100-m-100-iso8859-1
-dejavu-dejavu sans mono-medium-r-normal--0-0-0-0-c-0-iso8859-1
每一行都是一种系统支持的字体。每一行的格式参见 Font specification , 简单说来遵循“-maker-family-weight-slant-widthtype-style-pixels-height-horiz-vert-spacing-width-registry-encoding"这样的格式。需要特别指出的是pixels代表的是字体的高度(单位是像素),height代表的是字体在屏幕上的高度*10(单位是磅), pixels和height两个当中通常只指定一个值,另一个用*代替。另外我们注意到列出来的字体当中有些字段为0,这说明这些字体是矢量字体。对于这些字段我们使用的时候需要用数字或者*来替换。

可以通过xfd来预览你想尝试的字体, 比如
$xfd -fn "-dejavu-dejavu sans mono-medium-r-normal--16-*-*-*-c-*-iso8859-1"   


2 回到Emacs
可以通过M-x set-default-font 然后输入字体名称(如果不知道可以用tab来complete)来设置当前字体。如果需要固定下来,可以在~/.emacs当中加入:
(set-default-font "-dejavu-dejavu sans mono-medium-r-normal--16-*-*-*-m-*-iso8859-1")

需要额外指出的是,这里我设置成了dejavu的等宽字体。不过我发现使用了这种字体以后,line spacing显得过大了,所以可以用以下语句来调整:
(setq-default line-spacing 0)
另外我这里的emacs有一点小bug所以set-default-font以后会有好几秒钟的延迟,需要在~/.emacs开头加入
(modify-frame-parameters nil '((wait-for-wm . nil)))


3 几个字体设置的小tip
  • M-x describe-char 我们可以使用这个命令查看光标所在的字符采用的是什么字体。
  • M-x describe-fontset 这个命令用来查看各个字符集分别采用了什么字体。
  • 在*scratch* buffer中输入(frame-parameter nil 'font) 光标放在行末按C-x C-e就可以看到当前字体
  • Shift + MouseLeftClick可以出来字体选择对话框;
  • M-x describe-font可以查看当前字体描述
  • M-x set-default-font 可以看到可以选择的字体。
参考:
[1] http://www.linuxquestions.org/questions/linux-software-2/emacs-changing-default-font-size-and-font-type-489000/
[2] http://www.yuanma.org/data/2006/0503/article_355.htm
[3] http://www.gnu.org/software/emacs/windows/Fonts-and-text-translation.html