mf2ff mf2ff เป็นเครื่องมือในการสร้างแบบอักษรเวกเตอร์จากรหัส Metafont โดยใช้ Python API ของ Fontforge
มันขึ้นอยู่กับแนวคิดของวิธีที่ Metafont สามารถทำงานร่วมกับเครื่องกำเนิดฟอนต์เวกเตอร์โดยไม่ต้องมีการติดตามการติดตามบิตแมปตามที่อธิบายไว้ด้านล่างในส่วนแนวคิด MF2VEC mf2ff เป็นคนแรกและเพื่อความรู้ของนักพัฒนาเป็นเพียงการดำเนินการตามแนวคิดนี้จนถึงปัจจุบัน
ด้านล่างคุณจะพบความช่วยเหลือเกี่ยวกับวิธีการตั้งค่าและวิธีการใช้งาน
เครื่องมือยังไม่ได้รับการทดสอบอย่างละเอียด แต่รองรับคำสั่ง metafont ที่พบบ่อยที่สุด นอกเหนือจากการเติมและการวาดรูปแบบ kerning และคำสั่งมัดบางอย่างยังได้รับการสนับสนุน โปรดดูข้อ จำกัด ที่ระบุไว้ด้านล่าง
mf2ffmf2ff คุณต้องติดตั้ง Fontforge และ Metafont เพื่อใช้ mf2ff
คุณอาจมีปัญหาในการเรียกใช้สคริปต์ mf2ff ปัญหาหนึ่งอาจเป็นได้ว่าคุณต้องเรียกใช้ Python 3 ด้วยโมดูล Fontforge ด้านล่างนี้เป็นเคล็ดลับเกี่ยวกับวิธีการทำงาน ฉันไม่สามารถรับประกันได้ว่าสิ่งนี้จะใช้งานได้กับระบบของคุณ แต่คุณควรลองดู
ในระบบปฏิบัติการหรือการกำหนดค่าระบบที่แตกต่างกันซึ่งเคล็ดลับด้านล่างไม่ทำงานตรวจสอบว่าคุณใช้โมดูล Python ของ Python และ Fontforge:
ffpython , python3 , python ) ตรวจสอบว่าข้อมูลเวอร์ชันระบุว่าคุณกำลังใช้ Python 3import fontforge ภายในล่ามควรทำงานโดยไม่มีข้อผิดพลาดfontforge.font() ไม่ควรเพิ่มข้อผิดพลาด หากสิ่งนี้ใช้งานได้ในไดเรกทอรีบางอย่างคุณควรตรวจสอบ PATH หรือตัวแปร PYTHONPATH ของคุณ สำหรับการเข้าถึง ffpython รุ่น Python ของ Fontforge ชั่วคราว Fontforge มาพร้อมกับไฟล์แบตช์:
C:Program Files (x86)FontForgeBuilds ) และเรียกใช้ fontforge-console.bat เนื่องจากคำสั่ง set ของ Windows เปลี่ยนตัวแปรพา PATH เฉพาะในเซสชันพรอมต์คำสั่งปัจจุบัน FFPython มีเฉพาะในทุกตำแหน่งสำหรับการเข้าถึงอย่างถาวรคุณต้องแก้ไขตัวแปรเส้นทางอย่างถาวร:
environment variables และเปิด Edit the system environment variables คลิกที่ Environment variables และแก้ไขตัวแปรพา PATH ของบัญชีผู้ใช้ของคุณหรือหนึ่งในระบบหากคุณต้องการเข้าถึง ffpython ในบัญชีผู้ใช้หลายบัญชี ตอนนี้เพิ่มเส้นทางของ Fontforge (เช่น C:Program Files (x86)FontForgeBuildsbin , โปรดทราบ bin !) ในรายการffpython มีอยู่ในหน้าต่างพรอมต์คำสั่งใหม่ทั้งหมดและคุณควรจะใช้ ffpython path/to/mf2ff.py ... หากต้องการเข้าถึงสคริปต์ mf2ff ได้อย่างง่ายดายจากทุกที่ให้ทำสิ่งต่อไปนี้:
mf2ff ไปยังตัวแปร PYTHONPATH หากยังไม่มีตัวแปร PYTHONPATH ให้เพิ่มลงในรายการmf2ff ด้วย ffpython -m mf2ff ... ในเซสชันพรอมต์คำสั่งใหม่Ubuntu ใช้ในตัวอย่างนี้
ที่เก็บบางแห่งส่ง Fontforge รุ่นเก่าพร้อมการสนับสนุน Python 2 คุณอาจต้องการสร้าง Fontforge จากแหล่งที่มา:
sudo apt install libjpeg-dev libtiff5-dev libpng-dev libfreetype6-dev libgif-dev libgtk-3-dev libxml2-dev libpango1.0-dev libcairo2-dev libspiro-dev libuninameslist-dev python3-dev ninja-build cmake build-essentialsudo apt install gitgit clone https://github.com/fontforge/fontforge สิ่งนี้สร้าง fontforge/ Directoryfontforge/ Directory:cd fontforge; mkdir build; cd buildcmake -GNinja ..ninjasudo ninja installหมายเหตุ: ตรวจสอบเอกสารของ Fontfore หากคุณมีปัญหากับกระบวนการนี้
หากต้องการเข้าถึงโมดูล Python ของ Fontforge ให้เพิ่มลงใน Pythonpath ของคุณ:
~/.profile ของคุณ: export PYTHONPATH=$PYTHONPATH:/path/to/fontforge/ , โดยที่ /path/to/fontforge/ ไดเรกทอรีเป็นสิ่งที่สร้างขึ้นโดยการโคลนนิ่ง fontforge ด้วย git, eg $HOME/fontforgepython3 path/to/mf2ff.py ... ในเซสชันเชลล์ใหม่ หมายเหตุ: ขึ้นอยู่กับการกำหนดค่าระบบของคุณคุณต้องพิมพ์ python แทน python3 เพื่อเรียกใช้ Python 3
หากต้องการเข้าถึงสคริปต์ mf2ff ได้อย่างง่ายดายจากทุกที่ให้เพิ่มตำแหน่งลงในตัวแปร Pythonpath:
~/.profile ของคุณ: export PYTHONPATH=$PYTHONPATH:/path/to/mf2ff/ , โดยที่ /path/to/mf2ff/ ไดเรกทอรีเป็นไฟล์ที่คุณใส่ไฟล์ mf2ff.py เช่น $HOME/mf2ff/mf2ffmf2ff ได้อย่างง่ายดายด้วย python3 -m mf2ff ... ในเซสชันเชลล์ใหม่หมายเหตุ: ขึ้นอยู่กับว่าคุณกำลังใช้ dotfile การรีสตาร์ทของเปลือกใหม่แทนการรีบูตอาจเพียงพอ
โซลูชันด้านล่างใช้ Homebrew วิธีนี้ Fontforge สามารถเข้าถึงได้ด้วย Python:
brew install fontforgepython3 path/to/mf2ff.py ... ในเซสชันเชลล์ใหม่ หมายเหตุ: ขึ้นอยู่กับการกำหนดค่าระบบของคุณคุณต้องพิมพ์ python แทน python3 เพื่อเรียกใช้ Python 3
หากต้องการเข้าถึงสคริปต์ mf2ff ได้อย่างง่ายดายจากทุกที่ให้เพิ่มตำแหน่งลงในตัวแปร PYTHONPATH :
PYTHONPATH=$PYTHONPATH:/path/to/mf2ff/zsh ในไดเรกทอรีโฮมเมดของคุณสร้างหรือแก้ไขไฟล์. .zshenvbash ในไดเรกทอรีโฮมเมดของคุณสร้างหรือแก้ไขไฟล์. .bash_profiletcsh ในไดเรกทอรีโฮมสอร์ของคุณสร้างหรือแก้ไขไฟล์ที่เกี่ยวข้องของเชลล์ tcshmf2ff ด้วย python3 -m mf2ff ... ในเซสชันเชลล์ใหม่ โดยค่าเริ่มต้น mf2ff จะสร้างไฟล์ฐานข้อมูล FONT (.SFD) คุณสามารถใช้ตัวเลือก -ttf / mf2ff.options['ttf'] = True หรือ -otf / mf2ff.options['otf'] = True เพื่อสร้างแบบอักษรโดยตรง
mf2ff ไม่ได้ทำความสะอาดมากนักโดยค่าเริ่มต้นเนื่องจากคุณอาจต้องการทำการปรับสภาพริ่งใหม่ด้วยตนเอง คุณสามารถใช้ตัวเลือก -cull-at-shipout / mf2ff.options['cull-at-shipout'] = True หรือ -remove-artifacts / mf2ff.options['remove-artifacts'] = True เพื่อทำการทำความสะอาดอัตโนมัติ โปรดทราบว่าคำสั่ง cull ที่เป็นส่วนหนึ่งของคำจำกัดความของสัญลักษณ์อาจส่งผลให้ตัวเลือกการเลือก cull-at-shipout ไม่ได้ทำการเปลี่ยนแปลงใด ๆ เพิ่มเติมสำหรับร่ายมนตร์บางอย่าง
โปรดดูข้อ จำกัด ที่ระบุไว้ด้านล่าง
แนวคิดหลักของแนวคิด MF2VEC คือการทำให้ metafont เปลี่ยนเส้นทางเรขาคณิตของ Glyphs ไปยังโปรแกรมอื่น (ในกรณีของ mf2ff โปรแกรมนี้คือ Fontforge) แทนที่จะใช้มันเพื่อสร้างแบบอักษรบิตแมป สิ่งนี้เป็นไปได้เนื่องจากความจริงที่ว่า Metafont ภายในใช้คำอธิบายทางเรขาคณิตเดียวกันซึ่งต่อมาจำเป็นต้องใช้ในไฟล์ฟอนต์เวกเตอร์ - เส้นโค้งbézier
ทางอ้อมที่ใช้โดยทางเลือกบางอย่างในการแปลงเส้นโค้งbézierเป็นกราฟิกแรสเตอร์และย้อนกลับไปเป็นเส้นโค้งBézierถูกหลีกเลี่ยง โดยการใช้เรขาคณิตโดยตรงจะไม่มีข้อมูลหายไป
เนื่องจาก MetaFont ถูกใช้แทนเครื่องมืออื่น ๆ เช่น Metapost เพื่ออ่านไฟล์ .mf ไฟล์รหัส metafont ที่ไม่ได้แก้ไขสามารถใช้งานได้และไม่เพียง แต่รูปทรงเรขาคณิต แต่ยังเข้ารหัสอักขระขนาดกล่อง kerning และข้อมูลการแกะเป็นต้นถูกส่งไปยังแบบอักษรเวกเตอร์
การสกัดกั้นข้อมูลนี้ทำโดยการกำหนดคำสั่ง metafont ใหม่ เนื่องจาก Metafont ไม่สามารถโต้ตอบกับโปรแกรมอื่น ๆ ในระหว่างการรันไทม์การตีความไฟล์. mf และการสร้างแบบอักษรจะต้องแยกออกจากกันในเวลา ดังนั้นข้อมูล metafont จะใช้ในการสร้างกราฟิกบิตแมปจะถูกบันทึกไว้ในไฟล์บันทึกของ Metafont คำสั่งของ Metafont ได้รับการนิยามใหม่เพื่อให้ Metafont เขียนคุณสมบัติเรขาคณิตและฟอนต์ในไฟล์บันทึก เมื่อ MetaFont ได้ประมวลผลคำสั่งทั้งหมดของไฟล์ MetAfont ข้อมูลจะถูกอ่านจากไฟล์บันทึกแล้วประมวลผลเพื่อสร้างตัวอักษรแล้วลบออกจากไฟล์บันทึกเพื่อให้ชัดเจน
ความคิดเกี่ยวกับวิธีการนี้เกิดขึ้นในเดือนตุลาคม 2561 เพื่อตรวจสอบความสามารถในการปฏิบัติการดำเนินการสำหรับ Fontforge ได้รับการรับรู้ทันทีใน Python และช่วงของคำสั่งที่รองรับได้ขยายออกไปอย่างต่อเนื่อง เมื่อการทดสอบเบื้องต้นแสดงให้เห็นว่าแนวคิดนี้ได้รับการตัดสินใจว่าจะทำให้ mf2ff พร้อมใช้งานสำหรับผู้ใช้ที่สนใจรายอื่น สิ่งนี้เกิดขึ้นตั้งแต่เดือนมีนาคม 2562 หลังจากการปรับปรุงและการแก้ไขข้อผิดพลาดเล็กน้อยการพัฒนาถูกหยุดชั่วคราวไม่กี่ปี เนื่องจากข้อเสนอแนะของชุมชนการพัฒนา mf2ff ยังคงดำเนินต่อไปในเดือนกรกฎาคม 2566
แนวคิดพื้นฐาน
แนวคิดนี้ขึ้นอยู่กับคำสั่ง metafont พื้นฐานใหม่ พวกเขาถูกกำหนดในลักษณะที่ข้อมูล Metafont ใช้เพื่อสร้างตัวอักษรบิตแมปถูกเขียนลงในไฟล์บันทึก ต่อจากนั้นไฟล์บันทึกนี้จะถูกอ่านและคำแนะนำจะถูกส่งผ่านไปยังโปรแกรมที่สร้างแบบอักษรเวกเตอร์จากมัน ตัวอย่างเช่น mf2ff ใช้ FontForge เพื่อจุดประสงค์นี้ หลังจากนั้นข้อมูลที่เพิ่มโดยคำสั่ง metafont ที่แก้ไขจะถูกลบออกจากไฟล์บันทึกเพื่อให้ชัดเจน
แผนภาพต่อไปนี้แสดงแนวคิดโดยใช้ mf2ff เป็นตัวอย่าง
┌──────────┐
│ font.mf │
└──────────┘
v
┌──────────┐ ┌───────────┐
│ │ > │ METAFONT │
│ │ └───────────┘
│ │ v
│ │ ┌───────────┐
│ mf2ff │ < │ font.log │
│ │ └───────────┘
│ │
│ │ ┌───────────┐
│ │ > │ FontForge │
└──────────┘ └───────────┘
v v
┌──────────┐ ┌─────────────────────┐
│ font.log │ │ font.ttf / font.otf │
└──────────┘ └─────────────────────┘
ตัวอย่างง่ายๆ
การเพิ่มรหัสต่อไปนี้ในไฟล์ metafont จะทำให้ metafont ไม่ fill contour c แต่เพื่อเขียนการดำเนินการไปยังไฟล์บันทึก:
def fill expr c =
message "fill"; show c;
enddef;
หลังจากการประมวลผลของ Metafont เสร็จสิ้นสคริปต์จะวิเคราะห์ไฟล์บันทึกและรู้ว่ามีคำสั่ง fill และรู้ว่ารูปร่างที่จะเติมเต็ม ข้อมูลนี้สามารถส่งผ่านไปยังโปรแกรมการประมวลผลแบบอักษรเพื่อเพิ่มลงใน Glyph
ในความเป็นจริงกระบวนการนี้มีความซับซ้อนมากขึ้น เพื่อให้สามารถประมวลผลไฟล์ metafont ที่ไม่ได้ขึ้นอยู่กับ metafont ธรรมดาคำสั่งเช่น addto แทนคำสั่งเช่น fill จำเป็นต้องนิยามใหม่ แต่คำสั่ง addto เหล่านั้นมีความซับซ้อนมากขึ้น พวกเขายังเป็นพื้นฐานสำหรับคำสั่ง metafont ธรรมดาอื่น ๆ เช่น unfill , ( un ) draw , ( un ) drawdot และ erase คำสั่งเหล่านี้ขยายไปยังคำหลักหลายคำที่แยกส่วนต่าง ๆ ของข้อมูลที่จำเป็นในการดำเนินการ contour แตกต่างกันเหล่านี้ ( addto , also , doublepath , withpen , withweight )
ความท้าทายอีกประการหนึ่งคือลำไส้ใหญ่ในสภาพและลูป โครงสร้างเหล่านี้สามารถปรากฏในคำสั่งอื่น ๆ แม้ในคำสั่งที่ใช้ลำไส้ใหญ่เป็นตัวคั่น ( ligtable และ fontdimen ) ดังนั้น : ต้องนิยามใหม่เช่นคำหลักอื่น ๆ เพื่อส่งออกข้อมูลไปยังไฟล์บันทึก จำเป็นต้องมีการสลับการเปลี่ยนนิยามใหม่ที่แตกต่างกันของลำไส้ใหญ่ที่แตกต่างกันภายในคำสั่งเหล่านี้
นอกจากนั้นกระบวนการจะต้องมีการใช้งานเพื่อให้ง่ายต่อการค้นหาคำสั่งทั้งหมดในไฟล์บันทึกแม้ว่าจะมีคำสั่งข้อความในไฟล์ metafont ที่ไม่เกี่ยวข้องกับการนิยามใหม่ของ metafont primitives สิ่งเหล่านี้ไม่ควรตีความว่าเป็นข้อมูลสำหรับการสร้างแบบอักษร ดังนั้นข้อมูลทั้งหมดที่เขียนในไฟล์บันทึกจะต้องถูกแนบมาในคำหลักพิเศษซึ่งไม่น่าจะใช้ในคำสั่งข้อความของไฟล์ MetaFont
Metafont พัฒนาโดย De Knuth ตั้งแต่ปี 1977 เป็นโปรแกรมที่สร้างแบบอักษรบิตแมปจากไฟล์ที่เขียนในภาษา MetaFont แบบอักษรบิตแมปมีข้อเสียที่ว่าพวกเขาจะเบลอภายใต้การขยาย Metafont ได้รับการพัฒนาเพื่อให้ความละเอียดเฉพาะของเครื่องพิมพ์มีการสร้างแบบอักษรแยกต่างหาก ทุกวันนี้ฟอนต์เวกเตอร์เป็นมาตรฐานซึ่งไม่มีปัญหานี้ภายใต้การขยาย ดังนั้นจึงเหมาะสำหรับการใช้งานบนจอแสดงผล ยิ่งไปกว่านั้นพวกเขาสามารถใช้กับเครื่องพิมพ์ทุกเครื่องโดยไม่มีข้อ จำกัด ใด ๆ
นอกจากวิธี MF2VEC ด้วย mf2ff ที่นำเสนอที่นี่สคริปต์ต่อไปนี้สำหรับการแปลงไฟล์ metafont เป็นฟอนต์เวกเตอร์มีอยู่:
| ชื่อ | วิธี |
|---|---|
| metatype1 | อภิปรัชญา |
| MF2PT1 | อภิปรัชญา |
| mftrace | การติดตามบิตแมป |
| textrace | การติดตามบิตแมป |
ในบริบทนี้ Metapost หมายความว่าโปรแกรม metapost ใช้เพื่อแปลงอักขระทุกตัวของไฟล์ metafont เป็นกราฟิกเวกเตอร์ หลังจากนั้นกราฟิกเวกเตอร์จะถูกรวมเข้าด้วยกันเพื่อรับแบบอักษรเวกเตอร์ วิธีนี้มีข้อเสียที่ metapost สามารถประมวลผลส่วนหนึ่งของภาษา metafont เท่านั้น
การติดตามบิตแมปหมายความว่า metafont สร้างตัวอักษรบิตแมปก่อน ในโปรแกรมแยกต่างหากบิตแมปของร่ายมนตร์ทุกตัวจะถูกติดตามแล้วรวบรวมเพื่อรับแบบอักษรเวกเตอร์
แต่ละวิธีมีข้อเสียเฉพาะ โปรดดูการเปรียบเทียบด้านล่างสำหรับรายละเอียดเพิ่มเติม
ในตารางต่อไปนี้แสดงการเปรียบเทียบสคริปต์ที่มีอยู่เพื่อแปลงไฟล์ metafont เป็นแบบอักษรเวกเตอร์
| ลักษณะ | metafont | mf2ff | metatype1 | MF2PT1 | mftrace | textrace |
|---|---|---|---|---|---|---|
| สคริปต์เขียนไว้ใน | - | Python 3 | Perl | Perl | งูหลาม 2 | Perl |
| การประมวลผลไฟล์ metafont | metafont | metafont | อภิปรัชญา | อภิปรัชญา | metafont | metafont |
| การประมวลผลที่ตามมา | - | ฟอร์ฟฟอร์จ | awk / t1asm | T1ASM | autotrace หรือ potrace / t1asm | การทำงานอัตโนมัติ |
| รูปแบบเอาต์พุต | GF / TFM | ✅ TTF, OTF, SFD | - PFB | - PFB | ✅ AFM / PFA / PFB / TTF / SVG | - PFB |
| คุณภาพเอาท์พุท | บิตแมป | ✅เวกเตอร์กราฟิก | ✅เวกเตอร์กราฟิก | ✅เวกเตอร์กราฟิก | - ติดตามบิตแมป | - ติดตามบิตแมป |
| นิยามใหม่ที่ไม่ใช่สิทธิประโยชน์ / ต้องการที่ไม่ใช่สิทธิประโยชน์ | ✅ไม่ | ✅ไม่ | ใช่ | ใช่ | ✅ไม่ | ✅ไม่ |
| การสนับสนุน Unicode | เลขที่ | ✅ใช่ | เลขที่ | เลขที่ | เลขที่ | |
| รองรับคำสั่งปากกา | ✅ใช่ | - ถูก จำกัด | เลขที่ | - ถูก จำกัด | ✅ใช่ | ✅ใช่ |
| รองรับคำสั่งมัดและ kerning | ✅ใช่ | - ถูก จำกัด | เลขที่ | |||
| รองรับฟอนต์ตัวแปร | เลขที่ | ไม่อาจเป็นไปได้ในอนาคต | เลขที่ | เลขที่ | เลขที่ |
ต่อไปนี้เป็นตัวอย่างบางส่วนที่สร้างขึ้นด้วย mf2ff โครงร่างและอักขระที่เติมเต็มจะปรากฏขึ้นตามที่แสดงใน Fontforge โปรดทราบว่าผลลัพธ์ยังไม่สมบูรณ์แบบ
ร่ายมนตร์ของคอมพิวเตอร์ที่ทันสมัยบางตัวยังไม่ถูกประมวลผลอย่างถูกต้องเช่นส่วนกลางของ Capital S และ sloped_serif ในตัวอักษรตัวพิมพ์เล็ก

