JuliaMono-一种用于科学和技术计算的等宽字体

2020-10-11 16:03:16

JuliaMono是一种等宽字体,设计用于在Julia编程语言和其他文本编辑环境中进行编程,这些环境需要广泛的专业和技术Unicode字符。

本站点对所有文本都使用JuliaMono;如果您的浏览器不能[4](或者您不允许)下载和显示Web字体,您将只能在图像中看到该字体。下载字体后,您将在此处看到熟悉的三个点的形状:

()以下示例将由您的浏览器以juliamono呈现(如果它已成功下载Web字体版本),所以我希望您在这里看到的内容与我所做的接近。

应用于以下代码的CSS标记使用字体的两个粗细JuliaMono-Regular和JuliaMono-Medium,后者稍粗:

使用zygote:@adjointfunction忽略(F)尝试返回f()catch e;返回0;endend@adjoint函数忽略(F)尝试zygote._̄(__CONTEXT__,f)捕获e 0,y CONTEXT->;NOT ENDEND。

JuliaMono有不同的权重,因此您可以控制突出显示代码中的对比度:JuliaMono-Regular、JuliaMono-Medium、JuliaMono-Bold、JuliaMono-ExtraBold和JuliaMono-Black。[5]。

(还有两种名称中带有“拉丁文”的字体的版本:这些是仅支持基本MacroMan/Windows1252“拉丁文”字符集的精简版本,主要用于作为占位符使用,主要是如果您希望更好地控制基于Web浏览器的应用程序中的字体加载时间。)。

在行家手中(例如下面代码片段[6]的作者Zygmunt Szpak博士),可用的Unicode字符的范围可能非常具有表现力:

函数T(𝛉::AbstractArray,𝒞::Tuple{AbstractArray,vararg{AbstractArray}},𝒟::Tuple{AbstractArray,vararg{AbstractArray}})⊗=kron l=Length(𝛉)𝐈ₗ=SMatrix{l,l}(1.0i)𝐈ₘ=SMatrix{1,1}(1.0i)𝐓=@SMatrix zeros(l,l)N=Length(𝒟[1])ℳ,ℳʹ=𝒟Λ₁,Λ₂=𝒞𝚲ₙ=@MMatrix zeros(4,4)𝐞₁=@SMatrix[1.0;0.0;0.0]𝐞₂=@SMatrix[0.0;1.0;0.0]For n=1:n INDEX=SVector(1,2)𝚲ₙ[1:2,1:2].=Λ₁[n][INDEX,INDEX]𝚲ₙ[3:4,3:4].=Λ₂[n][INDEX,索引]𝐦=hom(ℳ[n])𝐦ʹ=hom(ℳʹ[n])𝐔ₙ=(𝐦⊗𝐦ʹ)∂ₓ𝐮ₙ=[(𝐞₁⊗𝐦ʹ)(𝐞₂⊗𝐦ʹ)(𝐦⊗𝐞₁)(𝐦⊗𝐞₂)]𝐁ₙ=∂ₓ𝐮ₙ*𝚲ₙ*∂ₓ𝐮ₙ';𝚺ₙ=𝛉';*𝐁ₙ*𝛉𝚺ₙ⁻?=inv(𝚺ₙ)𝐓₁=@S矩阵零(Float64,l,l),k=1:l𝐞ₖ=𝐈ₗ[:,k]∂𝐞ₖ𝚺ₙ=(𝐈ₘ⊗𝐞ₖ';)*𝐁ₙ*(𝐈ₘ⊗𝛉)+(𝐈ₘ⊗𝛉';)*𝐁ₙ*(𝐈ₘ⊗𝐞ₖ)#在𝐓₁中累加结果会分配内存,#即使#SUM中的两个项都是数组。𝐓₁=𝐓₁+𝐔ₙ*𝚺ₙ⁻?*(∂𝐞ₖ𝚺ₙ)*𝚺ₙ⁻?*𝐔ₙ';*𝛉*𝐞ₖ';End𝐓=𝐓+𝐓₁End𝐓End。

Ἄδμηθ‘,ὁρᾷςγὰρτἀμὰπράγμαθ’ὡςἔχει,λέξαιθέλωσοιπρὶνθανεῖνἃβούλομαι.。

Я,пазачътВальоужбди,аскришомхапвакюфтенцазадщайгите.。

