تک
از ویکیپدیا، دانشنامهٔ آزاد.
تِک () که در متن ساده به صورت TeX نوشته میشود، سیستم حروفچینی است که توسط دونالد نوث ایجاد شده است. در کنار زبان برنامهنویسی متافونت برای توصیف(ایجاد) قلمهای کامپیوتری، و با خانوادهی قلمهای Computer Modern، با دو هدف اساسی طراحی شده است: اول اینکه هر کسی بتواند با تلاشی محدود و منطقی کتابهایی با کیفیت عالی تولید کند، و دیگر این که سیستمی ایجاد کند که بر روی کامپیوترهای مختلف نتایج یکسان تولید نماید. تک رایگان است و در محیطهای آکادمیک، به خصوص در ریاضیات، فیزیک، علوم کامپیوتر و جامعهی مهندسین شهرت و استفادهی زیادی دارد. تک، به صورت گستردهای جایگزین troff، دیگر نرمافزار حروفچینی در محیط یونیکس شده است. تک معمولاً بهترین راه حروفچینی فرمولهای پیچیدهی ریاضی به شمار میرود، اما به خصوص در قالب LaTeX و دیگر بستهها و الگوها، اکنون برای مقاصد بسیار متنوعی در حروفچینی استفاده میشود.
فهرست مندرجات |
[ویرایش] تاریخچه
زمانی که اولین نسخهٔ کتاب «هنر برنامهنویسی رایانه» توسط دانلد نوث در ۱۹۶۹ منتشر شد، این کتاب توسط مونوتایپ، با فنآوری قرن ۱۹ امی حروفچینی شد که نوث از «ظاهر مناسب و کلاسیک» آن راضی بود. اما هنگامی که نسخهٔ دوم در ۱۹۷۶ به چاپ رسید، تمام کتاب باید دوباره حروفچینی میشد، چرا که فنآوری مونوتایپ به صورت گسترده با روشهای عکسبرداری جایگزین شده بود، و قلمهای قبلی دیگر در دسترس نبودند. به هر صورت، هنگامی که دانلد نوث پیشنمایش کتاب جدیدش را در ۳۰ مارس ۱۹۷۷ دریافت کرد، متوجه شد که بسیار بدشکل هستند. در این زمان، نوث برای اولین بار خروجی با کیفیت حروفچینی دیجیتال را مشاهده کرد، و به حروفچینی دیجیتال علاقهمند شد. پیشنمایشهای مأیوسکننده در نهایت موجب شدند که او تصمیم بگیرد با طراحی سیستم حروفچینی خود این مشکل را یک بار، و برای همه حل کند. در ۱۳ می۱۹۷۷، او یادداشتی برای خود نوشت که ویژگیهای اولیهٔ تک را شرح میداد.
او تصمیم گرفت که این کار را در ۱۹۷۸ به پایان برساند، اما آنچه که اتفاق افتاد این بود که در نهایت در ۱۹۸۹، یعنی ده سال بعد این کار متوقف شد. گای استیل در تابستان ۱۹۷۸، هنگامی که نوث مشغول ایجاد اولین نسخهٔ تک بود، در استنفورد بود. هنگامی که او در پاییز بهام. آی. تی بازگشت، سیستم ورودی/خروجی تک را بازنویسی کرد تا تحت سیستم عامل آی. تی. اس. اجرا شود. اولین نسخهٔ تک به زبان «سیل» نوشته شده بود تا بر روی یک پی. دی. پی. ۱۰ تحت سیستم عامل وایتس استنفورد اجرا شود. برای نسخههای بعدی تک، نوث شیوهٔ «برنامهنویسی لفظی» را ابداع کرد که شیوهای برای تولید کد منبع سازگار و مستندات با کیفیت بالا و پیوندیافته(که البته با تک حروفچینی میشود) از پروندهٔ اصلی میباشد. زبان استفاده شده وب نامیده میشود و برنامههایی به زبان پاسکال تولید میکند.
نسخهٔ جدید تک، بازنویسی و تک۸۲ نامیده شد و در سال ۱۹۸۲ منتشر گشت. از چیزهای قابل ذکر در مورد این نرمافزار میتوان به الگوریتم فاصلهگذاری اشاره کرد با الگوریتمی از فرانک لیانگ جایگزین شده بود. تک۸۲ همچنین از حساب ممیز ثابت به جای ممیز شناور استفاده میکرد تا از بازآفرینی نتایج بر روی سختافزارهای متفاوت، اطمینان حاصل شود، و نیز شامل یک زبان برنامهنویسی واقعی و کامل از نظر تورینگ بود که به پیشنهاد گای استیل در آن گنجانده شده بود.
در سال ۱۹۸۹، دونالد نوث نسخهٔ جدیدی از تک و متافونت عرضه نمود. با وجود این که او میخواست برنامه را پایدار نموده و از تغییرات پرهیز نماید، دریافت که ۱۲۸ نماد مختلف ورودی برای استفاده در زبانهایی غیر از انگلیسی کافی نیست. بنابراین مهمترین تغییر در نسخهٔ ۳٫۰ تک، قابلیت استفاده از ورودی ۸ بیتی بود که اجازه میداد ۲۵۶ نماد مختلف به صورت همزمان در متن ورودی استفاده شوند.
از نسخهٔ ۳، تک سیستم نسخهگذاری جدیدی را استفاده کردهاست، به این صورت که به روز رسانی نرمافزار با افزودن رقم جدید در انتهای بخش اعشاری نسخهٔ قبلی مشخص میشود، و به این ترتیب این عدد به ثابت پی نزدیک میگردد. این نشان دهندهٔ این واقعیت است که تک اکنون بسیار پایدار است، و تنها به روزرسانیهای جزئی بر روی آن انجام میگردد. نسخهٔ جاری تک ۳٫۱۴۱۵۹۲ میباشد، و آخرین بار در دسامبر ۲۰۰۲ به روزرسانی شدهاست. طراحی نرمافزار از نسخهٔ ۳٫۰ تغییری نکردهاست و هیچ ویژگی جدید یا تغییر اساسی بعد از آن افزوده نخواهد شد، و بدین ترتیب نسخههای جدید تنها شامل رفع اشکال خواهند بود. با وجود این که حتی دانلد نوث، خود نیز پیشنهاد کردهاست که در برخی زمینهها تک امکان بهبود دارد، اشاره نمودهاست که بدون تغییر نگاه داشتن سیستم که موجب تولید خروجیهای یکسان -کنون و در آینده- خواهد شد، مهمتر از معرفی ویژگیهای جدید است. به همین دلیل، او تأکید کردهاست که «آخرین تغییری که در تک(بعد از مرگ من) داده خواهد شد، این است که شمارهٔ نسخهٔ به پی تغییر کرده و بدین ترتیب باگهای باقیمانده، «ویژگی» محسوب خواهند شد.
اما، از آنجا که کد منبع تک در «مالکیت عمومی» است(پایینتر را ببینید)، برنامهنویسان دیگر اجازه دارند(و صراحتاً ترغیب شدهاند) که این سیستم را بهبود بخشند، اما باید از نام دیگری برای توزیع تک تغییر یافته استفاده نمایند، و این بدان معنی است که کد منبع همچنان تحول مییابد. به طور مثال، پروژهٔ امگا پس از سال ۱۹۹۱ با هدف اصلی ارتقاء تک برای حروفچینی چندزبانه ایجاد شد. دانلد نوث، خود نیز نسخههایی «غیررسمی» مانند «تک-زت» ایجاد کردهاست، که به کاربر اجازه میدهد تا متنی که از چپ به راست نوشته میشود با متن راست به چپ در یک سند ترکیب نماید.
[ویرایش] سیستم حروفچینی
دستورات تک معمولاً با یک ممیز معکوس شروع میشوند، و با یک جفت گیومه، گروهبندی میگردند. به هر صورت، تقریباً تمام ویژگیهای نحوی تک قابل در هر لحظه قابل تغییر میباشند، و این کار تحلیل معنایی ورودی تک را برای هر چیزی جز خود تک بسیار دشوار میسازد. تک زبانی ماکرویی و مبتنی بر نشانهاست: بسیاری از دستورات، از جمله دستورات تعریف شده توسط کاربر، در همان جا بسط داده میشوند، تا آنجا که تنها نشانههای غیر قابل بسط باقی بمانند و آن دستورات اجرا میشوند. بسط در عمل بدون تغییر جانبی است. ارجاع پیاپی ماکروها نیاز به حافظهای ندارد، و ساختار اگر-آنگاه-غیر نیز در دسترس است. این از تک یک زبان کامل از نظر تورینگ، حتی در سطح گسترش میسازد.
این سیستم قابل تقسیم به چهار سطح است: در سطح اول، نمادها از ورودی خوانده میشوند و به هر کدام یک کد بخش تخصیص مییابد. ترکیب یک ممیز معکوس(در حقیقت هر نماد از گروه صفر) با یک حرف(نمادهای گروه ۱۱) یا یک تکنماد دیگر، با نشانهٔ کنترلی جایگزین میشوند. به این معنی، این مرحله مانند تحلیل نحوی است، با این تفاوت که از ارقام، عدد نمیسازد. در مرحلهٔ بعد، دنبالههای کنترلی(مانند شرطها و ماکروهای تعریف شده) با متن جایگزین آنها تعویض میشوند. با این ترتیب، ورودی مرحلهٔ ۳ شامل جریانی از نمادها(از جمله آنهایی که معنای خاصی دارند) و نیز دنبالههای کنترلی غیر قابل گسترش(معمولاً مقدارها و دستورات نمایشی) خواهد بود. در این مرحله نمادها در بندها قرار میگیرند. الگوریتم شکستن خط در تک با بهینهسازی نقاط شکست در سراسر بند انجام میگیرد. چهارمین مرحله، فهرست طولی خطها و چیزهای دیگر را به صفحهها میشکند. سامانهٔ تک اطلاعات دقیقی از اندازهٔ تمام نمادها و سمبلها دارد و با استفاده از این اطلاعات، بهترین حالت چینش حروف در هر خط، و خطوط در صفحه را محاسبه مینماید. سپس، یک پروندهٔ خروجی دی. وی. آی.(مستقل از ابزار) تولید مینماید که شامل محلهای نهایی تمام نمادهاست. این پروندهٔ دی. وی. آی. میتواند با راهانداز مناسب به چاپ برسد، و یا به قالبهای دیگر تبدیل شود. این روزها، معمولاً از پی. دی. اف. تک برای صرف نظر از دی. وی. آی. و تولید قالب پی. دی. اف. استفاده میشود.
سیستم مبنایی تک در حدود ۳۰۰ دستور، که اولیهها نامیده میشوند، را درک میکند. به هر صورت، این دستورات سطح پایین، به ندرت توسط کاربران به کار میروند، و بیشتر کارآیی تک توسط پروندههای تعریف قالب(تصویرهای پایینگذاری شده از تک بعد از بارگذاری مجموعهٔ بزرگی از ماکروها) انجام میگیرد. قالب پیشگزیدهٔ اصلی نوث، که بیش از ۶۰۰ دستور را به تک اضافه مینمود، متن ساده نام دارد(که از طریق سیتان در دسترس است). قالبی که بیش از همه مورد استفاده قرار میگیرد، لیتک است، که ابتدا توسط لزلی لمپارت ایجاد شد، و شیوههای سند برای کتاب، نامه، اسلاید و ... و نیز پشتیبانی فهرست منابع و تولید خودکار شمارهٔ بخشها و معادلهها را اضافه نمود. دیگر قالبی که زیاد مورد استفاده قرار میگیرد، ای. ام. اس. تک نام دارد که توسط جامعهٔ ریاضی امریکا تولید شدهاست، و دستورات کاربرپسند بسیاری را ارائه مینماید که میتواند توسط مجلات برای سازگاری با شیوهٔ خاصشان مورد استفاده قرار گیرد. بیشتر ویژگیهای ای. ام. اس. تک با استفاده از «بسته»های ای. ام. اس. در لیتک مورد استفاده قرار گیرند. این بهای. ام. اس. لیتک تعبیر میشود. قالبهای دیگری مانند کانتکست وجود دارند، که عموماً برای نشر رومیزی استفاده میشوند. بخش اعظم کانتکست توسط هانس هاگن از شرکت پراگما نوشته شدهاست.
[ویرایش] جنبههای مهم تک
نرمافزار تک چیزهایی را ارائه میکند که قبل از ارائهٔ تک، در سامانههای حروفچینی دیگر، یا موجود نبودند، یا از کیفیت پایینی برخوردار بودند. بعضی از این نوآوریها، بر مبنای الگوریتمهای جالبی بنا نهاده شدهاست، و منجر به ارائهٔ تعدادی تز توسط دانشجویان نوث گشتهاست. با وجود این که برخی از این یافتهها اکنون در سیستمهای حروفچینی دیگر نیز قرار داده شدهاست، اما بعضی از این ویژگیها، مانند فاصلهگذاری ریاضی، هنوز در نوع خود منحصر به فرد هستند.
[ویرایش] فاصلهگذاری در فرمولهای ریاضی
از آنجا که هدف اصلی تک حروفچینی کتاب «هنر برنامهنویسی رایانه» با کیفیت بالا بود، نوث توجه زیادی به انتخاب قواعد فاصلهگذاری مناسب برای فرمولهای ریاضی نمود. او سه کار را به عنوان استاندارد کیفیت برای حروفچینی کامپیوتری در نظر گرفت: کتابهایی که توسط ادیسون-وزلی، ویرایشگر «هنر برنامهنویسی رایانه» منتشر شده بودند، و به طور خاص کارهای هانس ولف. نسخههایی از مجلهٔ آکتا متمتیکا با تاریخ حدود ۱۹۱۰؛ و یک نسخه از اینداگیشنز متمتیکا، یک مجلهٔ ریاضی آلمانی. نوث به دقت در این مثالها کند و کاو کرد تا قواعد فاصلهگذاری مناسب برای تک را استخراج نماید. با وجود این که تک تعدادی قواعد پایهای ارائه مینماید، و ابزارهایی برای مشخص نمودن فاصلهگذاری مناسب لازم است، اما پارامترهای حقیقی به قلم مورد استفاده برای حروفچینی فرمول بستگی دارد. برای مثال، فاصلهگذاری برای قلم «مدرن کامپیوتری» نوث، در طول سالها به دقت تنظیم شده، و دیگر تغییر نخواهد کرد. اما قلمهای دیگر مانند ای. ام. اس. اویلر، اولین بار که توسط نوث استفاده شدند، پارامترهای فاصلهگذاری جدیدی برای آنها باید تعریف میشد.
[ویرایش] چینش و فاصلهگذاری متن
در مقایسه با حروفچینی دستی، مشکل چینش در سیستمهای دیجیتالی مانند تک به راحتی قابل حل است. تک نقاط مناسبی برای شکستن خط ارائه میکند، و میتواند به صورت خودکار فاصلهٔ بین کلمهها را افزایش دهد تا خط پر شود. بنابراین مسألهٔ یافتن نقاط شکستی است که بهترین نتایج را ارائه کند. بسیاری از الگوریتمهای شکست خط، از روش اولین تناسب استفاده میکنند که در آن برای هر خط یکی پس از دیگری محاسبه میشوند، و هیچ نقطهٔ شکستی پس از تعیین تغییر داده نمیشود. چنین سامانهای قادر به تعریف یک نقطهٔ شکست در خط، یا تشخیص تأثیر آن بر خطهای بعدی نیست. در قیاس با آن، الگوریتم تناسب کامل که توسط تک استفاده میشود، و توسط دانلد نوث و مایکل پلس ایجاد شدهاست، تمام حالتهای ممکن نقاط شکست در یک بند را در نظر میگیرد، و بهترین ترکیب شکست خط را مییابد که بهترین چینش سراسری را ایجاد مینماید.
به طور رسمیتر، الگوریتم یک مقدار به نام «میزان بدی» تعریف میکند که به هر شکست خط ممکن تخصیص داده میشود. اگر لازم باشدکه فاصلههای موجود در خط افزایش پیدا کنند تا خط طول کافی داشته باشد، این میزان بدی افزایش پیدا میکند. اگر شکست خط ناخواسته باشد، میزان بدی به مقدار زیادی افزایش مییابد. مثلاً در حالتی که نیاز به شکستن کلمهای وجود داشته باشد، یا دو کلمه در دو خط پشت سرهم باید شکسته شود، و یا یک خط گسترده با یک خط فشرده دنبال شود چنین اتفاقی میافتد. سپس این الگوریتم شکستهایی را مییابد که مجموع مربعات میزان بدی خطهای حاصل شده(با در نظر گرفتن افزایشهای خاص ذکر شده در بالا) را کمینه میکنند. اگر بند شامل n شکست خط ممکم باشد، تعداد حالتهایی که باید بررسی شوند، ۲ به توان n حالت است. به هر صورت با استفاده از تکنیک برنامهسازی پویا، پیچیدگی این الگوریتم تا n به توان ۲ کاهش مییابد. سادهسازیهای بیشتر(به طور مثال، بررسی نکردن حالات غیرممکن مانند شکست اولین کلمهٔ بند) منجر به الگوریتمی کارآ میگردد که زمان اجرای آن تقریباً از مرتبهٔ n است. به هر صورت، در حالت کلی مقالهای از مایکل پلس نشان میدهد که چگونه الگوریتم شکست صفحه میتواند NP-کامل باشد، که این به خاطر پیچیدگی اضافی چینش عکسها در صفحهاست. الگوریتم مشابهی برای تشخیص بهترین راه شکستن یک بند در طول دو صفحه وجود دارد که از بندهای تکخطی(تکخط حاظر در یک صفحه که بقیهٔ آن در صفحهٔ قبل یا بعد از آن قرار دارد) جلوگیری میکند. الگوریتم شکست خط تک، در بسیاری از نرمافزارهای دیگر مانند برنامهٔ نشر رومیزی ادوبی ایندیزاین و دستور خط فرمان گنو اف. ام. تی. در یونیکس، الگوبرداری شدهاست.
اگر هیچ شکست خط مناسبی یافت نشود، این سامانه سعی میکند که یک کلمه را بشکند. نسخهٔ اولیهٔ تک، بر مبنای یک الگوریتم شکست کلمه با مجموعهای از قوانین حذف پیشوند و پسوند کار میکرد و از آن برای تشخیص این که آیا باید یک شکست بین دو هجای صدادار در یک الگو به فرم بیصدا-صدادار-صدادار-بیصدا(که در اکثر مواقع ممکن است) قرار دهد بهره میبرد. تک۸۲ از یک الگوریتم شکست خط جدید، که توسط فرانک لیانگ در ۱۹۸۳ طراحی شده بود، استفاده میکرد که به نقاط شکست در یک کلمه، اولویتهایی اختصاص میداد. در ابتدا فهرستی از الگوهای شکست کلمه به صورت خودکار و در قالب تعدادی کلمهٔ شکسته شده(در حدود ۵۰،۰۰۰ کلمه) تولید میشد.