نگارش رمان با groff؛ تجربه جالب یک توسعهدهنده در استفاده از ابزار متنباز لینوکس برای حروفچینی کتاب — Novellas with Groff
خلاصه
این مقاله تجربیات یک توسعهدهنده نرمافزار را بررسی میکند که تصمیم گرفته به جای ابزارهای سنگین مدرن، دو رمان کوتاه را با استفاده از ابزار کلاسیک و سریع groff در لینوکس حروفچینی و چاپ کند. این مطلب نشان میدهد چگونه ابزارهای ترمینال قدیمی میتوانند کتابهایی با کیفیت بالا و عملکردی بسیار سریع تولید کنند.
مقدمه و زمینه
بسیاری از توسعهدهندگان نرمافزار میانهای با نوشتن متون غیرفنی و ادبی ندارند. اما نویسنده این مقاله پس از علاقهمند شدن به مطالعه رمان، تصمیم گرفته است دست به قلم شود و دو رمان کوتاه (Novella) با حجمهای ۵۰ و ۱۲۰ صفحه بنویسد. بخش جالب ماجرا اینجاست که او برای حروفچینی و تولید خروجی PDF این کتابها، سراغ ابزار قدیمی و ریشهدار groff رفته است؛ ابزاری که بیشتر برنامهنویسان آن را به خاطر نمایش صفحات راهنما (man pages) در ترمینال لینوکس میشناسند.
چرا groff؟
دلیل اصلی انتخاب groff سرعت بالا، سبک بودن و سادگی آن در مقایسه با نرمافزارهای سنگین و امروزی است که حس «راه رفتن در گلولای» را به کاربر میدهند. پردازش و ساخت سند ۵۰ صفحهای با groff روی یک سختافزار بسیار قدیمی تنها حدود ۷۰۰ میلیثانیه زمان میبرد و سند ۱۲۰ صفحهای نیز در ۱.۶ ثانیه کاملاً آماده میشود.
از آنجایی که یک رمان ساده نیازی به فهرست مطالب پیچیده، جدول، ارجاعات متقاطع یا بلوکهای کد ندارد، نویسنده بسته ماکروی بسیار کوچک و اختصاصی خودش را نوشته است تا کارهایی مثل مدیریت عناوین فصول، تورفتگی پاراگرافها (hanging indent) و فاصلهگذاریها را انجام دهد.
جزئیات فنی و پیادهسازی
برای چاپ کتاب در قطع استاندارد A5، دستور سادهای مثل زیر استفاده میشود:
groff -Tpdf -dpaper=a5 -P-pa5 macros.groff chapter01.groff >book.pdf
برخی از مهمترین نکات فنی که در این مقاله بررسی شدهاند عبارتند از:
- مدیریت تلهها (
Traps): در سیستمهای حروفچینیtroff/groff، تلهها ابزارهایی هستند که با رسیدن به نقطه خاصی از صفحه (مثلاً خطوط پایانی یا بالایی) تریگر میشوند. نویسنده از تلهها برای افزودن خودکار شماره صفحات و سرصفحهها استفاده کرده است. - سوئیچ بین محیطها (
Environments): مدیریت بافرها و خطوط جمعآوریشده با استفاده از دستورات محیطی (.ev) و دستورات بدون وقفه (با استفاده از کاراکتر'به جای کنترل کاراکتر.) برای جلوگیری از شکستن ناخواسته خطوط و ایجاد حلقههای بینهایت در زمان رندر کردن صفحه. - تنظیمات دقیق اندازهها و رجیسترها: ذخیره ابعاد حاشیهها و فضاها در متغیرهای رجیستر برای خوانایی بیشتر کدهای ماکرو.
نگاه جامعه هکرنیوز
در بحثهای پیرامون این مطلب در هکرنیوز، یکی از کاربران به نکته جالب و کوچکی اشاره کرد که برای دارندگان چاپگرهای قدیمی کاربرد دارد؛ تنظیم متغیر محیطی `export GROFF_NO_SGR=
این مطلب بهصورت کاملاً خودکار و با هوش مصنوعی از مقالهٔ اصلی و بحث هکرنیوز تهیه شده و ممکن است خطا داشته باشد. حقوق مطلب اصلی متعلق به نویسندهٔ آن است. قوانین و گزارش مشکل