كيفية استخدام Troff لتنسيق مستندات PDF في Linux
Troff هو معالج نصوص مستندات بسيط ولكنه قوي لأنظمة Linux. يتيح لك إنشاء مستندات جاهزة للطباعة بسهولة عن طريق تجميع ملفات المصدر من سطر الأوامر. على عكس LaTeX ، فإن Troff خفيف الوزن بشكل لا يصدق ومثبت مسبقًا على معظم أنظمة Linux. يوضح لك هذا البرنامج التعليمي كيفية استخدام Troff لتنسيق مستندات PDF في Ubuntu.
ما هو Troff ولماذا استخدامه
بالمعنى الأساسي ، Troff هو برنامج معالجة نصوص يحول البرامج النصية التي تشبه التعليمات البرمجية إلى مستندات قابلة للطباعة. على عكس معالجات الكلمات ، لا يعتمد Troff على نموذج “WYSIWYG”. بدلاً من ذلك ، يتطلب منك استخدام أنواع معينة من التعليمات البرمجية للتعامل مع التنسيق الخاص بك.
تعد البساطة واحدة من أكبر مزايا هذا الأسلوب. سيحتوي التثبيت الأساسي لـ Troff على كل ما تحتاجه لإنشاء مستند. علاوة على ذلك ، فإن افتقارها إلى واجهة مستخدم رسومية يعني أنه يمكنك إنشاء مستند حتى عبر SSH.
نصيحة: تعرف على كيفية إعادة توجيه تطبيقات واجهة المستخدم الرسومية عبر SSH في Linux.
تثبيت Troff
غالبًا ما يتم تجميع Troff افتراضيًا في معظم توزيعات Linux. يمكنك التحقق مما إذا كان لديك في نظامك عن طريق تشغيل علامة -h الخاصة به. سيعرض هذا قائمة مختصرة بجميع العلامات التي يقبلها تثبيت Troff.
troff -h
هناك حالات لا تجمع فيها التوزيعات Troff افتراضيًا. في هذه الحالة ، يمكنك تثبيته بالبحث عن الحزمة “groff”.
هذا إعادة تنفيذ لبرامج Troff و Nroff بواسطة مشروع GNU ، والذي يتضمن عددًا من الميزات الجديدة والحديثة.
يمكنك تثبيت groff في Ubuntu باستخدام الأمر التالي:
sudo apt install groff
إنشاء مستند Troff الأول
على غرار التعليمات البرمجية المصدر ، كل مستند Troff عبارة عن ملف نصي يحتوي على إرشادات حول كيفية إنشاء مستند. يتضمن ذلك عرض الصفحة والهامش بالإضافة إلى تباعد الأحرف والصفحات.
يسمح لك مستوى التحكم هذا بمعالجة البرنامج لإنشاء أي نوع من المستندات. لتبسيط ذلك ، أنشأ مطورو Troff “وحدات ماكرو” تكثف هذه الأوامر إلى صيغة أبسط.
أحد أكثر وحدات الماكرو شيوعًا التي ستستخدمها في Troff هو “مللي ثانية”. سيتم إنشاء مستند بأسلوب المقالة. يمكنك إنشاء مستند ms باستخدام الأمر touch:
touch my-first-document.ms
نظرًا لأن جميع مستندات Troff هي نصوص ، يمكنك فتح المستند باستخدام محرر نصوص. في حالتي ، أنا أستخدم vim. بدلاً من ذلك ، يمكنك استخدام أي من برامج تحرير النصوص هذه لنظام التشغيل Linux.
vim my-first-document.ms
فهم تنسيق Troff
تتبع جميع مستندات Troff بنية مماثلة. يجب أن يكون كل أمر تنسيق تقوم به في سطر منفصل في المحتوى الذي يحاول تنسيقه. على هذا النحو ، سيبدو مستند Troff النموذجي كما يلي:
.COMMAND1 This is a piece of content in a Troff document. .COMMAND2 This is a different piece of content in a Troff document.
اثنان من أكثر الأوامر الأساسية التي ستستخدمها في مللي ثانية هما TL و .PP. الأول يحول النص الخاص بك إلى عنوان ويقوم بتوسيطه في المستند الخاص بك ، بينما يقوم الأخير بتنسيق النص الخاص بك ليتبع نمطًا يشبه الفقرة.
على سبيل المثال ، يستخدم المقتطف التالي كلا الأمرين TL و .PP:
.TL My First Troff Document .PP This is content that I want to look like a paragraph in my final document. It is not a very long content but it is my first Troff document and it is something that I am proud of. It is about three sentences long and it should wrap around the document properly.
من هنا ، قم بإنشاء المستند الخاص بك عن طريق تمرير ملفك إلى برنامج Troff.
groff -ms -Tpdf ./my-first-document.ms > output.pdf
نصيحة: إذا كنت تفضل شيئًا أبسط ، فتعلم كيفية الكتابة بتنسيق MLA في محرر مستندات Google.
إنشاء نص غامق ومائل وتسطير
تمامًا مثل معالج النصوص العادي ، توفر معظم وحدات Troff macros عددًا من أوامر النمط لتخصيص المستند. بالنسبة إلى ms ، هذه هي .B و. I و. UL و .BX.
- يغير الأمر B النص إلى غامق.
- يغير الأمر .I النص إلى الخط المائل.
- UL و. BX هما أمران يرسمان تسطيرًا ومربعًا حول النص ، على التوالي.
على غرار الأوامر أعلاه ، يتطلب استخدام هذه الأوامر في مستندك فصل كل نمط على سطر خاص به:
.TL My First Troff Document .PP This is .B content .R that I want to look like a paragraph in my final document. [...]
في هذا المثال ، أنشأت سطرًا جديدًا قبل كلمة “محتوى” وأضفت الأمر .B لتغييره إلى غامق ، ثم أنشأت سطرًا جديدًا وأضفت الأمر .R. هذا يسمح لـ Troff بالعودة إلى أسلوبه السابق.
من المهم ملاحظة أنك تحتاج دائمًا إلى إضافة الأمر .R عند تغيير النمط. على سبيل المثال ، لن يؤدي المقتطف التالي إلى إنهاء الأمر .I لأن Troff لم ير ملف .R بعده:
.TL My First Troff Document .PP This is .I content that I want to look like a paragraph in my final document. [...]
إنشاء أقسام وثيقة جديدة
على غرار LaTeX ، يدعم Troff أيضًا اكتشاف الأقسام والتسلسل الهرمي ، لذلك لا تحتاج إلى ترتيب ومطابقة مستوى كل رأس عند التحرير.
لإنشاء قسم جديد في المستند الخاص بك ، استخدم الأمر .NH متبوعًا باسم العنوان الخاص بك.
.TL My First Troff Document .NH My First Heading .PP This is content that I want to look like a paragraph in my final document.
بشكل افتراضي ، يحتوي كل رأس Troff على قيمة مستوى تحدد كيفية بناء البرنامج وعرض محتواه في المستند النهائي. مع العلم أنه يمكنك تغيير هذه القيمة لضبط مستوى العنوان.
على سبيل المثال ، يؤدي ما يلي إلى إنشاء عنوان من المستوى 2 أسفل الأصل مباشرة:
.TL My First Troff Document .NH My First Heading .NH 2 My First Subheading .PP This is content that I want to look like a paragraph in my final document.
بصرف النظر عن الرؤوس المرقمة العادية ، يمكن لـ Troff أيضًا إنشاء رؤوس فارغة ستظل تتبع التسلسل الهرمي لمستوى المستند.
للقيام بذلك ، استبدل .NH بأمر SH:
.TL My First Troff Document .SH My First Heading .SH 2 My First Subheading .PP This is content that I want to look like a paragraph in my final document.
نصيحة: تعرف على كيفية تغيير الهوامش في محرر مستندات Google.
إنشاء قوائم في Troff
تسمح لك بساطة Troff أيضًا بتحويل سلوكها إلى ما تريده. على سبيل المثال ، لا تأتي القوائم بشكل افتراضي على وحدات الماكرو Troff أو ms. على الرغم من ذلك ، لا يزال بإمكانك إنشاء قائمة من خلال الجمع بين بضعة أوامر ms.
تتكون كل قائمة في Troff من ثلاثة أجزاء: مسافة بادئة ورصاصة ومحتوى. لإنشاء مسافة بادئة ، استخدم الأمرين .RS و. RE. سيؤدي ذلك إلى تحريك مستوى المسافة البادئة الحالي لأي نص بداخله بمقدار أربع مسافات.
.RS This is my first item. .RE
بعد ذلك ، قم بإنشاء الرمز النقطي لعنصر القائمة الخاص بك باستخدام .IP. هذا هو أمر “مسافة بادئة للفقرة” الذي يعمل على إصلاح الهامش الأيسر للنص بعرض معين.
يسمح لك الأمر IP أيضًا بتعيين نقطة تعداد مخصصة والمسافة بينها وبين النص الخاص بك. في هذه الحالة ، أقوم بضبط الرمز النقطي الخاص بي على “[1]” وسأعطيه أربع مسافات.
.RS .IP [1] 4 This is my first item. .RE
الآن انسخ والصق أمر IP الخاص بك لإنشاء عناصر قائمة إضافية.
.RS .IP [1] 4 This is my first item. .IP [2] 4 This is my second item. .IP [3] 4 This is my third item. .RE
أخيرًا ، قم بأتمتة هذه العملية عن طريق إنشاء ماكرو مخصص. على سبيل المثال ، يربط المقتطف التالي أمر IP الخاص بي بـ QW.
.de QW .IP [-] 4 .. .RS .QW This is my first item. .QW This is my second item. .QW This is my third item. .RE
إنشاء الجداول مع المعالجات المسبقة في Troff
أحد الأمور الغريبة في Troff هو أن معظم ميزاته موجودة كـ “معالجات أولية”. بالنسبة للجزء الأكبر ، هذه ثنائيات خارج البرنامج تعمل عن طريق إنشاء “برامج نصية لحاوية المعالج المسبق” وتحويلها إلى كود Troff ذي المستوى المنخفض.
يُعد Tbl مثالًا رائعًا على معالج Troff المسبق. إنه برنامج يدير الجداول في مستند. تبدو حاوية Tbl الأساسية كما يلي:
.TS allbox ; c c c. item1 <Tab> item2 <Tab> item3 item4 <Tab> item5 <Tab> item6 .TE
- يخبر الأمران .TS و .TE Tbl أن هذه بيئة يمكنه قراءتها.
- يخبر السطر الثاني البرنامج بكيفية تنسيق هذا الجدول.
- السطر الثالث هو حقل مفصول بمسافة يحدد مقدار الأعمدة ومحاذاة الجدول الخاص بك.
- السطران الرابع والخامس عبارة عن حقول مفصولة بعلامات جدولة تحتوي على محتويات الجدول الخاص بك.
يختلف تجميع مستند باستخدام Tbl قليلاً عن ملف Troff العادي. أولاً ، قم بتحميل ملفك:
tbl my-first-document.ms > preprocessed.ms
بعد ذلك ، قم بتغذية إخراج البرنامج إلى Troff:
groff -ms -Tpdf ./preprocessed.ms > output.pdf
أخيرًا ، أتمتة هذه العملية باستخدام أنابيب UNIX:
tbl my-first-document.ms | groff -ms -Tpdf > output.pdf
أسئلة شائعة:
س1: هل من الممكن استخدام Troff في Windows؟
الجواب. بشكل افتراضي ، لا يتم نقل Troff و Groff رسميًا إلى Windows. على الرغم من ذلك ، لا يزال بإمكانك استخدام Groff مع أدوات GNU الأخرى عن طريق تثبيت نظام Windows الفرعي لنظام Linux.
س2: هل لدى Troff ميزة تتبع ببليوغرافيا؟
الجواب. نعم. الإحالة هي معالج أولي بسيط يستخدم ملف ببليوغرافيا خارجيًا لتتبع المراجع تلقائيًا في مستند Troff. يمكنك معرفة المزيد حول كيفية عملها من خلال زيارة صفحة الدليل الخاصة بها عن طريق تشغيل man الإحالة.
س3: كيف يمكنني إصلاح خطأ “DESC المفقود” عند تجميع Troff؟
الجواب. من المحتمل أن تكون هذه المشكلة بسبب تبعية مفقودة في نظامك أو ملف إصدار غير متطابق. لإصلاح ذلك ، قم بتثبيت حزمة groff المناسبة من مستودع التوزيع الخاص بك.