如何向 Windows 控制台添加其他字体?

如何向 Windows 控制台添加其他字体?

我发现在线指南说明您需要编辑注册表才能将新字体添加到命令提示符中的可用字体列表中:具体来说,您必须编辑注册表项:

  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont

通过添加带有键000000000等的字符串值,其值是字体的名称。我已经这样做了。我将字体名称添加到注册表中,如下面的屏幕截图所示,然后重新启动了计算机:

注册表编辑器

但是,我添加的字体没有显示在列表中。更具体地说,我添加了 Inconsolata 和 Source Code Pro。但我在可用字体列表中没有看到它们:

控制台字体

我错过了什么?我正在使用 Windows 10 版本 1803,内部版本 17134.165。

答案1

如何向您的Powershell(或CMD)控制台设置添加新字体?

首先要知道的是,不幸的是(!):

只有满足特定标准的字体才可以安装到控制台!

(看:这里这里这里


字体标准 + 解释
(目前情况尚不清楚。)

为了使字体在控制台中受支持,它们必须:

  1. 字体必须是固定间距字型。
  2. 字体不能是斜体字体。
  3. 如果是 TrueType 字体,则必须是FF_MODERN
  4. 如果不是 TrueType 字体,它必须包含OEM_CHARSET
  5. 字体不能有消极的 AC空格

这一切意味着什么? 其中大部分指标的定义这里,其中概述了用 C++ 描述字体的以下结构:

typedef struct tagLOGFONTA {
  LONG lfHeight;
  LONG lfWidth;
  LONG lfEscapement;
  LONG lfOrientation;
  LONG lfWeight;
  BYTE lfItalic;
  BYTE lfUnderline;
  BYTE lfStrikeOut;
  BYTE lfCharSet;
  BYTE lfOutPrecision;
  BYTE lfClipPrecision;
  BYTE lfQuality;
  BYTE lfPitchAndFamily;
  CHAR lfFaceName[LF_FACESIZE];
} LOGFONTA, *PLOGFONTA, *NPLOGFONTA, *LPLOGFONTA;
  1. 字体必须是固定间距的。字体的间距和字体系列由字段描述lfPitchAndFamily。两个低位指定字体的间距,可以是以下值之一:

    • DEFAULT_PITCH
    • FIXED_PITCH
    • VARIABLE_PITCH
  2. 字体不能是斜体。换句话说,该lfItalic字段必须设置为 false。

  3. 如果是 TrueType 字体, lfPitchAndFamily 字段必须包含FF_MODERN家庭,位于位 4 到位 7 中。FF_MODERN描述具有恒定笔画宽度的字体(即等宽字体),带或不带衬线。等宽字体字体通常都是现代的。异食癖,精英, 和快递新就是例子。

  4. 如果不是 TrueType 字体,其字符集必须包括OEM_CHARSET如结构lfCharSet中的字段所定义tagLOGFONTA。也就是说,字体需要的不仅仅是等宽字体。它还需要支持 OEM 代码页中的所有字符,即字符IBM437 (OEM United States)集的 437 个“OEM”字符,如下所述这里

  5. 字体不能有负片AC空格。字符的宽度由ABC 结构间距B是字符的宽度。A间距是在文本上留出多少空间左边字符,C间距是在正确的

    任何左侧或右侧有负边距的字符都是超大尺寸指定的网格/光栅。例如,具有重载的字体W需要比指定的 X 像素字符宽度更多的空间才能正确绘制字符。显然,具有超大字符的字体不是固定宽度的。


然而,有一种已知可用的字体,由于支持许多有用的字形和数学运算而被推荐,那就是似曾相识。不幸的是,它不是 Windows 的一部分标准字体选择 并且需要手动安装。

如果你需要的字体还没有TrueType字体文件(*.ttf) 或者 开放类型*.otf),您需要将 SFD 文件转换为 TTF(或 OTF)。为此,您可以使用FontForge导入SFD然后生成TTF。


使用以下方法安装 TTF 文件FontForge

  1. 安装FontForge(以下简称“FF”)
  2. 以管理员身份运行FF
  3. 下载 SFD 字体文件(例如: DejaVuSansMono.sfd
  4. 使用以下命令打开文件:File > Open然后单击“确定”。
  5. 使用以下命令生成 TTF:,File > Generate Fonts...然后
  6. 选择True Type在下拉菜单中,然后
  7. 取消选择Validate Before Saving选项并点击Generate
  8. 将生成的*.ttf文件拖到 Windows控制面板对于在以下位置找到的字体:(
    Control Panel\Appearance and Personalisation\Fonts或由: WIN+R和类型:%windir%\fonts

完成。新字体现在可立即在您的注册表中使用。


将新字体加载到控制台注册表中

打开 Powershell 控制台来Administrator执行此操作。

# All your available fonts are located here:
$T1key = 'HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Fonts'

# But your Console fonts are located here:
$T2key = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont'

# Check the correct name: 
Get-ItemProperty -Path $T1key | grep "DejaVu"
DejaVu Sans Mono (TrueType)     : DejaVuSansMono.ttf
# Note the correct spacing of the name and ignore the "(TrueType)" part

# Check what's already there:
Get-ItemProperty -Path $T2key

# To add more fonts, just add the new name like this: 
# - Add another 0 (zero) to the -Name parameter, for each new font
# So since there is already an item with two zeros, so we need 3 and 4 zeros...
#Set-ItemProperty -Path $key -Name '000' -Value 'Arial'     # Doesn't work!
#Set-ItemProperty -Path $key -Name '0000' -Value 'Calibri'  # Doesn't work!
Set-ItemProperty -Path $key -Name '00000' -Value 'DejaVu Sans Mono'

然而,您将看不到新的字体项目,直到

  1. 注册表已重新加载到内存中,因此唯一的方法是:
    • 重新启动计算机或
    • 重新开始Windows Explorer
  2. 重新启动 Powershell 控制台
  3. 向 Windows 提交错误报告Powershell 存储库 控制台存储库并要求他们:
    支持具有正确 Unicode 字形的适当字体。

享受许多新的和正确的字形!

例如,尝试5/8th box
[char]0x2585 # (U+2585)


附录:

描边宽度

“扩展笔画”对话框可让您控制扩展过程的各个方面。首先,您可以指定三种笔尖类型:

  • 圆形笔,默认为圆形,但可以变形为椭圆形
  • 矩形笔,默认为正方形,但可以转换成更传统的书法笔尖形状
  • 多边形笔——您可以绘制几乎任何凸多边形。

对于圆形和书法笔,您可以选择笔触宽度、如何绘制开放路径的末端以及当两个不具有相同斜率的样条线(或线)连接时路径的外观(即在角点处)。

相关内容