該目錄包含用於日語/中文/韓國排版的Opentype上下文半徑間距功能的工具。
此功能使JLREQ 3.1.2標點符號(逗號,週期和括號)放置標點符號,括號,括號等的基本方法。以下是JLREQ的數字:
Adobe CJK類型博客文章和第二部分的早期討論可能有助於更好地理解該功能。
您可以在此處找到示例文本。此示例頁面使用此工具構建的字體。
Opentype定義了4個用於字體的功能標籤以支持此功能:
chws ”功能標籤和“ vchw ”功能標籤作為其垂直流。halt ”功能標籤和“ vhal ”功能標籤作為其垂直流對應。需要所有4個功能,因為每個功能都在不同的上下文中應用。
該軟件包通過計算來自Unicode代碼點和Glyph大綱等數據的功能表時,將這些功能添加到任何Opentype/TrueType字體時。
您可以通過PIP或PIPX安裝此工具。
pipx install east-asian-spacingpip install east-asian-spacing請注意,如果您在全球環境中使用PIP安裝,則其依賴關係可能會導致與其他軟件包的衝突。如果您需要的只是命令行工具,那麼PIPX可以在全球安裝它,同時仍在虛擬環境中隔離它。
如果您想從Python程序中使用此軟件包,請參見“安裝程序包”部分,或者使用克隆程序並安裝部分,如果您想診斷字體或代碼的更多詳細信息。
以下示例將功能添加到input-font-file中,並將其保存到build目錄中。
east-asian-spacing -o build input-font-file測試部分具有檢查您構建的差異和測試字體的資源。
對於其他選項和用法, --help選項可以顯示選項的完整列表。
該算法適用於任何CJK字體。在每個版本上測試了後字體:
fonts.google.com上的CJK字體在CHWS_Tool軟件包中進行了測試。在開發過程中還測試了其他幾種字體。
在將功能添加到字體中時,測試HTML是檢查結果的方便工具。如果您的字體遇到任何問題,請報告問題。
如果您想自定義字體的默認行為,請參見下面的高級主題。
當輸入字體文件是TrueType集合(TTC)時,此工具默認情況下將功能添加到TTC中的所有字體。
如果要僅在TTC中的某些字體中添加該功能,則可以指定逗號分隔的字體索引列表。下面的示例將功能添加到字體索引0和1中,但沒有將功能添加到TTC中的其他字體。
east-asian-spacing --index=0,1 input-font-file.ttc您可以使用自己喜歡的軟件包管理工具(例如詩歌,Pipenv或Pip)安裝此軟件包。
pip install east-asian-spacingpipenv install east-asian-spacingpoetry add east-asian-spacing如果您想在更多詳細信息中診斷字體或代碼,請參見克隆並安裝部分。
如果功能適用,則以下示例將創建具有“ build ”目錄中功能的字體。
import east_asian_spacing
async def main_async ():
builder = east_asian_spacing . Builder ( "fonts/input.otf" )
output_path = await builder . build_and_save ( "build" )
if output_path :
print ( f"Saved to { output_path } " )
else :
print ( "Skipped" )可以使用測試HTML頁面檢查瀏覽器上字體的行為。
它可以測試您本地構建的字體。
<script>塊開頭的“ fonts ”列表中。請注意,當您要測試TTC(TRUETYPE COLLECTION),但是您的瀏覽器只能加載TTC中的第一個字體時,以下命令從Opentype Collection Font Font File(.TTC或.OTC)提取所有OpenType字體(.OTF或.TTF)。
east-asian-spacing ttc build/NotoSansCJK-Regular.ttcdump子命令可以創建各種類型的文本轉儲文件。
最簡單的用法是顯示表格列表。這類似於TTX的“ -l ”選項,除了TrueType Collections(TTC),此工具可以顯示TTC中所有字體的表,並與該表與該字體共享表。
east-asian-spacing dump build/NotoSansCJK-Regular.ttc “ -o ”選項在指定目錄中創建表列表文件:
east-asian-spacing dump -o build/dump build/ * .ttc “ --ttx ”選項除表列表文件外,還創建了所有表的TTX文本轉儲。這類似於TTX的“ -s ”選項,除了它可以將所有表轉儲在TrueType Collections(TTC)中。
east-asian-spacing dump -o build/dump --ttx build/ * .ttcdump子命令還可以創建兩個字體文件的轉儲文件並對其進行比較。這有助於可視化兩個字體中的差異,特別是您從原始字體文件創建的字體文件。
east-asian-spacing dump -o build/diff --diff source_fonts_dir build/NotoSansCJK.ttc上面source_fonts_dir/NotoSansCJK.ttc示例通過build/NotoSansCJK.ttc以下3組文件:
build/NotoSansCJK.ttc表列表和TTX文本轉儲文件在build/diff/dump目錄中。build/diff/src目錄中的source_fonts_dir/NotoSansCJK.ttc的表列表和TTX文本轉儲文件。build/diff目錄中兩組轉儲文件的差異文件。注意:“
--diff”選項比所有這些選項更有效,尤其是對於大字體而言,因為它會在二進制二進制時跳過ttx。
-o選項是可選的。省略時,子命令將差異輸出到stdout 。
east-asian-spacing dump --diff source_fonts_dir build/NotoSansCJK.ttc | less要為您構建的所有字體創建diff文件,您可以將輸出輸送到下面:
east-asian-spacing -p * .otf | east-asian-spacing dump -o build/diff - “ -p ”選項將輸入和輸出字體路徑打印到tab-epared-values格式中的stdout 。帶有“ - ”參數的dump子命令從stdin讀取此列表,並在build/diff目錄中創建其文本轉儲和diff文件。在這種情況下,沒有必要的“ --diff ”選項,因為源字體路徑是從管道提供的。
一旦查看了上面創建的差異文件或構建的測試字體,就可以將diff文件複製到references目錄中。然後,當您要再次構建它們時,例如字體更新時或更改構建環境時,您可以將DIFF文件與參考文件進行比較,以了解新字體與以前的構建的不同。
使用“ -r ”選項, dump子命令在兩個字體文件之間創建差異文件,並將DIFF文件與references目錄中曾經經過的diff文件進行比較。
此選項的典型用法如下:
east-asian-spacing -p -g=build/glyphs * .otf |
east-asian-spacing dump -o=build/diff -r=references -請參閱“ -p ”選項和管道的差異部分。
build*.sh腳本包括此選項。
形狀測試形狀測試字符串並檢查是否應用上下文間距。
--test選項設置了形狀測試的級別。
east-asian-spacing --test 2 -v -o build input-font-file級別0禁用形狀測試。 1級使用少量樣品進行煙霧測試。 2級使用大量的測試字符串進行形狀測試。默認值為1。
該算法是語言不可知論,適用於任何CJK字體。
該軟件包確定字形對通過在Config類中定義的一組Unicode代碼點調整間距。
然後,對於每對,它可以檢查間距是否適用,通過檢查字形輪廓和計算墨水邊界盒的字形盒。例如,當字形非常厚時,字形可能沒有足夠的內部間距,並且施加間距可能會導致字形碰撞。該包裝自動檢測到此類情況,並避免將間距施加到此類對。
可以通過指定下面的語言或將Config.use_ink_bounds設置為False在您的Python程序中來禁用此自動行為。
有針對標點符號在字形空間中放置標點符號的特定慣例。例如,u+3002意識形態的全停止應放置在日語的字形空間的左下角,而應將其放在傳統的中文中。
默認情況下,此軟件包確定了上述算法部分所述的字形大綱的差異。但是您可以指定Opentype語言系統標籤,以使此軟件包遵循語言約定,而不是使用字形大綱。以下示例禁用字形概述的自動確定,並指定字體是日本字體。
east-asian-spacing --language=JAN input-font-file對於TrueType Collections(TTC),默認情況下,語言選項適用於TTC中的所有字體。當您要為TTC中的每種字體指定不同的語言時,它接受了逗號分隔的列表。以下示例為字體索引1指定韓語,簡化字體索引2的中文,並為所有其他字體自動使用。
east-asian-spacing --language=,KOR,ZHS input-font-file.ttc您可以結合這兩個選項。以下示例將JAN應用於索引2,而ZHS適用於索引3。 TTC中的其他字體未更改。
east-asian-spacing --index=2,3 --language=JAN,ZHS input-font-file.ttc您可能需要調整哪些字符對應調整間距,例如當您的字體可能沒有預期某些字符的間距時。目前,只有從Python程序中才有可能。
對於一個簡單的示例,請參閱tests/config_test.py中的test_config 。
CHWS_Tool項目是自定義此軟件包的實際示例。
該軟件包通過使用Cython Bindings Uharfbuzz使用Harfbuzz塑造引擎。
如果要使用harfbuzz的特定構建,則此工具可以通過設置SHAPER Environment變量來調用外部HB形命令行工具。
export SHAPER=hb-shape為Linux安裝HB形狀:
sudo apt get libharfbuzz-bin要使用Homebrew安裝Mac的HB形狀:
brew install harfbuzz其他平台的說明可以在Command-not-found.com上找到。
如果您可能需要診斷字體或代碼,建議使用詩歌克隆和安裝:
git clone https://github.com/kojiishi/east_asian_spacing
cd east_asian_spacing
poetry install
poetry shell此方法具有以下優點:
-e ”選項或setuptools “開發模式”)。如果您願意,也可以使用PIP安裝克隆目錄:
git clone https://github.com/kojiishi/east_asian_spacing
cd east_asian_spacing
pip install .該存儲庫包含使用Pytest的單元測試。單元測試涵蓋了基本功能,包括形狀測試,將功能添加到測試字體中,並將其與參考文獻進行比較。
如果您遵循克隆並安裝部分,則已經安裝了用於單元測試的工具。在第一次運行它們之前,您需要下載字體進行測試:
./tests/download_fonts.py然後,您可以通過:
pytest或使用多個版本的Python使用Tox:
toxscripts目錄具有一些小的外殼腳本。
build*.sh腳本對於構建字體,計算源字體的差異和將diff文件與引用進行比較。以下是示例用法。
./scripts/build.sh input-font-file.otf -v
./scripts/build-noto-cjk.sh ~ /fonts/noto-cjk -v