Put*_*6ER 5 winapi fonts fixed-width pycharm monospace
在第一次,我只想知道,为什么在Windows 10上的IDE PYCHARM中,当"仅显示等宽字体"选中时,许多字体将不会列在编辑器的字体选择对话框中[设置/编辑器/颜色和字体/ font],也是薄荷.
我不知道pycharm是怎么做的,但是mintty使用了win32 API"LOGFONT".
那么,Windows OS是如何知道字体是否是等宽的(固定宽度)?
ie:列出"源代码专业版","源代码专业版黑色/超轻/轻...不是;
列出了"fira代码",但fira代码轻/中/视网膜不是;
并且,如果"仅显示等宽",则不会列出其他一些等宽字体.
似乎pycharm只有在选中"show only monospced fonts"时才识别字体系列名称
在OSX(Mavericks)中,它有点复杂:如果选中'仅显示等宽字体',pycharm仍然可以获得姓氏,但是如果安装了粗糙加权字体版本,则无法知道哪个字体权重是默认的.
然后,我尝试修改一些字体,并顺便看一下原始字体的'file-info'字体伪造,但我不知道哪个部分真正影响WINDOWS或PYCHARM(IDEA/INTELIJ /由JDK实际上?)知道哪种字体是等宽的.
在"OS/2"部分中,检查了固定宽度/等宽/等宽的任何参数,但没有任何帮助,并且在windows中pycharm仍然无法检测到它们.
所以,最后,我真的很想知道,TTF文件或任何其他字体文件类型使用哪个参数告诉[windows/osx/mac os/linux]操作系统'我是等宽的'?
PyCharm就此而言,所有JetBrains IDEA套件都不使用字体标志来识别等宽字体.相反,他们使用以下算法确定字体是否为等宽字体:
'l'
,'W'
和' '
普通变异的字符在大小12相同的宽度?'l'
,'W'
和' '
大胆变异的字符相同的宽度在大小为12的常规变种?'l'
,'W'
和' '
斜体字符变体相同的宽度在大小为12的常规变种?'l'
,'W'
并' '
大胆,斜体字符变体宽度相同的常规变种在大小12?如果上面的任何宽度计算返回不一致的答案,则字体将被列为非等宽字体.
要解决此问题,您应该安装您尝试使用的字体的粗体变体.如果字体的粗体版本不可用,IntelliJ的字体渲染器将自动生成一个影响字符宽度的字体,因此会导致等宽检查失败.
来源:IntelliJ社区版源代码(摘录简短,并且根据Apache 2.0许可证而不是StackOverflow的CC-BY-SA许可证授权.)
private static int getFontWidth(Font font, int mask) {
int width = getCharWidth(font, ' ');
return width == getCharWidth(font, 'l')
&& width == getCharWidth(font, 'W') ? width : 0;
}
Run Code Online (Sandbox Code Playgroud)
在FontInfo
构造函数中.
int width = getFontWidth(font, Font.PLAIN);
if (!plainOnly) {
if (width != 0 && width != getFontWidth(font, Font.BOLD)) width = 0;
if (width != 0 && width != getFontWidth(font, Font.ITALIC)) width = 0;
if (width != 0 && width != getFontWidth(font, Font.BOLD | Font.ITALIC)) width = 0;
}
boolean isMonospaced = width > 0;
Run Code Online (Sandbox Code Playgroud)