“Dóna amor que seràs Feliç!”Aixó,il·lús company geniüt,jaés un llu it rètol Blavís d‘onze kWh.。

ZvlášťzákeřnèučeňsďolíčKy běžípodél zónyúlů。

VOIX歧义d‘un cœur qui au zéphyr préfère les jattes de kiwi。

Ταχίστηαλώπηξβαφήςψημένηγη,δρασκελίζειυπέρνωθρούκυνός.。

HĩlanDiagua kuñanguéra oho peteĩsaʼyju ypaʼũme Gavóme Omboʼe hag̃UA ingyleñeʼẽmitãnguéare neʼẽndyʼỹ.

Jófoximés don Quijote húszwattos lámpánálülve Egy pár bűvös cipőt készít.。

[ɢʷɯʔ.nas.doːŋ.Kʰlja][ŋAn.ȵʑI̯wo.ɕI̯uĕn.ɣWA]。

Ċuaiġbéṁórṡáċle dlúṫspád fíorḟinn tríhata moḋEA-ṗorcáinḃig.。

Muļķa hipiji mēģina brīvi nogaršot celofānažņaudzējčūsku.。

ĮlinkDama fechtuotojošpaga subykčiojui huręžėapvalųarbūzą.。

Ѕидарскипејзаж:шугавбилмезсочудењеџвакаќофтеикељнатуѓцех.。

Pchnąćw tęłódźjeża lub ośm skrzyń图.。

Lís ArgüiaàJúlia que braçáes,fé,chá,óxido,pôr,zângão»ERAM palavras do Português。

Широкаяэлектрификацияюжныхгубернийдастмощныйтолчокподъёмусельскогохозяйства.。

Ајшо,лепотоичежњо,заљубавсрцамогадођиуХаџићенакафу.。

本杰明·皮迪奥纳·贝比达·德·奇维·弗鲁拉;Noé,sin Vergüenza,la más Champaña del menú。

Чуєшїх,доцю,га?Кумеднажти,прощайсябезґольфів!

JuliaMono的目标之一是包含Julia程序员理所当然期望找到的大多数字符。(除了所有这些表情符号-它们最好由操作系统处理。)。以下是随机选择的一千个左右:

在JuliaMono中,每个字符的宽度都相同,因为这是等宽字体。通常,带有大量Unicode数学符号的字体不是等宽字体,因为它们旨在用于散文和\(\LaTeX\)应用程序,而不是用于编程代码。

从设计的角度来看,将每个字符强制放入相同大小的框中是一个问题。这就像是让每个人都可以坐在相同的飞机座椅上,不管是什么形状或大小--有些角色看起来肯定会不舒服。从来没有足够的空间容纳漂亮的“m”或“w”。

(当然,大小不是一切--质量可以胜过数量,其他字体会提供不同的体验[10])。

支持框绘制字符和DataFrames.jl输出(终端允许)也是一个好主意:

Julia>;DF=DataFrame(A=样本,B=字形)df=10×2 DataFrame│Row│A│B│││String│String│├─┼─┼─┤│1│▁▂▁▁▂▄▅▁▄▁▁▅▆▂▇▅▂▇││1│Sample 2│▁▂▄▁▁▃▁▆▂▆▃▁▂▃▂▇▄││。3│示例3│▁▆▇▁▃▇▇▆▅▅▄▇▇▅▅▇▄▂││4│示例4│▅▁▄▁▆▃▁▃▇▂▂▇▅▇▃▆▃▁││5│示例5│▆▂▁▂▇▆▃▅▅▄▆▇▄▇▆▁▇││6│示例6│▁▁▇▂▂▇▃▅▂▂▆▂▄▄▁▄▂▇▆││7│示例7│▂▃▂▁▁▇。▁▂▆▂▁▇▁▄▃▂▁▄││8│示例8│▄▄▁▂▄▁▅▁▅▁▂▂▇▂▁▃▄▄││9│示例9│▁▁▁▂▁▆▃▄▄▁▂▂▃▂▁▅▁▆▃││10│示例10│▁▇▄▂▅▃▇▁▇▇▆▄▇▅▄▂▄▅▄│。

如果想知道是否可以在Julia代码中使用Unicode字符作为标识符,请使用未记录的函数Base.isidentifier()。因此,例如,如果您想要使用dingbat(经典的Herman Zapf dingbat设计之一),您可以在下面的输出中寻找合适的东西:

Julia>;for n in 0x2700:0x27bf Base.isidentifier(String(Char(N)&;&;打印(字符(N))end✀✁✂✃✄✅✆✇✈✉✊✋✌✍✎✏✐✑✒✓✔✕✖✗✘✙✚✛✜✝✞✟✠✡✢✣✤✥✦✧✨✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷✸✹✺✻✼✽✾✿❀❁❂❃❄❅❆❇❈❉❊❋❌❍❎❏❐❑❒❓❔❕❖❗❘❙❚❛❜❝❞❟❠❡❢❣❤❥❦❧➔➕➖➗➘➙➚。➛➜➝➞➟➠➡➢➣➤➥➦➧➨➩➪➫➬➭➮➯➰➱➲➳➴➵➶➷➸➹➺➻➼➽➾➿julia>;❤=println(";i❤$&34;)❤(带1个方法的泛型函数)julia>;❤(";julia&34;)i❤julia。

JuliaMono是一种OpenType字体。OpenType技术提供强大的文本定位、模式匹配和字形替换特性,这些特性对于阿拉伯语和乌尔都语等语言至关重要。在英语中,当某些字体中的字母对(如fi)被替换为单个字形(如fi)时,经常会看到opentype功能。自从活字印刷发明以来,这些连字就一直在使用,用更好看的替代方案取代了偶尔出现的笨拙的字符组合。

老实说,我对它们在字体编码中的使用并不是很感兴趣(而且我也不是唯一的一个[11])。我喜欢看到我输入的内容,而不是字体决定替换它的内容。但是,在Julia的一些地方,合适的Unicode替代方案不被语言接受,我觉得当前使用的ASCII艺术糖果可以通过明智地使用替代字形来轻微增强。在一些地方,一些细微的调整可以增强语言的可读性,而不会带来歧义。

Julialang=true#(!=0)(x,y)->;(x+y)f(p::int)=p*p@inbound if f in(Base.:+,Base.:-)if any(x->;x<;:AbstractArray{<;:Number})名词=dict(Base:+=>;";加法";,Base:-=>;";减法";,)enddf2=DF|>;@groupby(_.a)|>;@map({a=key(_),b=means(_.b)})|>;DataFrame#<;|。

OpenType字体还允许您为某些字符选择不同的设计。这些被存储为“样式集”。

所有选项都存储在字体中,并且通常由其内部的四个字母代码引用(真的不是最好的面向用户的设计)。例如,上面列出的上下文替换项集中存储在CALT功能中。

有时,应用程序会在字体面板[13]中更直观地显示选项,通常隐藏在字体选择器对话框中的某个位置。

所有这些花哨的技术都在您正在使用的应用程序和操作系统的控制之下。理想情况下,它们将为您提供一种简单的方式来打开和关闭各种OpenType功能。

基于浏览器的编辑器(如Juno和VS Code)在其编辑器窗口中支持许多OpenType特性,但在终端/控制台窗口中不支持。它们提供了一个设置区域,您可以在其中键入CSS或JSON选择器来控制特性的外观,并且您必须知道特性代码。有些功能是选择加入的,而另一些则是选择退出的;这也可能因应用程序的不同而不同。

终端/控制台应用程序也有很大不同;在MacOS上,终端和iTerm应用程序试图提供对OpenType功能的控制,并取得了不同程度的成功。在Linux上,一些终端应用程序(如Kitty)提供了相当好的支持,但其他应用程序(如Alacritty)到目前为止几乎没有提供任何支持。[14]。

如果应用程序允许,您应该能够关闭CALT上下文连字,特别是因为相当多的人不会喜欢他们的代码中的任何一个。对于下面的清单,我使用CSS关闭了CALT集合(请参见此处),然后启用一些可选的样式集:将字符(如0、g、a、j和@)与前面的清单进行比较:

Julialang=true#(!=0)(x,y)->;(x+y)f(p::int)=p*p@inbound if f in(Base.:+,Base.:-)if any(x->;x<;:AbstractArray{<;:Number})名词=dict(Base:+=>;";加法";,Base:-=>;";减法";,)enddf2=DF|>;@groupby(_.a)|>;@map({a=key(_),b=means(_.b)})|>;DataFrame#<;|。

(我最初喜欢更圆形的@标志的想法,但实际上它在小字体尺寸下不起作用,因为细节消失了。但不管怎样,我都留着它。)

Unicode系统中有几个区域已正式保留为空,因此可用于存储不属于该标准的字符。这些区域称为专用区域,有三个区域:\ue000到\uf8ff、\UF0000到\UFFFFD和U100000到U+10FFFD。

在这些方面,每种字体都可以做自己的事情。例如,在JuliaMono中,如果您环顾一下\ue800,您会发现一些熟悉的形状:

在专用区域使用字符的明显缺点是,除非它们已转换为轮廓或位图,否则您必须将字体安装在希望它们正确呈现的任何位置。如果字体没有安装(例如在GitHub上),你不知道会显示什么字形(如果有的话)。

您可以将这些定义为在Julia REPL上可用。例如,假设您希望在julia会话中键入\julialogo并激活juliaMono字体时,终端中可以使用julia Circle。运行以下命令:

通常可以将Unicode值直接键入文本。当你不使用Julia REPL时,这是一项很有用的技能…。在MacOS上,在按住Option(⌥)键的同时键入四个十六进制数字(确保您使用的是Unicode十六进制输入键盘)。在Windows上,我认为您可以输入四个十六进制数字,然后是Alt,然后是X。在Linux上,可能是ctrl-Shift-u,然后是十六进制数字。

感谢:Thibaut Lienart为他的Franklin.jl网站建设者;感谢Jérémie Knüsel提供了宝贵的建议和建议;感谢Zygmunt Szpak博士的酷数学代码;感谢Simeon Schaub的问题和公关。

“开源”最终会实现,但我必须先弄清楚如何做到这一点。

“Windows”有关它在Windows上是否工作以及如何工作的更多信息,请阅读本文,但我目前对Windows字体技术以及它与MacOS和Unix的不同之处知之甚少。早些时候的报道称,这种字体在Windows上看起来不太好。这是因为格式是CFF/PostScript OTF,这在Windows上没有任何提示。切换到TTF/TrueType OTF被认为是一种改进,这是暗示的。

“License”虽然不像Julia那样由麻省理工学院授权,但JuliaMono是通过SIL Open Font License获得许可的,该许可允许字体的使用、学习、修改、自由再分发,甚至出售,而不会影响捆绑在一起的任何字体。

“下载字体问题”该问题可能与名为CORS的网络安全功能有关,该功能可阻止网页访问其需要的资源。

“Master”实际上只有三个Master(Light、Regular和Black)和三个实例(Medium、Bold和ExtraBold)在它们之间进行插值。

“语言”如果有任何问题,请在Github上打开一个问题。我不会说这些语言中的大多数。

“端子和行距”端子应用程序通常提供改变行距的选项。要获得完美平滑的Unicode打印,您可以调整此选项,直到着色字形协调一致。但是出于编码目的,您可能希望增加(或减小)行间距,这取决于阅读速度、字体大小和您可以塞进多少行代码之间的权衡。

“更好的字体...”运营商Mono和Fira都是不错的字体。试试看!还可以尝试IBM Plex Mono、Iosevka、Recursive和Victor Mono等。就像编程语言一样,每种字体都有它的优点和缺点。

“不是唯一一个”马修·巴特里克对他们说“见鬼不”。他还使用了“善意的业余结扎师”这个词,这不是我想要的标签。但更严肃的是,他说:“我主要关心的是面向他人的排版。因此,如果您正在准备代码以供他人阅读--无论是在屏幕上还是在纸上--请跳过连字。“。

“替代字形”请注意,替代字形的宽度与它们要替换的源字形的宽度相同。虽然理论上您可以使用成千上万个unicode箭头中的一个(如→)来替代“staby lambda”(->;),但这些箭头只有一个字符的宽度,所以无论何时进行替换,您都需要更改字符串/行的宽度。

“排版面板”它们的能力和功能差别很大:MacOS终端应用程序的排版面板很全面,但我不相信所有的按钮都已经连上了……。

“又是终端”终端应用程序的编写者通常对字体和文字应该如何管理和显示有自己的想法。我还没有找到一个能做到我想让它做的一切,也没有什么是我不希望它做的。在字体的世界里,没有什么是百分之百正确的,这可能是令人沮丧的。您可以在GitHub和其他地方跟踪一些问题和讨论:这里是一个VS代码问题;这里是致力于此的Alacritty终端开发人员;这里是关于性能的iTerm文档。

。

©Cormullion。上次修改日期:2020年10月10日。基于Basic模板,使用Franklin.jl和Julia编程语言构建的网站。