AFM2PL(1) afm2pl AFM2PL(1)

afm2pl - تبدیل متریک‌های قلم AFM به متریک‌های قلم TeX pl

afm2pl [-p encoding_file] [-o] [-e extension_factor] [-s slant_factor] [-f font_dimensions] [-k] [-m letter_spacing] [-l ligkern_spec] [-L ligkern_spec] [-n] input_file[.afm] [output_file[.pl]]

afm2pl [--help] | [--version]

ابزار afm2pl یک فایل afm (معیار قلم ادوبی یا Adobe Font Metric) را به یک فایل pl (فهرست ویژگی‌ها یا Property List) تبدیل می‌کند که این فایل نیز به نوبه خود می‌تواند به یک فایل tfm (معیار قلم تک یا TeX Font Metric) تبدیل شود. این ابزار معمولاً فاصله‌گذاری‌های جفتی (kerns) و حروف متصل (ligatures) را حفظ می‌کند، اما امکان کنترل بیشتر بر روی آن‌ها را نیز فراهم می‌سازد.

ابزار afm2pl به عنوان یک جایگزین جزئی برای afm2tfm در نظر گرفته شده است، برنامه‌ای که خود بر پایه آن توسعه یافته است. با استفاده از afm2tfm، حفظ فاصله‌گذاری‌های جفتی و حروف متصل تنها از روش‌های غیرمستقیم امکان‌پذیر است و مدیریت آن‌ها به صورت پیش‌فرض و غیرقابل انعطاف (hard-wired) تنظیم شده است.

برای قلم‌های متنی، کدگذاری texnansi متعلق به Y&Y کدگذاری مناسبی برای استفاده با afm2pl است. مجموعه نویسه‌های آن شامل تمام نویسه‌های اعراب‌دار و نشانه‌دار مورد نیاز زبان‌های غربی به همراه نمادهای حروف‌چینی فراوان است، بدون اینکه نیازی به قلم‌های مجازی (virtual fonts) یا یک قلم متن کمکی جداگانه باشد.

پشتیبانی کامل LaTeX از این کدگذاری در قالب بسته texnansi در دسترس است که از قبل بخشی از TeX Live و teTeX به شمار می‌رود. این توزیع‌ها همچنین حاوی فایل کدگذاری texnansi.enc هستند.

این توزیع شامل نسخه‌های با حروف بزرگ و کوچک texnansi، یعنی texnanuc و texnanlc است تا تبدیل به حروف بزرگ یا کوچک را به‌جای روش مبتنی بر ماکرو، به روش مبتنی بر قلم امکان‌پذیر سازد؛ همچنین کدگذاری قدیمی و آشنای ot1 به همراه برخی نسخه‌های تغییریافته در قالب PostScript .enc در آن گنجانده شده است (این موارد به این دلیل اضافه شده‌اند که به نظر می‌رسد در teTeX/TeX Live وجود ندارند). با این حال، اگر قلم‌های قدیمی تولیدشده با afm2pl دارید که از این موارد استفاده می‌کنند، فایل‌های نگاشت (mapfiles) خود را بررسی کنید.

مقدار بازگشتی: 0 در صورت عدم وجود خطا؛ یک عدد منفی نشان‌دهنده تعداد گلیف‌های (glyphs) گمشده در صورتی که تبدیل به طور کلی موفقیت‌آمیز بوده اما گلیف‌هایی مفقود باشند؛ و 1 در صورت بروز خطا.

-p encoding_file

پیش‌فرض، کدگذاری مشخص‌شده در فایل afm است، که بهتر است با کدگذاری فایل قلم (pfa یا pfb) مطابقت داشته باشد. اگر afm2pl-name.enc وجود داشته باشد، afm2pl از این فایل به‌جای name.enc استفاده خواهد کرد، مگر اینکه گزینه -n داده شده باشد. ورودی ایجادشده در mapfile (زیر را ببینید) به pdftex یا درایور dvi دستور می‌دهد تا قلم را به صورت بی‌درنگ (on the fly) بازکدگذاری کند. بازکدگذاری بی‌درنگ نیازی به قلم‌های مجازی ندارد.

-o

استفاده از مبنای هشت (اکتال) برای تمامی کدهای نویسه در فایل pl.

-e extend_factor

پهن یا باریک کردن نویسه‌ها به اندازه extend_factor. مقدار پیش‌فرض 1.0 (عرض طبیعی) است. توصیه نمی‌شود[1].

-s slant_factor

