2010-03-17 8 views
6

द्वारा प्रतिस्थापित किया जा सके, क्या यह TeX 'प्री-प्रोसेसर' के आउटपुट को देखना संभव है, i। ई। वास्तविक आउटपुट से पहले मध्यवर्ती कदम किया जाता है लेकिन सभी उपयोगकर्ता परिभाषित मैक्रोज़ के साथ प्रतिस्थापित किया गया है और केवल टीएक्स प्राइमेटिव्स का सबसेट छोड़ दिया गया है?एक टेक्स्ट स्रोत को ट्रांसफॉर्म करें ताकि सभी मैक्रोज़ को उनकी परिभाषा

या क्या ऐसा कोई मध्यवर्ती कदम नहीं है?

उत्तर

5

लिखें

\edef\xxx{Any text with any commands. For example, $\phantom x$.} 

और फिर लॉग फ़ाइल में उत्पादन के लिए

\show\xxx 

या अपने दस्तावेज़ में उत्पादन के लिए

\meaning\xxx 
3

में कोई "पूर्व प्रोसेसर" नहीं है टेक्स। किसी भी चरण में किसी भी नियंत्रण अनुक्रम के लिए प्रतिस्थापन पाठ भिन्न हो सकता है (यह बहुत सी चीजों के लिए उपयोग किया जाता है!)। उदाहरण के लिए

\def\demo{\def\demo{cde}} 
\demo 

पहले एक तरीके से \ demo को परिभाषित करेगा और फिर इसे बदल देगा। इसी तरह, आप टीएक्स प्राइमेटिव को रीडायरेक्ट कर सकते हैं। उदाहरण के लिए, लाटेक्स कर्नेल \ इनपुट को आंतरिक स्थिति में ले जाता है और इसे बदल देता है। एक सरलीकृत संस्करण:

\let\@@input\input 
\def\input#1{\@@input#1 } 
+0

लेकिन आपके उदाहरणों का स्पष्ट रूप से विश्लेषण किया जा सकता है। \ \ def \ demo {\ def \ demo {cde}} \ demo' \ def \ demo {\ def \ demo {cde}} \ def \ demo {cde} 'का मूल्यांकन करता है और इसके बाद कोई मूल्यांकन संभव नहीं है कदम, हम सभी '\ def' कथन हटा सकते हैं और इस प्रकार इसे ∅ तक घटा दिया है। - '\ def \ demo {\ def \ demo {c {\ it de}}} \ demo \ demo' हालांकि अंततः' c {\ it de} 'का मूल्यांकन करेगा। – Debilski

+0

इस मामले में हाँ, लेकिन वास्तविक उपयोग में हमारे पास \ डेमो के लिए कई परिभाषाएं हो सकती हैं और यह कई स्थानों पर उपयोग की जाती है। जिस बिंदु पर मैं प्राप्त कर रहा था वह यह है कि प्रत्येक मैक्रो में एक निश्चित प्रतिस्थापन टेक्स्ट नहीं होता है, और इसलिए आप चीजों को अपने कोड से प्रतिस्थापित नहीं कर सकते हैं। निश्चित रूप से टीएक्स स्वयं चीजों को प्रतिस्थापित करता है अगर वे मैक्रोज़ हैं, लेकिन "एक शॉट" में नहीं: प्रत्येक टोकन की जांच की जाती है क्योंकि इसकी आवश्यकता होती है। –

4

Selective Macro Expander आज़माएं।

+0

लिंक टूटा हुआ है। – holdenlee

+0

@holdenlee, https://web.archive.org/web/20100310064605/http://www.astro.indiana.edu/~jthorn/software.html आज़माएं। – lhf

4

टीएक्स में मैक्रो विस्तार का पता लगाने सहित कई अंतर ट्रेसिंग टूल हैं। यह वास्तव में लाइव मैक्रोज़ का पता लगाता है क्योंकि वे वास्तव में विस्तारित होते हैं, लेकिन यह अभी भी काफी उपयोगी है। में पूर्ण विवरण TeXbook और शायद कहीं और।

जब मैं एक मैक्रो समस्या मैं आम तौर पर सिर्फ बड़ा हथौड़ा का उपयोग डिबग करने के लिए कोशिश कर रहा हूँ:

\tracingall\tracingonline 

तो मैं उत्पादन या मैं क्या जानना चाहते हैं के लिए log फ़ाइल में खुदाई।

+0

[इस उत्तर] के अनुसार (http://tex.stackexchange.com/a/60494/15665), '\ tracingonline' को पैरामीटर की आवश्यकता है। (लेकिन '\ tracingall' पहले से ही सब कुछ कवर करना चाहिए, नहीं?) –

0

tex.SE, और this question पर this question पर इस मुद्दे की बहुत सी चर्चा है। लेकिन मैं यह ध्यान देने का अवसर दूंगा कि सबसे अच्छा जवाब (आईएमओ) de-macro प्रोग्राम का उपयोग करना है, जो कि एक पाइथन लिपि है जो TeXLive के साथ आता है। यह काफी सक्षम है, और तर्कों के साथ-साथ सरल प्रतिस्थापन भी संभाल सकता है।

इसका इस्तेमाल करने के लिए आपको मैक्रो है कि आप एक <something>-private.sty फ़ाइल में विस्तार करना चाहते हैं के लिए कदम है, और यह \usepackage{<something>-private} साथ अपने दस्तावेज़ में शामिल है, तो de-macro <mydocument> चलाते हैं। यह <mydocument>-private.tex बाहर निकलता है, जो आपके मूल जैसा ही है, लेकिन आपके निजी मैक्रोज़ के साथ उनकी अधिक बुनियादी चीजों से बदल दिया गया है।

संबंधित मुद्दे

 संबंधित मुद्दे