有人喜欢比例字体吗?[关闭]


51

我在阅读有关编程风格Wikipedia文章,并注意到反对垂直对齐的代码的某个论点:

依靠等宽字体;表格格式假定编辑器使用固定宽度的字体。大多数现代代码编辑器都支持比例字体,程序员可能更喜欢使用比例字体以提高可读性

老实说,我认为我从未见过喜欢使用比例字体的程序员。我也没有想到使用它们的任何真正好的理由。为什么有人会喜欢比例字体?


11
我喜欢按比例读取字体,但是我严格使用等宽字体作为代码。永远,永远,永远。
Frank Shearar 2010年

12
还要引用维基百科:[citation needed]:)
汉尼拔·莱克特博士

7
多年前,我在大学里的一位教授开玩笑地说:“……因为它不是编程语言,除非它是新语言。”
史蒂文·埃弗斯

12
我使用比例字体的原因非常简单。现在已经不是1980年代了。我们已经从角色终端前进了。出于可读性考虑,报纸,书籍和网站通常不使用等宽字体。我认为他们有一点。
Timwi

4
Verdana 11px很棒。
Czarek Tomczak 2012年

Answers:


47

评论反对比例字体的共同点。

  • 您无法使用比例字体在垂直方向上精确对齐代码。我的意思是,如果每个人都在使用弹性的制表位,则可以使代码与比例字体垂直对齐,但是...
  • 一些比例字体使区分某些字符组变得困难。(例如,mrnm)。但是,并不是所有的编程字体都完美无缺:Courier New具有相同的“ O”和“ 0”以及相同的“ 1”和“ l”。
  • 一些IDE对非固定宽度字体的支持不佳(例如上述 Visual Studio或Python的IDLE)。同样,在某些情况下,您将无法使用它。(例如终端。)
  • 选择比例字体进行编码将使您陷入无尽的圣战。但是,这里在键盘和椅子之间存在问题。

支持比例字体的要点

就个人而言,我一直很高兴地同时使用'Ubuntu'字体和WenQuanYi Zen Hei Mono,却发现自己无法与其他人相比。:)

的Ubuntu
文艺一禅黑
Ubuntu 10和WenQuanI Zen Hei Mono 9进行了比较。如果您问我,这里没有明确的赢家。

也就是说,字体就像食物。有些人喜欢将它们弄圆,有些则喜欢将它们麻辣烫-没有合适的字体,否则我们所有人现在都将使用它。可以选择!


我没有意识到Ubuntu字体已经发布。我认为它在那里很好用。
艾伦·皮尔斯

+1为我展示了WenQuanYi Zen Hei Mono,该字体非常了不起。我几乎肯定会在论文中使用它。取决于它看起来的印刷效果–在屏幕上看起来很棒,并且不会占据很多水平位置,这在印刷中非常重要。
Konrad Rudolph

9
确实,针对比例只有一个大胖点:您无法真正达成一致,因为没人在乎弹性的制表符。这是完全奇怪,因为它是如何有利于双方的等宽顽固派和那些究竟是谁喜欢读好看的可变宽度字体。来吧,世界!弹性挡片!
罗曼·斯塔科夫

7
@romkyns:采用不依赖于其他行对齐的缩进样式。简单。
Zan Lynx

4
@ZanLynx我这样做是因为我更喜欢比例字体,而不是在行首以外的其他地方垂直对齐。
罗曼·斯塔科夫

29

有一个原因使得实际上不可能使用等宽字体以外的字体进行编码,但是在其他答案中没有提到:矩形选择

此功能对于开发人员来说是必不可少的,它在使用普通文本时通常不是很有用,也不是很知名。您可能会想到多种情况:删除//多行注释,添加括号或其他字符等。在矩形选择的高级支持下,这尤其有价值,例如在Visual Studio 2010中,您不仅可以选择和删除文本,但选择并替换它。

让我们举个例子:

private IEnumerable<SELove> StackExchangeRocks()
{
    var howILoveSEWebsites = new []
    {
        new SELove { SiteName = "Stack Overflow", MyReputation = 5269,  MyRating = Rating.Outstanding, },
        new SELove { SiteName = "Programmers",    MyReputation = 16937, MyRating = Rating.Outstanding, },
        new SELove { SiteName = "Super User",     MyReputation = 650,   MyRating = Rating.QuiteGood,   },
        new SELove { SiteName = "Server Fault",   MyReputation = 489,   MyRating = Rating.Good,        },
        // Initialize other websites here.
    };

    return howILoveSEWebsites.OrderByDescending(c => c.MyRating);
}

private class SELove
{
    public string SiteName { get; set; }
    public int MyReputation { get; set; }
    public Rating MyRating { get; set; }
}

private enum Rating
{
    Outstanding,
    Good,
    QuiteGood,
}

在此旧代码中,我想用一种方法替换代码内评级,该方法将从Stack Exchange网站本身加载我的评级,从而始终拥有最新数据。我开始重构该MyReputation属性,现在我想删除范围内的初始化。想象一下,我没有四个,但是全部有84个SE网站。