مورب (کج) کردن نویسه‌ها به اندازه slant_factor. این مورد نیز توصیه نمی‌شود.

-f font_dimensions

مقدار ورودی یا کلمه کلیدی afm2tfm است یا فهرستی از حداکثر پنج عدد صحیح جداشده با کاما. پارامترها در جدول زیر به همراه مقادیر پیش‌فرض آن‌ها و مقادیرشان در هنگام مشخص کردن کلمه کلیدی afm2tfm فهرست شده‌اند. اصطلاح ‘Space’ به معنای عرض یک فاصله در قلم مقصد است، به استثنای ردیف آخر. در نظر داشته باشید که اندازه طراحی (design size) برابر با 1000 است و تمام اعداد باید اعداد صحیح نامنفی باشند.
ابعاد قلم مقدار پیش‌فرض مقدار Afm2tfm
stretch space div 2 300 × extend_factor
shrink space div 3 100 × extend_factor
extra space space div 3 موجود نیست
quad 2 × عرض ‘0’ 1000 × extend_factor
space (فاصله قلم مبدأ) × extend_factor (فاصله قلم مبدأ) × extend_factor

برای قلم‌های با عرض ثابت (fixed-pitch)، مقادیر متفاوتی اعمال می‌شود:

ابعاد قلم مقدار پیش‌فرض مقدار Afm2tfm
stretch 0 0
shrink 0 0
extra space space موجود نیست
quad 2 × عرض نویسه 1000 × extend_factor
space عرض نویسه عرض نویسه

برای تعیین کشیدگی (stretch) و جمع‌شدگی (shrink) غیر پیش‌فرض، مثلاً مقدار 150,70 و فقط برای یک extra space غیر پیش‌فرض، مقدار ,,10 را مشخص کنید. -k

حفظ لیگاتورهای اصلی. این گزینه تنها در ترکیب با فاصله‌گذاری مثبت میان حروف (letterspacing) تأثیرگذار است؛ بخش مربوط به فاصله‌گذاری میان حروف و اطلاعات اضافی ligkern را ببینید.

-m letter_spacing

فاصله‌گذاری میان حروف به اندازهٔ letter_spacing/1000 em (عدد صحیح). این گزینه برای زیباتر کردن حروف‌چینی متن‌های تمام‌بزرگ (all-caps) سودمند است. مقداری مانند ۵۰ یا ۱۰۰ را امتحان کنید. اما برای جزئیات به بخش مربوط به فاصله‌گذاری میان حروف و اطلاعات اضافی ligkern مراجعه کنید. با این حال، گزینهٔ بهتر این است که اجازه دهید خود pdftex فاصله‌گذاری میان حروف را انجام دهد. بستهٔ microtype دسترسی به این قابلیت را برای کاربران LaTeX فراهم می‌کند.

-l ligkern_spec, -L ligkern_spec

برای جزئیات به بخش اطلاعات اضافی ligkern مراجعه کنید.

-n