![]() | ![]() | ![]() |
ภาพทางด้านซ้ายถูกสร้างขึ้นโดยการปิดใช้งานคำสั่ง cull
ต้นไม้เรดวู้ดเรดวู้ดที่เก๋ไก๋เอลพาโลอัลโตซึ่งนำเสนอในหน้า 124-126 ของ Metafontbook ในเวอร์ชันด้านซ้ายตัวเลือก cull-at-shipout จะเปิดใช้งาน เนื่องจากลำตัวและสาขาสูงสุดแบ่งปันจุดบนเส้นโค้งการดำเนินการในปัจจุบันทำให้เกิดผลลัพธ์ที่ผิด
![]() | ![]() | ![]() | ![]() |
โลโก้ซึ่งนำเสนอในหน้า 138, metafontbook ในเวอร์ชันด้านซ้ายตัวเลือก cull-at-shipout จะเปิดใช้งาน โลโก้ที่เติมเต็มจะเหมือนกันในทั้งสองกรณี
![]() | ![]() | ![]() |
mf2ff เนื่องจาก mf2ff ยังอยู่ระหว่างการพัฒนาและไม่ได้ทดสอบอย่างละเอียดจึงมีข้อ จำกัด เล็กน้อย พวกเขาอาจได้รับการแก้ไขในการอัปเดตในอนาคต
หากข้อ จำกัด เฉพาะคือการระงับโครงการของคุณให้เปิดปัญหาเพื่อให้การอัปเดตในอนาคตสามารถมุ่งเน้นไปที่ความต้องการของผู้ใช้
penrazor (ดูตัวอย่างอันตราย _bend_symbol), Fontforge: "ความกว้างของโรคหลอดเลือดสมองไม่สามารถเป็นศูนย์ได้"penspeck เพิ่มคำเตือน แต่ผลลัพธ์ที่ได้ดูเหมือนจะโอเคในบางกรณีcull มี จำกัด: , :: , kern , skipto และตัวดำเนินการมัด =: |=: =:| และ |=:| ได้รับการสนับสนุน คำสั่ง ligtable ละเว้น > ในตัวดำเนินการ ยิ่งไปกว่านั้นผู้ประกอบการ ||: ไม่ได้รับการสนับสนุนcharlist หรือคำสั่ง extensible ยังได้รับการสนับสนุนpicture จะต้องได้รับการนิยามใหม่เพื่อเริ่มต้นตัวแปรรูปภาพเป็นเลเยอร์เวกเตอร์ Fontforge เนื่องจาก Metafont ใช้คำหลักประเภทสำหรับทั้งคู่การประกาศตัวแปรและการทดสอบประเภทในการแสดงออกของบูลีนคำหลักของ picture ไม่สามารถใช้เพื่อทดสอบได้ว่าตัวแปรเป็นประเภท picture หรือไม่makepen และ makepath จึงไม่มีผล ปากกาและเส้นทางไม่สามารถแยกแยะได้โดยใช้ pen หรือ path ในการแสดงออกของบูลีน มีตัวเลือก is_type ที่แนะนำ is_pen หรือ is_path ซึ่งอาจช่วยให้คุณหลีกเลี่ยงปัญหานี้ได้ligtable และ fontdimenmf2ff จำเป็นต้องกำหนดลำไส้ใหญ่ใหม่ ( : สิ่งนี้อาจทำให้เกิดปัญหาในการประมวลผลหลายซ้อนกัน if ... ( elseif ) ... ( end ) ... fi และ / หรือ for / forsuffixes / forever ... endfor ภายในของคำสั่งที่ใช้ลำไส้ใหญ่ในไวยากรณ์ของตัวเองเช่น ligtable และ fontdimencharlist และ extensibleมีบางสิ่งที่อาจช่วยได้ โปรดทราบว่าฉันไม่เข้าใจพวกเขา 100%:
/usr/local/lib/python3/dist-packages ไปยัง $PYTHONPATH ของคุณexport PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3/dist-packages ไปยัง ~/.profile ของคุณ)/usr/local/lib/python3.4/site-packages ไปยังเส้นทางของ Python