这是使用等宽字体Consolas时发生的情况。我按Backspace键,仅此而已,我可以花剩余的时间做一些实际有用的事情。

该图显示,使用Consolas,矩形将选择信誉属性。

这里有同样的事情的Segoe UI。哎哟!

该图显示了使用Segoe UI时,仅部分选择了某些信誉属性,而在其他行上,则选择了等级开始属性。


9
发生这种情况是因为您使用的间距恰好与monspace字体匹配。如果您有适当的间距w / r / t比例字体,则不会有此问题。
科斯2012年

6
@Kos:因此,您不必按三个选项卡,而是按十五次空格键,而不是注意输入的内容过多并删除了最后一个空格?似乎有点太复杂了,您不觉得吗?
Arseni Mourzenko 2012年

6
Eclipse实际上支持在矩形选择模式下使用不同的字体,这使问题减少了。
尼古拉斯

8
@Kos RE:“适当的间距w / r / t比例字体”:但是,如果不同的程序员在同一文件上使用不同的字体,则不会对齐。如果所有编辑器都使用等宽字体,它将始终对齐(假设代码不会滥用制表符进行对齐)。
Max Nanasy 2014年

5
我使用了两年的比例字体,没有任何弹性的制表符。我不使用矩形选择,因为在大多数IDE中,有一些东西可以完全替代它:多插入符选择。在此示例中,我将选择“ MyReputation =”,然后在IntelliJ / JetBrains编辑器CTRL-D中的SublimeText和VSCode中使用“选择下一个出现项” ALT-J。接下来,SHIFT-CTRL-RIGHT ARROW将选择范围扩展到右侧的下一个标记并完成。主要优点是,无需人为对齐即可进行编辑。缺点,如果您将某些东西对齐,它将不再是。
2016年

15

我曾经使用比例字体,主要是因为我发现标点符号实际上更容易区分,但是随着时间的流逝,我已经放弃了,因为其他人都没有这样做,而且每个人都在不知不觉中采用了等宽字体(如Wikipedia文章所提到的,试图以表格形式格式,评论中的ascii艺术等)。

此外,Microsoft不想解决的Visual Studio问题基本上使使用反义字体的设计成为不可能。


9
喜欢与Microsoft就此错误发表评论的迷你战。他们的欢呼基本上是“嗨!谢谢!很高兴见到你!我们什么也不会做。好的,谢谢你与我聊天!” 试想一下,如果人们在现实生活中如此行事……
danio 2010年

2
您会表示同情,因为尽管出于您列举的某些原因我没有使用比例宽度的字体,但我内心的排版员一直渴望在设计和编程上都能获得适当的编辑器支持。
乔恩·普迪

很奇怪,我只是在想标点符号实际上很难区分(尤其是句号),因为它占用的空间较小。我还记得Notepad ++在最长的时间里在评论中使用Comic Sans MS。
DisgruntledGoat 2010年

6
如果发现很难在等宽字体中识别标点符号,则还有其他等宽字体-这并不意味着您需要使用比例字体。
没人在2010年

正是为了更好地标点,我有时用EnvyCode 一个
赞洛克

9

我个人不在乎。只要您使制表符保持对齐且字体清晰易读,就可以使用等宽,比例或其他一些墙外间距,这一点我都不在乎。只是不要开始用空格替换我的标签,并且您不会与我吵架。


3
我完全同意。使用制表符(与硬编码空格相对),您可以在等宽字体和比例字体之间切换,并相应地调整制表符宽度。不过,我还没有看到的是一个编辑器,您可以在其中设置以EM为单位的制表符宽度。
8月Karlstrom

6

我使用比例字体(Arial是到目前为止我发现的最好的字体,Verdana排名第二),老实说,我仍然对人们使用固定宽度字体感到困惑。您为什么要牺牲这样的可读性?我可以理解表格格式是否可取,但不是,因为它会造成维护的噩梦,而与字体无关。


4
我很惊讶您喜欢Arial和Verdana。我发现它们有点粗糙且不专业。您尝试过Calibri吗?
Timwi

2
我正在使用8pt Verdana。长标识符名称更易于阅读。我可以查看70行代码,而无需滚动,而且行也短得多,因此该代码是一栏狭窄的文字,就像在报纸上一样。这使我可以将编辑器的视图分为两个垂直列:在一个视图中查看声明,在另一个视图中编写代码。同样,在调试时,屏幕上充满了调试窗口,因此代码视图适合较小的空间。使用比例字体可以消除垂直对齐内容并将注释周围带有星号的ascii框的愿望。
Calmarius 2012年

2
我在使用Lucida Console字体的1920x1200监视器上以纵向模式旋转90°时在Visual Studio中看到147行代码。
zanlok '11

在Vim中有158行Monaco字体...我的屏幕甚至不是高清
Mark K Cowan

4

我记得在Bjarne Stroustrup的书《 C ++编程语言》中,使用了Propotianite间隔的字体作为代码。(我无法在网络上找到任何示例页面)

