स्थानीय {
... }
समूहों का बुद्धिमानी से उपयोग करें
जैसा कि इस उत्तर में बताया गया है , जैसे सक्रिय वर्णों का ~
उपयोग स्थूल नाम के रूप में किया जा सकता है। दुर्भाग्य से, ~
डिफ़ॉल्ट रूप से एकमात्र सक्रिय चरित्र है, और किसी अन्य वर्ण के लिए कैटकोड बदलना महंगा है: \catcode`!13
12 बाइट्स लेता है। यदि नई मैक्रो परिभाषा केवल आपके कोड के एक छोटे से क्षेत्र में आवश्यक है, तो स्थानीय समूह एक समाधान हो सकते हैं।
जब TeX द्वारा खोले गए एक नए स्थानीय समूह में प्रवेश करता है {
, तो यह आंतरिक बचत स्टैक पर एक नया समूह स्तर बनाता है। इसका मतलब यह है कि सभी वर्तमान मैक्रोज़ और रजिस्टर सहेजे जाते हैं। जब \global
तक समूह द्वारा बंद नहीं किया जाता है तब तक उनके लिए कोई भी संशोधन (जब तक स्पष्ट रूप से चिह्नित नहीं किया जाता है ) केवल सक्रिय हो रहा है }
। इसका मतलब यह है कि ~
एक समूह के भीतर पुनर्परिभाषित किया जा सकता है, नई परिभाषा के साथ वहां उपयोग किया जाता है, और समूह समाप्त होने के बाद पुरानी रक्षा स्वचालित रूप से बहाल हो जाएगी।
यहाँ एक उदाहरण है:
\def~{abc}
~ -- {\def~{123}~} -- ~
यह आउटपुट
एबीसी - 123 - एबीसी
इस समूहीकरण तंत्र का एक दिलचस्प दुष्प्रभाव यह है कि पुराने मूल्य अभी भी समूह के अंदर उपलब्ध हैं जब तक कि उन्हें वहां नहीं बदला जाता। यह समझाने के लिए, कल्पना करें कि हम किसी काउंटर के मान के आधार पर कई वर्णों को प्रिंट करना चाहते हैं, उन्हें एक निश्चित लंबाई तक रिक्त स्थान के साथ पैड दें, और मूल काउंटर मान के साथ आगे बढ़ें। यह निम्नलिखित द्वारा प्राप्त किया जा सकता है:
\newcount\x
\x=3
Print a char \the\x\ times,
{\x=-\x \advance\x 10 pad with \the\x\ spaces,}
and go on with x=\the\x.
जो आउटपुट देता है
एक चार बार प्रिंट करें, 7 स्थानों के साथ पैड करें, और x = 3 के साथ आगे बढ़ें।
यह समूहीकरण व्यवहार विशेष रूप से महत्वपूर्ण है यदि आप नेक्सिंग के लिए TeX के मानक मैक्रोज़ का उपयोग करना चाहते हैं \loop ... \repeat
। ये मैक्रोज़ आंतरिक कमांड को परिभाषित करते हैं और आगे बढ़ने का निर्धारण करने के लिए उनका उपयोग करते हैं। आंतरिक लूप को ब्रेसिज़ में डाले बिना उन्हें घोंसला करना आंतरिक आदेशों को भ्रमित करेगा और अप्रत्याशित व्यवहार को जन्म देगा।