在一個完美的世界中,你的字體隨時可以構(gòu)建并安裝在任何現(xiàn)代計(jì)算機(jī)上而不需要做任何額外的努力,但是現(xiàn)實(shí)是混亂的–尤其是在設(shè)計(jì)進(jìn)程中。字體可能有阻止他們正常工作和顯示的技術(shù)性錯誤。例如和自己相交的曲線不會正確渲染,因?yàn)樗麄儧]有“里面”和“外面”。各種各樣的字體文件類型也期望字形附加在某些簡化文本放在屏幕上的某些規(guī)則,破壞這些規(guī)則的字體可能引起意外問題。這種類型問題的一個例子是一條曲線上的所有點(diǎn)的坐標(biāo)應(yīng)該是整數(shù)。最后,有一些非技術(shù)性錯誤的樣式錯誤,但是你也要修復(fù)它們–比如想要完全水平或豎直的線,但是偶爾輕微離開。
FontForge 提供了工具讓你可以定位(并且在許多情況下修復(fù))所有的三類問題。驗(yàn)證你的字體來消除這些錯誤不僅可以確保用戶可以安裝并享受字體,而且可以確保完成的項(xiàng)目表現(xiàn)得耀眼。
第一個工具叫做 em>Find Problems,可以在 Element 菜單下找到。你必須首先選擇一個或多個字形–從字體視圖或者輪廓視圖或者度量值視圖–然后打開 Find Problems 工具。這個工具在八個分開的選項(xiàng)卡下展示潛在問題的混合。
http://wiki.jikexueyuan.com/project/fontforge-and-font-design/images/findproblemswindow.png" alt="findproblemswindow.png" />
你選擇你感興趣尋找的問題,方法是勾選它們旁邊的復(fù)選框,有些還提供了用于檢查字體的數(shù)字值。當(dāng)你點(diǎn)擊 OK 按鈕時,這個工具將會檢查所有選中的字形并在一個對話框內(nèi)報(bào)告它找到的任何問題的報(bào)告。
Find Problems 工具找到的問題被分成八類:
并不是每個檢查都是必要的;一些只應(yīng)用在特定的書寫字母或者語言(比如“CID”選項(xiàng)卡中的那些),另一些只應(yīng)用在特定可選擇的字體特性(比如在引用選項(xiàng)卡中的檢查)。但是你應(yīng)該檢查你的字體是否通過字形的必要特性的測試和一些可選但是通常的行為的測試。幾個其他測試在設(shè)計(jì)進(jìn)程中為你提供給了反饋和指導(dǎo),因此值得探索。
在“Points”選項(xiàng)卡,選擇 Non-Integral Coordinates 測試。這個測試確保每個字形中的所有點(diǎn)(包括弧線上的點(diǎn)和控制點(diǎn))都有整數(shù)坐標(biāo)。并不是每個字體輸出格式需要這個行為,但是一些需要。
在“Paths”選項(xiàng)卡,選擇選項(xiàng) Open paths 和 Check outermost paths clockwise。他們都是所有字體的強(qiáng)制特性;第一個尋找任何不是閉合形狀的曲線,第二個確保每個字形的外部曲線是沿著順時針順序。這也是一個檢查交叉路徑的非常好的主意;盡管現(xiàn)代字體格式可以支持兩個交叉路經(jīng),但是并不允許與自己交叉的曲線。另外如果一個字形有與自己相交的路徑那么 FontForge 不能執(zhí)行 Check outermost paths clockwise 測試。
在“Refs”選項(xiàng)卡,選擇所有的 6 個測試。這些將檢查所有相關(guān)的引用,引用中一個字形包含另一個字形的路徑。例如一個帶重音的字母包含了一個到原始(無重音的)字母的引用,加上一個到重音自負(fù)的引用。在“Refs”選項(xiàng)卡下的所有測試至少對于一個通常輸出格式是強(qiáng)制的,對所有的來說是好主意。
類似地,選擇“ATT”選項(xiàng)卡下的所有測試。這些測試尋找缺失的字形名稱,引用不存在字形的替代規(guī)則,和其他字形名稱活 OpenType 特性相關(guān)的問題。它們防止的問題并不常用,但是所有的都將導(dǎo)致字體被一個或多個電腦系統(tǒng)認(rèn)為是無效的,因此它們值得被包含進(jìn)來。
上面列出的測試將會保證你的字體按照多種字體格式設(shè)置的規(guī)則集合正確地安裝和渲染,但是你應(yīng)該在考慮添加一些其他測試–尤其是在設(shè)計(jì)進(jìn)程的結(jié)束–僅僅因?yàn)樗鼈儥z查大部分現(xiàn)代印刷格式遵循的公約。
在“Points”選項(xiàng)卡,選擇 Control points beyond spline。這個測試將尋找處于其所屬的曲線段的端點(diǎn)外的控制點(diǎn)。很少有一個控制點(diǎn)應(yīng)該處于曲線以外的原因,因此這樣的情況通常意味著意外。選擇 Points too far apart 也是一個好主意,它將會查找距離最近的點(diǎn)超過 32767 單位的點(diǎn)。這個距離比大多數(shù)計(jì)算機(jī)能夠內(nèi)部處理的更大,并且一個那么遠(yuǎn)的點(diǎn)幾乎必然不是故意的(可以對比的是,一個字形傾向于會只在一個大約 1000 單位的網(wǎng)格中),因此刪除這樣的點(diǎn)是重要的。
在“Paths”選項(xiàng)卡,Check Missing Extrema 和 More Points Than [val]測試可以是有價(jià)值的。第一個尋找處于極值的點(diǎn)–也就是字形的最高點(diǎn)、最低點(diǎn)和最左點(diǎn)和最右點(diǎn)?,F(xiàn)代字體格式強(qiáng)烈建議每個路徑都有一個處于其水平和垂直上極值的點(diǎn);在字體渲染在屏幕或頁面上時,這將讓生活更美好。檢查將會查找缺失的極值點(diǎn)。第二個測試是一個對字形中點(diǎn)的數(shù)量的明智的檢查。FontForge 中這個檢查的默認(rèn)值是 1500 個點(diǎn),這是 PostScript 文檔中建議的值,對幾乎所有字體都足夠好。
正如其名字一樣,“Random”選項(xiàng)卡列出不屬于其他類別的雜項(xiàng)測試。當(dāng)然,最后三個是有價(jià)值的:Check Multiple Unicode,Check Multiple Names 和 Check Unicode/Name mismatch。它們尋找字形名稱和 Unicode 碼之間映射的元數(shù)據(jù)錯誤。
Find Problems 工具中的許多其他測試有助于找到并定位你的字形集中的矛盾之處;不是錯的或者無效的但是作為設(shè)計(jì)者的你希望打磨的東西。例如“Points”選項(xiàng)卡中的 Y near standard heights 測試將字形與一個有用的豎直測量值集合來比較,包括基線、字形“x”的高度、字母“p”的最低點(diǎn)和最高點(diǎn)等。在一個一致的字體樣式中,大多數(shù)字母將依附到這些標(biāo)準(zhǔn)測量值中的幾個,因此一個并不靠近其中任何一個的字形需要大量的工作。
在“Paths”選項(xiàng)卡中的 Edges near horizontal/vertical/italic 功能尋找?guī)缀跏蔷_地處于水平、豎直或者處于字體傾斜角度的線段。將你幾乎豎直的線條做成完美豎直意味著在你的字體使用時圖形將會銳利地渲染,這個測試是找到在眼睛沒有幫桌的情況下難以察覺到的不十分正確的線段的可靠的手段。
你可以使用其他測試來定位曲線上互相太靠近的點(diǎn)而沒有意義,來比較形狀類似字形的旁邊空白,來執(zhí)行一些當(dāng)你有古怪的字符時揭露問題。改善進(jìn)程的一部分是采用你最初的設(shè)計(jì)并使他們更加精確;像字體設(shè)計(jì)的其他方面一樣,這是一個迭代的任務(wù),因此使用使用內(nèi)建的工具以減少一些重復(fù)工作。
FontForge 的其他驗(yàn)證工具時全字體驗(yàn)證器,在整個字體上做一系列的測試和檢查。由于驗(yàn)證器是用來檢查整個字體的,因此你只能從字體視圖窗口運(yùn)行他;你可以再 Element 菜單的 Validation 子菜單中找到它。驗(yàn)證器設(shè)計(jì)用于運(yùn)行一些檢查字體技術(shù)上正確性的測試–本質(zhì)上是上面“測試必要特性”一節(jié)描述的測試。但是它確實(shí)在整個字體上執(zhí)行測試,并且比你自己用 Find Problems 工具一步步完成的進(jìn)程要迅速很多。
http://wiki.jikexueyuan.com/project/fontforge-and-font-design/images/validator-integral-question.png" alt="validator-integral-question.png" />
在一個特別的編輯期間你第一次運(yùn)行驗(yàn)證器的時候,他將會彈出一個對話框詢問你它是否應(yīng)該將非整型的點(diǎn)坐標(biāo)當(dāng)作是錯誤。安全的答案是選擇“Report as an error”,因?yàn)楦街谡妥鴺?biāo)上是一個好的設(shè)計(jì)實(shí)踐。當(dāng)驗(yàn)證器完成它對字體的掃描時(將僅僅是幾秒鐘之后),它將會彈出一個新的名為 Whatever Your Font Name Is 的驗(yàn)證對話框這個窗口將會列出驗(yàn)證器找到的所有問題,展現(xiàn)在按字形排序的列表中。
http://wiki.jikexueyuan.com/project/fontforge-and-font-design/images/valiator-output.png" alt="valiator-output.png" />
但是這個窗口不僅僅是一個錯誤的列表;你可以雙擊列表中的每個條目,F(xiàn)ontForge 將會跳轉(zhuǎn)到相關(guān)字形并高亮顯示確切的問題,最后在它自己的窗口中展示文本說明。然后你可以再字形編輯器中修復(fù)問題,關(guān)聯(lián)的錯誤條目將會立即從驗(yàn)證器的錯誤列表中消失。在許多情況下,錯誤可以被 FontForge 自動修復(fù);在這些情況下說明窗口將會在底部包含一個“Fix”按鈕。你可以點(diǎn)擊它執(zhí)行修復(fù)而不需要額外努力。
http://wiki.jikexueyuan.com/project/fontforge-and-font-design/images/validator-fix-problem.png" alt="validator-fix-problem.png" />
對于一些問題,并不能自動修復(fù),但是在屏幕上看到問題將有助于你立即修復(fù)。例如一個自交曲線在一個特定的地方上路徑穿過它自己–這對于你來說可能很難一眼瞥到,按時放大后你就可以改造形狀消除問題。
對于另一些問題來說,并不能將錯誤定位到某一個特定的點(diǎn)。例如如果一條曲線沿著錯誤的方向(也就是應(yīng)該是順時針的時候反而是逆時針),那么整個曲線都會受到影響。在這些情況下 FontForge 不能自動修復(fù)問題,驗(yàn)證器也無法高亮沒有字形中特定的點(diǎn),你可能四處尋找以期手動改正問題。
最后,有一些驗(yàn)證器執(zhí)行的測試可能并不是來自你心里想要的最終輸出格式的問題–例如之前提到的非整型坐標(biāo)。在這些情況下你可以點(diǎn)擊錯誤說明窗口“ignore this problem in the future”復(fù)選框,在未來運(yùn)行驗(yàn)證的時候抑制特定錯誤信息。
大多數(shù) Find Problem 工具和整個字體驗(yàn)證器找到的錯誤可以在編輯進(jìn)程中改正,因此在你工作時不要覺得有任何推遲故障排除的需要。例如 View > Show 子菜單有選項(xiàng)可以在編輯時高亮問題區(qū)域;Element 菜單下的命令比如 Add Extrema 將會為大多數(shù)輸出文件格式添加期望的極值點(diǎn),復(fù)選框指示指示選擇的路徑是否朝向順時針還是逆時針方向。如果你在字形編輯器中翻轉(zhuǎn)一個圖形(水平或者豎直翻轉(zhuǎn)),那么你講注意到它的方向也被自動顛倒。如果你點(diǎn)擊 Element 菜單下的 Correct Direction 命令,F(xiàn)ontForge 將會立即修復(fù)順時針/逆時針方向。養(yǎng)成在工作時像這樣做小的修復(fù)的習(xí)慣,將會在隨后的驗(yàn)證階段為你節(jié)約一點(diǎn)時間。
字體樣式可以通過兩種方式工作地更好或更差;可讀性可易讀性。
易讀性意味著字形的設(shè)計(jì)足夠明顯可以立即正確地認(rèn)出。有一些經(jīng)常太過類似的字符對:
可讀性意味著所有字形為了更熟悉、舒適的閱讀體驗(yàn)而共同工作。創(chuàng)建測試文檔是最好的確保這一點(diǎn)的方式。如果你有完整的字母表,那么你可以排版真實(shí)的文本–例如使用 FontFriend 將你的字體拖動你希望讀的一個長新聞中,然后打印出它來。
但是如果你的字體只包含字母部分,你可以使用一個測試文本生成器,比如 LibreText.org 和任何字處理器,桌面出版應(yīng)用程序或者一般演示程序(比如 Inkscape)來創(chuàng)建測試文檔。