我不记得确切的原因,但认为他提到了这一点,并彼此变化(我认为C ++语言本身)作为新引进的那本书。

就个人而言,我更喜欢固定空间的。Consolas是我的最爱。


1
检查我的特别版的第5页:一般认为比例字体更适合于文本,使用它们可以减少不合逻辑的换行符,并且大多数人都习惯了。我觉得它很容易阅读。Stroustrup在此处提供代码,而不是尝试创建它,这可能会使情况有所不同。
David Thornley 2010年

4
@David,是的,他正在提供代码。但是,它是为“读取”而提出的,固定与比例之比的问题是针对“读取”代码,恕我直言。
Nivas 2010年

4

对于行数短且有很多开放空间的语言,我更喜欢等距字体。我发现在行长且语法密集的情况下,可变宽度字体可以提高可读性。

大多数比例字体的问题在于它们不是为编程而设计的。此页面显示了一些字体。

修整字体


4
无效链接到Google代码:(
Florian Castellane

2

Pharo之类的Smalltalk环境使用比例字体,并且由于语言风格,在那里看起来很好。但是在Go或其他类似Erlang或Python的C风格语言中,我更喜欢等宽字体。


2

我花了一些时间为Eclipse找到一种易读的好字体,在XP下我花了相当长的时间使用Verdana。Consolas解决了这一问题,因为它对于编程而言确实很棒。

这些是我的发现:

  • 大多数比例字体都是为散文而设计的,并且标点符号很少(反过来,通常是一个或很少两个字符)。C语言家族的标点符号很多,在我看来,这些标点符号看起来并不好看,而且比必需的更难阅读。
  • 可变长度字符表示行的长度不同。这使得几乎不可能猜测使用箭头按钮导航时光标将在何处结束。我发现这很烦人。
  • 垂直间距也很重要。通常,这不是很容易覆盖的东西,大多数比例字体之间的行距比我想要的要少。
  • 很少有IDE使用比例字体进行测试。这样可以留出一些细微的错误,例如将光标放置在错误的位置,错误地重绘字符等。

因此,我发现这对我来说不值得麻烦。


关于对齐方式和其他布局的注意事项:我已将Eclipse设置为在每次保存时自动格式化每个文件,因此所有花式布局都会自动重置。Eclipse使用制表符代替多个空格,即使使用比例字体也可以正确定位这些制表符。因此,格式化程序的布局可以相互重叠,但是我们使用的标准格式化程序配置没有这种布局。

我相信,在进行法医分析时,每次保存时对每个人实施自动格式化都会最大程度地减少源控制系统中的误报。


0

永远不会,因为等宽字体使我可以比较不同的属性。

相比:

name1 = [“威廉”,“莎士比亚”,1564,“肖像”]

name2 = [“ John”,“ Locke”,1632,“哲学”]

name3 = [“ Jonathan”,“ Littell”,1967,“ Prose”]

至:

name1=["William",  "Shakespear", 1564, "Peotry"     ]
name2=["John",     "Locke",      1632, "Philosophy" ]
name3=["Jonathan", "Littell",    1967, "Prose"      ]

比例字体不能将等效属性恰好一个放在另一个之上。


2
我很想知道这对您来说是什么环境。您可以同时使用带有比例和固定宽度字体的制表符来将它们按列排列。出现问题的地方是您使用空格而不是制表符。
temptar 2012年

2
@temptar:将“ iii12345”,“ AAA12345”和“ nnn12354”彼此相对。错误(“ 345”)更容易发现。您不能将制表符放在值的中间。
亚当·马坦

1
Python不建议使用@temptar制表符,并且它们的宽度在不同的编辑器中会有所不同,这可能导致代码未对齐。
亚当·马坦

2
@Adam Matan这就是为什么您不应该进行花式格式化的原因。
8月Karlstrom

0

虽然我确实觉得比例字体更漂亮,但在某些字体中(尤其是sans-serif字体),看不到“ I”和“ l”之间的区别。等等,我又给该变量命名了什么?


2
Verdana在我身上有衬线,以便于区分。
Calmarius 2012年

1
0和O是另一个主要问题。还有'vs`和。vs。有时&和$是个问题(在perl / php中令人担忧)但是,Verdana对于上述大多数功能都很好,尽管0时效果不佳。可悲的是,在带有混入邪恶空间的选项卡的现有项目中,我通常会放弃并使用Lucida Console。但是,如果您要询问变量命名,则说明您不是在使用现代代码完成功能,或者至少没有像应该那样使用复制/粘贴功能。
赞洛克

我知道TeX的“ Latin Modern Mono Prop”是一个比例明确的字体,它具有明确的0OollII,它是按比例隔开的“ Latin Modern Mono”的相对字体,绝对是为代码设计的(尽管对于打印不是屏幕,但我发现渲染有些模糊) 。标点符号仍然是一个问题,在代码恕我直言中其重要性的间距太小,并且产生了歧义,例如两个单引号与一个双引号:“ vs”,'' vs "
Beni Cherniavsky-Paskin
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.