MF(1) General Commands Manual MF(1)

mf, inimf, mf-nowin - Metafont، زبانی برای طراحی قلم و نشان‌واره

mf [options] [&base] [ file [ more-input ] | [ \more-input ]

Metafont برنامه مبدأ را از فایل‌های مشخص‌شده می‌خواند و نقشه‌های بیتی قلم را در قالب gf (قلم عمومی یا generic font) و ابعاد قلم را در قالب tfm (ابعاد قلم TeX یا TeX font metric) خروجی می‌دهد. زبان Metafont در کتاب The Metafontbook توصیف شده است. به‌طور کلی، برنامه‌های Metafont چگونگی رسم نویسه‌ها در قلم‌ها یا سایر شکل‌ها را به روشی الگوریتمی توصیف می‌کنند.

روش معمول استفاده، اجرای دستور زیر است:

mf  '\mode=printengine; [mag=magstep(n);]' input  font

تا فایل font.mf با Metafont پردازش شود.

پردازش خط فرمان mf اساساً مشابه TeX است، به‌جز اینکه انتساب مرسوم به mode در خط فرمان به این معناست که فراخوانی mf با چند دستور (همان‌طور که نشان داده شد) و نه صرفاً با یک نام فایل معمول است. بدون بک‌اسلش اولیه، Metafont دقیقاً مانند TeX تلاش خواهد کرد فایلی با نام mode را بخواند. در یونیکس، استفاده از نقل‌قول تکی (single quote) ساده‌ترین راه برای جلوگیری از تفسیر (نادرست) بک‌اسلش، نقطه‌ویرگول، پرانتزها و غیره توسط شل است. همچنین می‌توانید mf را بدون آرگومان اجرا کرده و دستورها را در سطر بعدی، در پاسخ به اعلان «**» مربوط به mf، بدون هیچ نقل‌قولی وارد کنید.

در هر دو حالت، سایر دستورهای Metafont، مانند batchmode (برای کارکرد بی‌صدا) نیز می‌توانند قرار بگیرند. پسوند پیش‌فرض، «.mf»، می‌تواند با مشخص کردن صریح یک پسوند بازنویسی (override) شود.

نام font به عنوان «jobname» در نظر گرفته می‌شود و در تشکیل نام فایل‌های خروجی استفاده می‌شود. اگر Metafont در خط اول نام فایلی دریافت نکند، نام کار mfput خواهد بود. لاگ پیام‌های خطا به فایل jobname.log می‌رود. فایل‌های خروجی شامل jobname.tfm (برای ابعاد قلم) و jobname.<number>gf (برای نقشه‌های بیتی) هستند، که در آن <number> به تفکیک‌پذیری (وضوح) و بزرگ‌نمایی قلم تولیدشده بستگی دارد.

هنگامی که TeX نتواند قلمی را پیدا کند، Metafont همچنین می‌تواند توسط TeX از طریق (برای نمونه) اسکریپت mktextfm(1) (به آن رجوع کنید) فراخوانی شود.

خروجی Metafont

به‌صورت درونی، Metafont منحنی‌های بزیه درجه‌سوم (و خطوط مستقیم) را از برنامه مبدأ Metafont محاسبه می‌کند. با این حال، همان‌طور که در بالا ذکر شد، خروجی اصلی Metafont یک فایل نقشه‌بیتی (bitmap) است؛ یعنی با در نظر گرفتن دستگاه خروجی مورد نظر (بخش بعد را ببینید)، Metafont عملیات رستریزاسیون (شطرنجی‌سازی) را خودش انجام می‌دهد. (چرا؟ چون هدف کانوث از ایجاد TeX و Metafont کنترل کامل بر حروف‌چینی کتاب‌های خودش تا سطح تک‌تک پیکسل‌ها بود.)

از سوی دیگر، امروزه داشتن قلم‌های برداری (outline fonts) در خروجی‌های pdf (یا موارد دیگر) از TeX (یا سایر پردازنده‌های اسناد) تقریباً فراگیر شده است. این امکان وجود دارد که اسپلاین‌های محاسبه‌شده توسط Metafont را از فایل لاگ آن استخراج کرد، یا اینکه Metafont یک نقشه‌بیتی با وضوح بالا تولید کند و با ردگیری آن (مثلاً با autotrace(1))، دوباره به اسپلاین‌ها رسید؛ اما هر دوی این روش‌ها در بهترین حالت ناخوشایند هستند. استفاده از MetaPost (mpost(1)) راحت‌تر است، که به‌جای نقشه‌های بیتی خروجی PostScript می‌دهد، و به‌جای نسخه‌های شطرنجی‌شده، اسپلاین‌ها را خروجی می‌دهد. کدهای منبع Metafont عموماً بدون تغییر نمی‌توانند در MetaPost استفاده شوند، اما بسیار به هم نزدیک هستند. مقاله‌ای دقیق در این‌باره، در پروژه‌ای نسبتاً اولیه، توسط ریچارد کینچ (Richard Kinch) نوشته شده است: MetaFog: Converting Metafont shapes to contours, TUGboat 16:3, https://tug.org/TUGboat/tb16-3/tb48kinc.pdf).

فایل ابعاد قلم tfm که توسط Metafont خروجی داده می‌شود شامل اطلاعات ابعاد نویسه‌ها (ارتفاع، عرض، عمق) به همراه اطلاعات لیگچرها، فاصله‌گذاری بین جفت‌حروف (kerns) و غیره است؛ به‌طور خلاصه، هر آنچه برای حروف‌چینی با این قلم نیاز است. این فایل شامل خود شکل‌ها نمی‌شود. در مقابل، قلم‌های OpenType و TrueType هم اطلاعات ابعاد و هم اطلاعات شکل‌ها را در بر دارند، به همراه قابلیت‌های بسیار بیشتر (به‌طور بالقوه) برای حروف‌چینی در خط‌های غیرلاتین، که TeX و Metafont اولیه در سطح عام و مدرن به مدیریت آن‌ها نمی‌پردازند. (پروژه‌های زیادی برای حروف‌چینی با TeX در خط‌های غیرلاتین، چه پیش از یونیکد و چه همراه با یونیکد پس از در دسترس قرار گرفتن آن، وجود داشته است. مقالات مربوطه در TUGboat را می‌توان در آدرس زیر یافت: https://tug.org/TUGboat/Contents/listkeyword.html#CatTAGMultilingualDocumentProcessing.)

مشخصات فنی قالب‌های gf (نقشه‌بیتی) و tfm (ابعاد قلم) در برنامه مبدأ Metafont یا هر یک از برنامه‌های کمکی کاربردی برای قالب‌های مربوطه موجود است؛ فهرست انتهای صفحه را ببینید.

حالت‌ها (تعاریف دستگاه)

در فراخوانی فوق، mode مربوط به printengine باید نام یک دستگاه واقعی (مانند ljfour) یا localfont باشد. اگر حالتی مشخص نشود یا معتبر نباشد، Metafont به‌طور پیش‌فرض در حالت proof قرار می‌گیرد که تصاویر بزرگی از نویسه‌ها را برای استفاده در طراحی قلم تولید می‌کند. حالت proof یک فایل خروجی با پسوند .2602gf (۳۶ پیکسل در هر نقطه) تولید خواهد کرد. یک فایل gf در حالت proof می‌تواند توسط gftodvi(1) به یک سند قابل چاپ تبدیل شود. این خروجی حالت proof در کتاب The Metafontbook، پیوست H (نمونه‌های چاپی یا Hardcopy Proofs) بیشتر شرح داده شده است، و مثال‌هایی برای کل خانواده قلم Computer Modern در کتاب Computer Modern Typefaces (جلد E از مجموعه Computers & Typesetting) نشان داده شده است.

حالت‌ها با ماکروی mode_def تعریف می‌شوند که خروجی قلم را با تعریف مواردی مانند وضوح دستگاه، با یک دستگاه خروجی خاص تطبیق می‌دهد. فایل modes.mf (https://ctan.org/pkg/modes) همراه با TeX Live توزیع شده و به‌طور پیش‌فرض استفاده می‌شود؛ این فایل پارامترهای مختلف را شرح می‌دهد، بیش از ۱۵۰ حالت را تعریف می‌کند (از افزودن ورودی‌های بیشتر استقبال می‌شود)، و localfont را به عنوان ljfour (یک چاپگر ۶۰۰ دی‌پی‌آی HP LaserJet) تعریف می‌نماید.

امروزه خروجی‌ها غالباً به‌صورت آنلاین مشاهده می‌شوند که در آن‌ها نقشه‌های بیتی با وضوح بالا مورد نیاز است. چندین تعریف در modes.mf می‌توانند برای این منظور استفاده شوند: حالتی با نام pdf (یا dpdfezzz در نسخه‌های قدیمی‌تر) نقشه‌های بیتی را با وضوح 8000 dpi تولید می‌کند (سایر پارامترها مقادیر متعارف دارند). اگر وضوح کمتری می‌خواهید، حالت‌های متعارف مشابه شامل supre با 2400 و ultre با 1200 هستند.

کتاب The Metafontbook جزئیات و مثال‌های بیشتری از حالت‌ها، به‌ویژه در فصل ۱۱ (بزرگ‌نمایی و وضوح تصویر) ارائه می‌دهد.

پله‌های بزرگ‌نمایی (Magsteps)

سامانهٔ magsteps دقیقاً همان چیزی است که در TeX استفاده می‌شود، به‌طوری که مقادیر n در فراخوانی فوق عموماً یکی از مقادیر 0.5، 1، 2، 3، 4 یا 5 است، هرچند از نظر اصولی می‌تواند هر مقداری باشد. بزرگ‌نمایی می‌تواند نه به‌صورت فراخوانی به magstep بلکه به عنوان مقداری دلخواه مانند 1.315 برای ایجاد اندازه‌های خاص نویسه نیز مشخص شود. همچنین می‌تواند کاملاً حذف شود، همان‌طور که در بالا نشان داده شد.

انتخاب پایه (.base)

مانند TeX، برنامه Metafont نیز معمولاً با مجموعه بزرگی از ماکروهای از پیش کامپایل‌شده به نام «base» (پایه) استفاده می‌شود؛ پایهٔ plain به عنوان بخشی از Metafont توزیع می‌شود و پرکاربردترین آن‌ها است.

پیاده‌سازی Metafont در TeX Live (معروف به Web2C) خط فرمان خود را بررسی می‌کند تا ببیند با چه نامی فراخوانی شده است، درست همان کاری که TeX انجام می‌دهد. به‌طور خلاصه، نام‌های inimf و virmf فایل plain.base را می‌خوانند، و هر نام دیگری فایل base متناظر با همان نام را می‌خواند. برای جزئیات به tex(1) مراجعه کنید. نام فراخوانی mf-nowin یک حالت ویژه در Metafont است که از mf.base استفاده می‌کند؛ بخش زیر را ببینید.

مدیریت خطا (Error handling).PP به tex(1) مراجعه کنید؛ بازیابی خطای Metafont کاملاً مشابه آن است. نام متغیر محیطی برای ویرایشگر MFEDIT است.

خروجی گرافیکی برخط

برخلاف TeX، Metafont می‌تواند نتایج پردازش خود را به‌صورت برخط و هم‌زمان با اجرا نمایش دهد. Metafont می‌تواند از اکثر نمایشگرهای امروزی استفاده کند. فصل 23 کتاب The Metafontbook آنچه را می‌توانید انجام دهید شرح می‌دهد. Metafont از متغیرهای محیطی برای تعیین دستگاه نمایشگر مورد استفاده بهره می‌برد.

ابتدا به دنبال متغیر MFTERM می‌گردد؛ اگر MFTERM تنظیم نشده باشد، اما DISPLAY تنظیم شده باشد، پشتیبانی پنجره Metafont برای X به کار گرفته می‌شود. (DISPLAY طبق معمول باید روی یک مشخصه معتبر از کارساز X تنظیم شده باشد.) اگر نه MFTERM و نه DISPLAY هیچ‌کدام تنظیم نشده باشند، از TERM برای حدس زدن پشتیبانی پنجره مناسب استفاده می‌شود. اگر هیچ‌یک از این‌ها یافت نشود، هیچ خروجی برخطی دریافت نخواهید کرد.

مقادیر پشتیبانی‌شده برای MFTERM و TERM در https://tug.org/texinfohtml/web2c.html#Online-Metafont-graphics فهرست شده‌اند. از آنجا که این مقادیر عمدتاً قدیمی هستند، به‌ندرت استفاده می‌شوند و به‌طور پیش‌فرض در TeX Live فعال نیستند، این فهرست در اینجا تکرار نشده است.

دو متغیر پیکربندی Kpathsea با نام‌های screen_width و screen_depth پهنا و ارتفاع پنجره مورد استفاده توسط Metafont را تعیین می‌کنند. آن‌ها را می‌توان در متغیرهای محیطی یا در یک فایل پیکربندی Kpathsea (https://tug.org/texinfohtml/kpathsea.html#Path-sources) تنظیم کرد. مقادیر پیش‌فرض آن‌ها به‌ترتیب 1664 و 1200 است.

به‌طور پیش‌فرض، TeX Live به همراه دو باینری Metafont توزیع می‌شود: mf و mf-nowin. باینری mf از گرافیک پشتیبانی می‌کند، در حالی که باینری mf-nowin پشتیبانی نمی‌کند. باینری mf-nowin توسط اسکریپت‌هایی مانند mktexpk(1) استفاده می‌شود، که در آن‌ها پشتیبانی گرافیکی به‌جای اینکه کمکی باشد، بیشتر مایه دردسر است.

برای مشاهده جزئیات تجزیه خط فرمان و گزینه‌های موجود (به‌جز موارد مختص به TeX) به tex(1) مراجعه کنید. تنها گزینه مختص به Metafont، گزینه -base است که کاملاً مشابه -format در TeX عمل می‌کند.

برای اطلاعات عمومی و جزئیات بیشتر به tex(1) مراجعه کنید. توضیحات مختصر ارائه‌شده در اینجا صرفاً یک راهنما هستند. متغیرهای محیطی بسیار بیشتری وجود دارند که می‌توانند بر رفتار جستجوی مسیر تأثیر بگذارند.

در صورت تنظیم، اگر ذخیره فایل‌های خروجی در پوشه جاری ممکن نباشد، Metafont تلاش می‌کند آن‌ها را در اینجا قرار دهد.
مسیر جستجو برای فایل‌های input.
الگوی دستوری برای رفتن به ویرایشگر.
نمایشگر گرافیکی برخط را تعیین می‌کند. بالا را ببینید.
پهنا و ارتفاع پنجره گرافیکی برخط.

در اینجا گزیده‌ای از برنامه‌های کاربردی اصلی که همراه با Metafont ارائه می‌شوند آمده است:

یک فایل gf را دریافت کرده و یک فایل قلم pk کوچک‌تر تولید می‌کند.
برگه‌های نمونه (proof sheets) را برای قلم‌ها تولید می‌کند.
محتویات یک فایل gf را با نمادها و/یا تصاویر نمایش می‌دهد.
محتویات یک فایل pk را به‌صورت نمادین نمایش می‌دهد.
یک فایل منبع را همان‌گونه که در Computer Modern Typefaces نشان داده شده است، قالب‌بندی می‌کند.
$TEXMFMAIN/metafont/base/plain.mf
پایه استاندارد.
$TEXMFMAIN/metafont/misc/modes.mf
فایلی از mode_defها برای بسیاری از دستگاه‌ها. https://ctan.org/pkg/modes را ببینید.
*.base
فایل‌های پایهٔ پیش‌پردازش‌شدهٔ Metafont.
متن کدگذاری‌شدهٔ پیام‌های Metafont.

Knuth همچنان گزارش باگ‌های جدید برای Metafont را می‌پذیرد، اما تنها هر چند سال یک‌بار آن‌ها را بررسی می‌کند. برای مشاهدهٔ فهرستی از گزارش‌های ارسال‌شده و اطلاعات بیشتر: https://tug.org/texmfbug

از The Metafontbook: «طراحی قلم می‌تواند برای سایر علایق شما خطرآفرین باشد. هنگامی که گرفتار آن شوید، احساسات شدیدی نسبت به اَشکال حروف پیدا خواهید کرد؛ رسانه بر پیام‌هایی که می‌خوانید تحمیل خواهد شد و پیوسته به بهبود قلم‌هایی که در همه جا می‌بینید، به‌ویژه قلم‌های طراحی‌شده توسط خودتان، فکر خواهید کرد.»

gftopk(1), gftodvi(1), gftype(1), mft(1), pktogf(1), pltotf(1), tftopl(1).
mktexmf(1), mktexpk(1), mktextfm(1).
mpost(1), tex(1).

Donald E. Knuth, The Metafontbook (جلد C از Computers & Typesetting).
Donald E. Knuth, Metafont: The Program (جلد D از Computers & Typesetting).
Donald E. Knuth, Computer Modern Typefaces (جلد E از Computers & Typesetting).

برخی اطلاعات برخط:
Metafont برای مبتدیان، نوشتهٔ Geoffrey Tobin: https://ctan.org/pkg/metafont-beginners
پیاده‌سازی‌های قلم Metafont (تقریباً همگی برگرفته از Computer Modern هستند): https://ctan.org/topic/font-mf

صفحات وب TeX Live: https://tug.org/texlive
راهنما و صفحه وب Texinfo مربوط به Web2C: https://tug.org/web2c
راهنما و صفحه وب Texinfo مربوط به Kpathsea: https://tug.org/kpathsea
سورس‌های برنامه‌نویسی ادیبانهٔ دنیای TeX، در قالب pdf: https://ctan.org/pkg/knuth-pdf

TUGboat (نشریهٔ گروه کاربران TeX، از ارسال مقالات استقبال می‌شود): https://tug.org/TUGboat
به‌ویژه موضوع Fonts: https://tug.org/TUGboat/Contents/listkeyword.html#CatTAGFonts Metafont توسط Donald E. Knuth ایجاد شد، که آن را با استفاده از سیستم WEB خود برای برنامه‌های Pascal پیاده‌سازی کرد. این برنامه در ابتدا توسط Paul Richards در University of Illinois at Urbana-Champaign به Unix پورت شد. نسخه‌ای که اکنون در TeX Live، توزیع فعلی TeX در Unix، گنجانده شده است، توسط سیستم Web2C تولید می‌شود که در ابتدا توسط Tomas Rokicki و Tim Morgan نوشته شده بود. این صفحهٔ راهنما در ابتدا توسط Pierre MacKay نوشته شد.

گزارش باگ‌ها در Metafont (بسیار نادر): https://tug.org/texmfbug
فهرست پستی عمومی برای پرسش‌ها و گزارش‌های پیاده‌سازی: https://lists.tug.org/tex-k
فهرست گفتگوی عمومی برای همهٔ موارد مربوط به Metafont (و TeX): https://lists.tug.org/texhax

15 January 2026 Web2C 2026