تخ (برمجية)

نبذة تاريخية

عندما نُشر أول جزء من كتاب دونالد كانوث فن برمجة الحاسوب سنة 1969، تم تصفيفه بإستخدام الطباعة المعدنية بواسطة آلة طباعة من القرن التاسع عشر من شركة مونوتيب، منتجة “طرازا تقليدي جيد” أعجب به دونالد كانوث ، وعندما نشرت الطبعة الثانية في 1976 تعين إعادة تصفيف الكتاب من البداية لأن تقنيات مونوتيب إستُبدلت بشكل كبير وحل محلها تقنيات النسخ الضوئي، ولم يعد الخط الأصلي متاحا ، ولكن عندما استلم كانوث عينات الكتاب في مارس 1977 لمراجعتها وجدها قبيحة  في هذه الأثناء رأي كانوث للمرة الأولى نتائج نظام طباعة رقمي عالي الجودة، وصار مهتما بالطباعة الرقمية. العينات غير المرضية أعطته الدافع ليحل هذه المشكلة مرة واحدة بتصميم نظامه الخاص للطباعة. في 13 مايو 1977 كتب ملاحظة لنفسه يصف فيها الخصائص الأولية لتخ.
كان كانوث يخطط لإنهائه خلال إجازته سنة 1978 لكن اللغة لم تُجمّد إلا في 1989، متأخرا أكثر من عشر سنوات. في صيف 1978 زار جاي لويس ستيل الإبن  جامعة ستانفورد عندما كان كانوث يطور أول إصدارة من تخ ، عندما عاد لويس ستيل إلى معهد ماساتشوست للتكنولوجيا MIT أعاد كتابة نظام دخْل/خرْج تخ ليعمل على نظام التشغيل آي تي أس . كتبت أول إصداة من تخ بلغة البرمجة سايل SAIL لتعمل على الحاسبات العملاقة من النوع بي دي بي - 10  تحت نظام تشغيل ستانفورد وايتس ، في الإصدارات التالية طور كانوث مفهوم البرمجة الأدبية، وهي طريقة لإنتاج كود مصدري مع توثيق عال الجودة (مصفوف باستخدام تخ طبعا) من نفس الملف الأصلي. اللغة المستخدمة تسمى ويب وتنتج برامج بلهجة باسكال الخاصة ب‍بي دي بي - 10  لشركة ديجيتال إكوبمينت .
نشرت إصدارة جديدة (مكتوبة من جديد من الصفر) من تخ في سنة 1982 باسم TeX82. من ضمن التغييرات استبدال خوارزمية قطع الكلمات (في نهاية السطر) بخوارزمية جديدة من تطوير فرانك ليانج ، يستخدم TeX82 حسابات النقطة الثابتة بدلا من حسابات النقطة العائمة لضمان تكرار النتائج على عتاد الحواسيب المختلف،  ويحتوي على لغة برمجة تورنغ كاملة، بعد إلحاح من جاي لويس ستيل الإبن .
في 1989 أصدر كانوث إصدارة أخرى من تخ وميتا فونت ، بالرغم من رغبته في جعل البرنامج مستقر، وجد كانوث أن 128 محرفا مختلفا في دخْل تخ ليست كافية لاستيعاب اللغات الأجنبية؛ لذا كان التغيير الرئيسي في الإصدارة 3.0 هو إمكانية استخدام دخْل من 8 بتة مما يسمح ب‍ 256 محرفا مختلفا.
منذ الإصدارة 3 يستخدم تخ نظام ترقيم إصدارات تمييزي، حيث تميز الإصدارات بإضافة رقم في نهاية الرقم العشري بحيث يصل رقم الإصدارة إلى ط. هذا انعكاس لحقيقة أن تخ الآن مستقر جدا ولا يتوقع سوى تحديثات طفيفة. الإصدارة الحالية من تخ 3.1415926 صدرت في مارس 2008. تم تجميد التصميم بعد الإصدارة 3.0، ولن تضاف أي خصائص جديدة أو تغييرات أساسية بعد هذا، بحيث لا تحتوي الإصدارات الجديدة إلا على إصلاح للعلل البرمجية. على الرغم من أن كانوث نفسه أشار إلى عدة مواضع في تخ تحتاج إلى التحسين، إلا أنه وضح أنه يؤمن بشدة الحصول على نظام غير متغير سيعطي نفس الناتج الآن وفي المستقبل، أكثر أهمية من إضافة خصائص جديدة. لهذا السبب قرر أن “التغيير النهائي (بعد وفاتي)” سيكون تغيير رقم الإصدارة إلى ط، وعندها تصبح العلل الباقية مميزات.
وبالمثل فإصدارات ميتافونت بعد 2.0 تقترب بصمت من ثابت إيه e ، وسيحدث تغيير مماثل بعد وفاة كانوث. 
مع هذا، وحيث أن كود تخ المصدري يكاد يكون ملكية عامة (انظر ما يلي)، يسمح (بل ويشجع صراحة) للمبرمجين الآخرين بتحسين النظام بشرط استخدام اسم آخر لتوزيع تخ المعدل، مما يعني أن الكود يمكن أن يتطور. فمثلا مشروع أوميجا طُوّر بعد 1991 ويهدف أساسا لإضافة إمكانيات تعدد اللغات إلى تخ. دونالد كانوث نفسه أنشأ نسخ معدلة “غير رسمية” من تخ مثل TeX-XeT التي تتيح الخلط بين أنظمة الكتابة من اليمين لليسار ومن اليسار لليمين.