بدون پیشوند. برای پرونده‌های .enc- و .lig، برنامه در حالت عادی ابتدا پیشوند `afm2pl-´ را به ابتدای نام می‌افزاید. تنها در صورتی که نام پرونده با پیشوند یافت نشود، به دنبال نام اصلی پرونده خواهد گشت. این گزینه از جستجو به دنبال نام پرونده با پیشوند جلوگیری می‌کند.

-V

پُرگویی (Verbose). در صورت فعال بودن، شمار گلیف‌های ناموجود را به stderr و نام‌هایشان را به stdout گزارش می‌دهد.

--help

نمایش یک پیام کوتاه دربارهٔ نحوهٔ استفاده.

--version

نمایش شمارهٔ نسخهٔ afm2pl.

ابزار afm2pl یک مدخل mapfile را در پرونده‌ای با همان نام پایهٔ پروندهٔ خروجی pl اما با پسوند .map می‌نویسد. این مدخل می‌تواند برای mapfile ابزار dvips و mapfile ابزار pdftex استفاده شود. فرض بر این است که پروندهٔ pfb همان نام پایهٔ پروندهٔ afm را داشته و باید بارگیری شود. ممکن است مجبور شوید این مدخل را به صورت دستی ویرایش کنید.

می‌توانید dvips و pdftex را برای خواندن این mapfile اضافی پیکربندی کنید یا در غیر این صورت، این مدخل را به یک mapfile موجود بیفزایید.

پرونده‌های نگاشت (mapfiles) خود را بررسی کنید! برای کاهش احتمال تداخل نام‌ها، پرونده‌های .enc- که بخشی از afm2pl هستند (ot1، ot1csc، ot1ital، ot1tt، texnanlc و texnanuc) اکنون با پیشوند afm2pl- ارائه می‌شوند. در پرونده‌های mapfile به پرونده‌های .enc ارجاع داده می‌شود. اگر پرونده‌های .tfm قدیمی ایجاد شده توسط afm2pl دارید که از این‌ها استفاده می‌کنند، باید قطعه‌های mapfile آن‌ها را به‌روز کرده و updmap یا updmap-sys را مجدداً اجرا کنید. یا می‌توانید پرونده‌های enc مربوطه را با همان نام‌های قبلی و بدون پیشوند در درخت texmf شخصی یا محلی خود رونوشت کنید.

به بیشتر کاربران اکیداً توصیه می‌شود که این درهم‌ریختگی را به حال خود رها کرده و رفتار پیش‌فرض را بپذیرند.

لیگاتورها و کرنینگ‌های موجود در پروندهٔ afm را می‌توان به روش‌های گوناگونی تغییر داد. به‌طور پیش‌فرض، پروندهٔ کدگذاری برای یافتن مشخصات اضافی ligkern، که قالب آن در ادامه شرح داده خواهد شد، پویش می‌شود. اگر هیچ مشخصهٔ ligkern در پروندهٔ کدگذاری وجود نداشته باشد، مشخصات اضافی ligkern از پرونده‌ای به نام [afm2pl-]default.lig خوانده خواهند شد. مقدار 0 برای ligkern_spec به این معنی است که لیگاتورها و کرنینگ‌های پروندهٔ afm دست‌نخورده باقی می‌مانند و مقدار 1 رفتار پیش‌فرض را تعیین می‌کند. همچنین می‌توان فهرستی از پرونده‌ها را که با کاما از هم جدا شده‌اند به عنوان مشخصات اضافی ligkern تعیین کرد.

اگر afm2pl با کتابخانهٔ kpathsea کامپایل شده باشد، این پرونده‌ها در مسیر $TEXMF/fonts/lig جستجو خواهند شد.

توجه داشته باشید که لیگاتورها و کرنینگ‌ها نکاتی راهنما برای برنامهٔ حروف‌چینی هستند؛ نیازی به بارگیری این اطلاعات به چاپگر یا در دسترس قرار دادن آن برای درایور dvi نیست.

تجزیه‌کنندهٔ اطلاعات ligkern تقریباً بدون هیچ تغییری از afm2tfm به ارث رسیده است. یک مشخصهٔ ligkern می‌تواند یکی از قالب‌های زیر را داشته باشد:

glyph_name1 glyph_name2 lig_op glyph_name3 ;

این عبارت یک لیگاتور را مشخص می‌کند. مقادیر ممکن برای lig_op عبارتند از =:, |=:, |=:>, =:|, =:|>, |=:|, |=:|> و |=:|>>. این مقادیر در نحو .pl متناظرند با LIG, /LIG, /LIG>, LIG/, LIG/>, /LIG/, /LIG/>, /LIG/>>؛ مستندات pltotf و پرونده‌های .lig موجود در توزیع را ببینید.

glyph_name1 <> glyph_name2 ;

کرنینگ دادن به glyph_name1 همانند glyph_name2.

glyph_name1 {} glyph_name2 ;

حذف کرنینگ میان glyph_name1 و glyph_name2. مقدار * برای هر یک از نام‌های گلیف به عنوان نویسهٔ عام (wildcard) تفسیر می‌شود.

|| = glyph ;

تنظیم نویسهٔ مرز (سمت راست) روی glyph. glyph می‌تواند یک glyphname یا یک جایگاه در بردار کدگذاری باشد. انتخاب گلیفی که در کدگذاری خروجی وجود ندارد معادل تعیین نکردن boundarychar است. انتخاب یک glyphname کدگذاری شده که در afm وجود ندارد اشکالی ندارد. در واقع، این همان کاری است که default.lig انجام می‌دهد: || = cwm ;.

می‌توانید کرنینگ‌های یک نویسهٔ بدون کدگذاری را در boundarychar رونوشت کنید. در زیر، space نویسهٔ بدون کدگذاری است:

|| <> space ;

این مشخصهٔ ligkern باید پیش از مشخصه‌ای قرار گیرد که کرنینگ‌های space را حذف می‌کند.

یک مشخصهٔ ligkern باید در یک خط گنجانده شود. یک خط می‌تواند شامل چندین مشخصهٔ ligkern باشد که با فاصله از هم جدا شده‌اند. توجه داشته باشید که ; (فاصله و به دنبال آن نقطه-ویرگول) بخشی از مشخصهٔ ligkern در نظر گرفته می‌شود. پرونده‌های lig موجود در این توزیع را ببینید. مثال:

one {} * ; * {} one ; two {} * ; * {} two ;

سطرهای حاوی مشخصات ligkern در داخل یک پروندهٔ کدگذاری باید با % LIGKERN آغاز شوند. مشخصات ligkern در یک پروندهٔ lig می‌توانند به صورت اختیاری به همین شکل آغاز گردند..SH "فاصله‌گذاری حروف و اطلاعات اضافی LIGKERN (LETTERSPACING AND EXTRA LIGKERN INFO)"

فاصله‌گذاری حروف اثرات جانبی گوناگونی بر اطلاعات ligkern دارد. به جای اِعمال سادهٔ اطلاعات ligkern اضافی (بخش پیشین را ببینید)، اقدامات زیر انجام می‌شود:

1.
در صورت فاصله‌گذاری مثبت میان حروف، لیگچرهای بومی حذف می‌شوند، مگر اینکه گزینهٔ -k مشخص شده باشد.
2.
اطلاعات ligkern اضافی طبق روال معمول اِعمال می‌شود، جز اینکه در صورت فاصله‌گذاری مثبت میان حروف، پیش‌فرض‌های متفاوتی اِعمال می‌گردد: -l 0 بدون اخطار نادیده گرفته می‌شود، کامنت‌های ligkern در فایل کدگذاری نادیده گرفته می‌شوند، و defpre.lig به جای default.lig خوانده می‌شود.
3.
فاصله‌گذاری حروف اِعمال می‌شود. این کار کرنینگ‌های (kerns) فراوانی اضافه کرده و کرنینگ‌های موجود را تغییر می‌دهد.
4.
اطلاعات ligkern اضافی مشخص‌شده با -L اِعمال می‌شود. تنها مشخصه‌های ligkern مجاز در اینجا، حذف جفت‌های کرنینگ (با عملگر {} ) هستند. مقادیر 0 و 1 معنای مشابهی با پارامتر -l دارند. فرمت tfm تنها برای حدود ۱۸۰×۱۸۰ لیگچر و جفت کرنینگ فضا دارد. این مقدار برای کدگذاری OT1 کافی است، اما برای کدگذاری texnansi باید تعداد مشخصه‌های ligkern متعددی حذف شوند. در صورتی که لیگچرها و کرنینگ‌های باقی‌مانده بیش از حد باشد، برنامهٔ pltotf تمام اطلاعات ligkern را حذف خواهد کرد. فایل lig پیش‌فرض defpost.lig است. این فایل جفت‌های کرنینگی را که احتمال مشارکت آن‌ها در فاصله‌گذاری حروف کم است کنار می‌گذارد، مانند کرنینگ‌های شامل اعراب (accents) یا کرنینگ‌هایی با یک نویسهٔ نشانه‌گذاری یا قلاب راست در سمت چپ. این فایل کرنینگ‌های فاصله‌گذاری حروف شامل boundarychars را اضافه نمی‌کند. در عوض، fontspace به اندازهٔ دو برابر فاصله‌گذاری حروف افزایش می‌یابد. defpost.lig در صورت استفاده از کدگذاری texnansi به اندازهٔ کافی کرنینگ‌ها را حذف می‌کند. با سایر کدگذاری‌ها، ممکن است مجبور شوید جفت‌های کرنینگ بیشتری را حذف کنید.

توزیع شامل بردارهای کدگذاری texnanuc.enc و texnanlc.enc است که قلم‌های کاملاً با حروف بزرگ و کاملاً با حروف کوچک را تولید می‌کنند.

کاربردهای اصلی یک قلم کاملاً بزرگ، سربرگ صفحات و عناوین بخش‌ها است. اگر این موارد حاوی فرمول‌های ریاضی باشند، بزرگ‌نویسی مبتنی بر ماکرو پیچیدگی‌های ناخوشایندی ایجاد خواهد کرد. مثال:

afm2pl -p texnanuc ptmr8a ptmup8y
pltotf ptmup8y

برای دریافت بهترین نتیجه، باید مقداری فاصله‌گذاری میان حروف اضافه کنید. در LaTeX، این کار به بهترین نحو با بستهٔ microtype انجام می‌شود؛ مستندات آن بسته را ببینید. اما با afm2pl نیز قابل انجام است:

afm2pl -p texnanuc -m 100 ptmr8a ptmup8y

این کار نیازمند احتیاط است؛ بخش بالا را ببینید.

می‌توانید از این قلم جدید در چارچوب انتخاب قلم LaTeX به صورت زیر استفاده کنید:

<preamble commands>
\makeatletter
{\nfss@catcodes
\DeclareFontShape{LY1}{ptm}{m}{upp}{<-> ptmup8y}{}}
\makeatother
...
\begin{document}
...
{\fontshape{upp}\selectfont uppercase text}

توجه داشته باشید که upp صرفاً یک نام شکل (shape) جدید و فرضی است..SS "لیگاتور sz ß (The sz ligature ß)"

توجه داشته باشید که کدگذاری texnanuc هیچ گلیفی برای لیگاتور sz یا ß ارائه نمی‌دهد؛ باید یا ss را جایگزین کنید یا یک راه‌حل مبتنی بر ماکرو به کار ببرید. کد زیر بسته به اینکه آیا گلیف در قلم فعلی وجود دارد یا خیر، از گلیف معمول استفاده می‌کند یا حروف ss را جایگزین می‌نماید:

\def\ss{%
  \setbox0\hbox{\char25}%
  \ifnum\wd0=0 ss\else\box0\fi
}

در LaTeX، به نظر می‌رسد این کد به اندازه کافی خوب کار می‌کند، اگرچه گاهی اوقات ممکن است نیاز به درج \protect داشته باشید. یک راه‌حل بهتر ممکن است شامل پارامتر ششمِ ماکروی \DeclareFontShape باشد، اما من نتوانستم آن را به کار بیندازم.

برنامه afm2pl قلم‌های مجازی (virtual fonts) ایجاد نمی‌کند. این بدان معناست که برای مواردی مانند حروف کوچک ساختگی (artificial smallcaps) باید به جای دیگری رجوع کنید، برای نمونه بستهٔ fontinst که بخشی از هر توزیع اصلی TeX است.

برای یافتن فایل‌های پشتیبانی fontinst، مسیر texmf/tex/fontinst را بررسی کنید؛ این فایل‌ها به شما اجازه می‌دهند یک قلم حروف کوچک ساختگی (فایل‌های tfm و vf) را از یک فایل tfm تولیدشده توسط afm2pl بسازید. این بسته فقط از کدگذاری texnansi پشتیبانی می‌کند.

انجام همین کار برای کدگذاری OT1 نباید مشکل خاصی ایجاد کند. با این حال، چندین گونه از کدگذاری OT1 وجود دارد که باید در نظر گرفته شوند. همچنین، تا آنجا که من می‌دانم هیچ نام رسمی و تأییدشدهٔ PostScript برای تمام گونه‌های کدگذاری OT1 وجود ندارد؛ نام‌های fontinst حاوی فاصله هستند و بنابراین نمی‌توان از آن‌ها به عنوان نام‌های PostScript استفاده کرد.

به منظور جلوگیری از تداخل نام‌ها، به ابتدای نام فایل‌های .enc- و .lig توزیع‌شده به همراه afm2pl، پیشوند afm2pl- افزوده شد. خود برنامه اکنون ابتدا به دنبال نامی با این پیشوند می‌گردد. اگر فایل .enc- یا .lig یافت نشد، برنامه به دنبال نام فایل اصلی خواهد گشت. تغییر نام فایل‌های .enc برنامه afm2pl ممکن است نیازمند اصلاح برخی از mapfileها باشد.

صفحهٔ خانگی afm2pl عبارت است از http://tex.aanhet.net/afm2pl.

مقالهٔ Font installation the shallow way[2] (مجموعه مقالات EuroTeX 2006، منتشرشده در شمارهٔ 27.1 نشریهٔ TUGboat[3]) نحوهٔ استفاده از afm2pl را شرح می‌دهد.

1.
به جز این نکته که مسلماً یک قلم Courier باریک‌شده هنگام استفاده در ترکیب با یک قلم متناسب (proportional) عادی، ناهماهنگی کمتری نسبت به یک Courier با عرض کامل دارد. برای Courier، مقدار .833 را انتخاب کنید تا با عرض cmtt مطابقت داشته باشد. حتی بهتر از آن، اصلاً از Courier استفاده نکنید؛ بیشتر توزیع‌های TeX جایگزین‌های مناسب گوناگونی ارائه می‌دهند.
2.
Font installation the shallow way

برنامه afm2pl به عنوان بخشی از TeX Live نگهداری می‌شود.

30 August 2022