TeX में इतने सारे श्रेणी कोड क्यों हैं?

Dec 21 2020

जब मैं श्रेणी कोड की लंबी सूची को देखता हूं, तो मुझे आसानी से समझ में नहीं आता है कि इन सभी की आवश्यकता क्यों है। उदाहरण के लिए:

  • $, ^, _, और &आसानी से सक्रिय पात्रों के रूप में के बजाय परिभाषित किया जा सकता था।
  • की बात करते हुए &, टैब संरेखण पर इस तरह के एक सामान्य प्रतीक को क्यों बर्बाद करें? \nc"नए कॉलम" के लिए कुछ का उपयोग क्यों न करें ?

जवाब

6 egreg Dec 21 2020 at 07:46

बेशक विशेष श्रेणी कोड वाले सभी वर्णों को सक्रिय वर्णों से नहीं बदला जा सकता है।

टोकन कोड के दौरान श्रेणी कोड असाइन किए जाते हैं और फिर स्थायी रूप से एक टोकन से जुड़े होते हैं। हालांकि, श्रेणी कोड 0 वाला चरित्र कभी भी चरित्र टोकन नहीं बनता है, क्योंकि यह नियंत्रण अनुक्रम बनाने के लिए तंत्र को ट्रिगर करता है। इसी प्रकार श्रेणी कोड 5 (अंत-पंक्ति), 9 (उपेक्षित), 14 (टिप्पणी), 15 (अमान्य) के साथ चरित्र टोकन होना असंभव है।

कोड 0, 5, 9, 14 और 15 सभी विशेष क्रियाओं को ट्रिगर करते हैं। ऐतिहासिक नोट: TeX78 में 5 का वर्ग कोड %था (जो कि टिप्पणियों के लिए अनुमति नहीं देता था क्योंकि अब हम उपयोग कर रहे हैं)।

नियंत्रण अनुक्रमों के निर्माण के दौरान श्रेणी कोड 11 और 12 के बीच अंतर आवश्यक है: \aएक नियंत्रण शब्द है (और रिक्त स्थान को बाद में अनदेखा किया जाता है), जबकि \?एक नियंत्रण प्रतीक है (और रिक्त स्थान की अनदेखी नहीं की जाती है)।

कोड 1 और 2 इसी तरह मैक्रो परिभाषाओं और तर्क हथियाने (और समूहन) के लिए आवश्यक हैं। कोड 10 रिक्त स्थान को सामान्य बनाने और कोड इंडेंटेशन के लिए मौलिक है। कोड 14 टिप्पणियों से मेल खाता है और इसी तरह महत्वपूर्ण है और कोड 6 मैक्रो परिभाषाओं (और संरेखण) में मापदंडों को निरूपित करने के लिए भी है।

चलो अब कोड 3, 4, 7 की जांच, 8. वहाँ सकता है उनके लिए पुरातन, का कहना है कि हो सकता है \mathshift, \alignment, \superscriptऔर \subscripts। वास्तव में उन्हें परिभाषित करना संभव होगा

\let\mathshift=$
\let\alignment=&
\let\superscript=^
\let\subscript=_

और वास्तव में सादे टेक्स और LaTeX है \spऔर \sbबिल्कुल उसी तरह परिभाषित किया।

सक्रिय पात्रों का उपयोग क्यों नहीं? खैर, सक्रिय पात्रों को 1980 में पेश किया गया था, अच्छी तरह से श्रेणी कोड के साथ व्यापार शुरू होने के बाद। TeX78 में केवल 13 कोड थे, इसलिए सक्रिय पात्रों को अगला स्लॉट मिला। टिप्पणियाँ जैसा कि अब हम जानते हैं कि उन्हें स्लॉट 14 मिला और कोड 15 को ASCII 127 जैसे अजीब पात्रों के साथ जोड़ा गया (जो कि त्रुटियों के मामले में पिछली बाइट को हटाने के लिए पंच कार्ड के साथ उपयोग किया गया था ताकि कार्ड बर्बाद न हो)।

लेकिन असली कारण यह है कि सक्रिय वर्ण मैक्रोज़ (अधिक सटीक, नियंत्रण अनुक्रम) की तरह होते हैं और उन्हें किसी भी समय एक नया अर्थ सौंपा जा सकता है।

यदि आप कहते हैं \def\b{foo}\def\a{\b}\def\b{baz}, तो एक कॉल का \aउत्पादन होगा baz, नहीं foo

इसी तरह, कुछ इस तरह

\def\splat{\hbox{$\otimes$}}

$एक सक्रिय चरित्र के साथ मामले में एक के बाद एक काम नहीं करेगा \def${foo}। एक परिभाषा \mathshiftकी जगह एक आदिम की आवश्यकता होगी $जैसे \splat; लेकिन समस्या को सिर्फ आगे बढ़ाया जाएगा: क्या होगा अगर कोई किसी को फिर से परिभाषित करने के लिए अनिवार्य महसूस करता है \mathshift?

इसके अलावा, #TeX की कोर को बदले बिना एक सक्रिय चरित्र के रूप में लागू नहीं किया जा सकता है। शायद यह किया जा सकता है &, लेकिन प्रारंभिक अर्थ के लिए एक आदिम आवश्यक होगा और समस्या पहले की तरह ही होगी।

व्यामोह? हर्गिज नहीं। साइट पर ऐसे लोगों द्वारा सवाल उठाए गए हैं जिन्होंने इस्तेमाल किया \foreach \number in {1,2,...,10} {...}और शिकायत की कि कुछ गलत हो गया। या \foreach \color in {<color list>}{...}नरक नरक टूट गया।