نظام الطباعة

تبدأ أوامر تخ غالبا بشرطة مائلة عكسية  وتجمع بين أقواس مجعدة، مع هذا فتقريبا كل الخصائص النحوية لتخ يمكن تغييرها على الهواء مما يجعل تحليل مدخلات تخ صعبا على أي شيء عدا تخ نفسه. لغة تخ لغة ماكرو ورموز (token): الكثير من الأوامر بما فيها أغلب الأوامر التي يُعرّفها المستخدم يتم فكّها على الهواء حتى تبقى الرموز التي لا تفك فيتم تنفيذها. الفك في حد ذاته خال عمليا من الأعراض الجانبية. يجعل هذا من تخ لغة تورنغ كاملة حتى على مستوى الفك.
يمكن تقسيم النظام إلى أربع مستويات: في الأول تقرأ الحروف من ملف الدخْل وتسند إلى رمز فئة (يسمى أحيانا “catcode” اختصارا). التجميعات من الشرطة الراجعة (أو أي محرف في الفئة 0) متبوعة بحروف (المحارف من الفئة 11) أو محرف واحد آخر، تستبدل برمز تتابع تحكم. مما يعني أن هذه المرحلة أشبح بالتحليل البنيوي، يالرغم من أنها لا تكون أعدادا من الأرقام. في المرحلة التالية تتابعات التحكم التي يمكن فكها تستبدل بنصها البديل. عندها يكون دخل المرحلة الثالثة تيار من المحارف (شاملة تلك التي تحمل معان خاصة) وتتابعات تحم لا تفك. هنا تركب المحارف لتكون فقرة. تعمل خوارزمية تقسيم الفقرات في تخ على أمثلة نقاط التقسيم عبر الفقرة بأكملها. المرحلة الرابعة تقطع القائمة الأفقية من السطور والمواد الأخرى لتشكل صفحات.
يعرف تخ بدقة أبعاد كل المحارف والرموز، وباستخدام هذه المعلومات يحسب الترتيب الأمثل للحروف في كل سطر والسطور في كل صفحة. بعدها ينتج ملف DVI (اختصار “DeVice Independent”) يحتوي المواضع النهائية لكل المحارف. يمكن بعدها طباعة ملف dvi مباشرة باستخدام مشغل الطابعة المناسب، أو تحويله إلى أنساق أخرى. هذه الأيام يستخدم بي‌ دي‌ إف‌ تخ  بكثرة متخطيا خطوة إنتاج ملف DVI.
يفهم نظام تخ حوالي 300 أمر، تسمى أوليات. لكن هذه الأوامر منخفضة المستوى نادرا ما يستخدمها المستخدم مباشرة، وأغلب الوظائف توفرها ملفات التنسيق (صور طرح ذاكرة تخ بعد تحميل حزم الماكرو الكبيرة). تنسيق كانوث المبدئي الأصلي، والذي يضيف حوالي 600 أمر، يسمى تخ الصرف (يتوفر من CTAN). أكثر التنسيقات استخداما هو لاتخ أو لاتك، الذي بدأ تطويره ليزلي لامبورت، والذي يشمل أنساق المستندات مثل الكتب والخطابات والشرائح إلخ.. ويضيف دعم المراجع وترقيم الأقسام والمعادلات تلقائيا. ومن التنسيقات شائعة الاستخدام أيضا أيه أم أس تخ  من مجتمع الرياضيات الأمريكي والذي يوفر الكثير من الأوامر صديقة المستخدم والتي يمكن تغييرها لتناسب احتياجات دور النشر. أغلب مميزات أ.م.س يمكن استخدامها في لاتخ باستخدام “حزم” AMS. ومن التنسيقات الأخرى كنتكست  الذي يستخدم أساسا للنشر المكتبي.

كيف يعمل تخ

مثال برنامج أهلا بالعالم بإستخدام تخ الصِرف:
Hello, World
\end % marks the end of the file; not shown in the final output
يمكن حفظ الملف بإسم myfile.tex ، حيث دوت تخ .tex هو إمتداد ملفات تخ الشائع .
يعتبر تخ أي شيء بعد علامة النسبة المؤوية تعليقا ويتجاهله. تشغيل تخ على هذا الملف (مثلا بكتابة tex myfile.tex في سطر الأوامر، أو استدعاؤه من الواجهة الرسومية) سينتج ملفا باسم myfile.dvi. يمكن طباعة الناتج مباشرة من عارض DVI أو تحويله إلى نسق أكثر شيوعا مثل بوست سكريبت (PostScript) بإستخدام برنامج dvips. سبب هذا أن تخ يستخدم خطوط نقطية مصممة للعرض جيدا في حجم معين، بينما PostScript يستخدم خطوط متجهية. تنويعات تخ الأخرى مثل بي‌ دي‌ إف‌ تخ  تنتج ملفا PDF مباشرة.

أمثلة رياضياتية

يوفر تخ سياقا نصيا للمعادلات الرياضية. مثلا، معادلة ايجاد الجذور للمعادلات التربيعيه الشهيرة تكتب على الملف:
The quadratic formula is $-b \pm \sqrt{b^2 - 4ac} \over 2a$\end
الناتج سيشبه: