哪些字体的每个字符的宽度相同?

平面设计 字体 等宽
2021-12-31 00:06:00

我想要一种所有字符都具有相同宽度的字体。

例如,在大多数字体中,aW都比 an 宽i……是否有任何字体的所有字符都一样宽?

3个回答

搜索什么

您正在寻找的字体样式是monospace维基百科解释得很好。

等宽字体,也称为固定间距、固定宽度或非比例字体,是一种字体,其字母和字符各自占据相同数量的水平空间。[...]

等宽字体的示例包括 Courier、Courier New、Lucida Console、Monaco 和 Consolas。[...]

无处不在的选择

如今,几乎每台计算机都有以下一种或两种字体:

康索拉斯

信使

字体有 2 个会影响字符间距的特性:widthkerning字距确定两个相邻字符何时可以重叠。例如,当您编写 AT 时,T 栏的最左边部分实际上可能位于 A 右分支的最低部分的左边。虽然固定宽度的字体可能允许字距调整,但很少出现这种情况。

无论如何,如果要选择固定宽度的字体,可以使用以下文本

  • IIIIIIIIIIII
  • 哈哈哈哈哈哈
  • 啊啊啊啊啊
  • 阿塔塔塔塔

并使用各种字体查看外观。如果前 2 行具有相同的长度,则它是固定宽度。如果最后 2 行的长度相同,则没有字距调整。即,您希望所有 4 行都具有相同的长度。

在 Windows 上的 Microsoft Word 2007 中,以下字体似乎是固定长度的,没有字距调整:

  • 巴塘车
  • 康索拉斯
  • 快递新
  • DFKai-SB
  • 豆屯车
  • 古林切
  • 贡萨切
  • 开缇
  • 露西达控制台
  • 刘明
  • 女士哥特式
  • 敏彻女士
  • NSimSun
  • 辛黑
  • 简体阿拉伯语固定
  • 模拟太阳
  • SimSun-ExtB

xlsfonts在使用 X Windows 系统时提供有关字体的信息(通常在 Linux 或类似系统上;几乎从不在 MSWindows 上)。它的-l-m选项显示几个字体度量,包括最小字符宽度和最大字符宽度。使用 shell 命令,可以比较这些宽度以检测固定宽度的字体。例如,xlsfonts -lm '*fang*'给出

  DIR  MIN  MAX EXIST DFLT PROP ASC DESC NAME
  --> * 33 *119  some 8481   25  10    1 -isas-fangsong ti-medium-r-normal--0-0-72-72-c-0-gb2312.1980-0
       min(l,r,w,a,d) = (0,12,12,11,2)
       max(l,r,w,a,d) = (0,12,12,11,2)
  --> * 33 *119  some 8481   21  14    2 -isas-fangsong ti-medium-r-normal--16-160-72-72-c-160-gb2312.1980-0
       min(l,r,w,a,d) = ( 0, 0,16, 0,-13)
       max(l,r,w,a,d) = (12,16,16,14,  2)

对于这两种字体,最小 w 等于最大 w 值——一个是 12、12,另一个是 16、16——表明它们都是固定宽度的字体。(注意,xlsfonts源代码包含类似的检查。)

从我最近在 usenet 上的一篇文章中,这是一个checkFixed.py自动化比较的 Python 程序。它从 中读取 xlsfonts 样式的数据行,比较 w 值,并在 min w 等于 max w 时stdin打印结果。stdout(当然类似的程序可以写成awk,perl等)

 #!/usr/bin/env python
 # jiw - 2016
 # This program reads `xlsfonts -lm`-style lines from stdin, and tests
 # for cases where the w elements of min and max tuples are the same
 from sys import stdout
 while True:
     try:
         r = raw_input()
         if r[0] == '-':         # Font-lines start with -->
             m1 = int((raw_input().split(','))[6])
             m2 = int((raw_input().split(','))[6]) 
             if m1==m2:
                 print r
                 stdout.flush()
     except:
         break

比如 xlsfonts -ml | ./checkFixed.py | head -3在我的系统上打印出来

 -->    0  255  some    0   29  14    5 -bitstream-courier 10 pitch-bold-i-normal--0-0-0-0-m-0-adobe-standard
 -->    0  255  some    0   29  15    5 -bitstream-courier 10 pitch-bold-i-normal--0-0-0-0-m-0-ascii-0
 --> *  0 *255  some    0   29  15    5 -bitstream-courier 10 pitch-bold-i-normal--0-0-0-0-m-0-iso10646-1

在另一个例子中,xlsfonts -ml '*fixed*' | ./checkFixed.py | head -3打印出来

 --> * 33 *116  some 8481   25  11    1 -jis-fixed-medium-r-normal--0-0-75-75-c-0-jisx0208.1983-0
 --> * 33 *116  some 8481   21  14    2 -jis-fixed-medium-r-normal--16-150-75-75-c-160-jisx0208.1983-0
 --> * 33 *116  some 8481   21  14    2 -jis-fixed-medium-r-normal--16-150-75-75-c-160-jisx0208.1983-0