2009-12-09 13 views
18

मैं पर्यावरण में LaTeX कमांड कैसे लपेट सकता हूं? संक्षेप में, मैं \ somecommand {content} को \ start {somecommand} सामग्री \ end {somecommand} में कैसे बदल सकता हूं? मैंने एक नया वातावरण बनाने में स्पष्ट कोशिश की है:पर्यावरण में LaTeX कमांड को लपेटें

\newenvironment{somecommand}[0]{ 
    \somecommand{ 
} 
{ 
    } 
} 

लेकिन इससे घुंघराले ब्रैकेट के साथ समस्याएं आती हैं। मुझे एक और ठोस उदाहरण दें। कहें कि आप पर्यावरण को बहुत महत्वपूर्ण बनाना चाहते हैं और आप इसे पूरा करने के लिए कमांड emph का उपयोग करना चाहते हैं। एक सीधा (लेकिन गलत) समाधान के रूप में

\newenvironment{very-important}[0]{ 
    \emph{ 
} 
{ 
    } 
} 

समस्या यहाँ कुछ लिखने के लिए होगा है कि जानकारी के साथ आदेश काम करता है तो यह पर्यावरण के उद्घाटन आदेशों से एक नहीं है कि पर्यावरण के अंदर पाया जाता है, , न ही यह पर्यावरण का एक बंद आदेश है। सवाल तब है: आप यह कैसे कर सकते हैं?

+0

अपने रंगीन बॉक्स के बारे में एक नया प्रश्न पूछें, मैं आपको दो बार तर्क पढ़ने के बिना सबसे अच्छा समाधान बताता हूं। –

उत्तर

10

ऐसा लगता है कि अब मुझे लगता है कि सवाल क्या है।

\newenvironment{very-important}{\startimportant}{} 
\def\startimportant#1\end{\emph{#1}\end} 

\begin{very-important} 
Something 
\end{very-important} 

यह समाधान अच्छी तरह से काम करता है। लेकिन आईएमएचओ पर्यावरण में सभी पाठ लपेटना बुरा विचार है। क्यूं कर? टेक्स्ट के साथ कुछ करने के दो तरीके हैं। उदाहरण के लिए, आप फ़ॉन्ट को बदलना और इटैलिक का उपयोग करना चाहते हैं।

  • पहली विधि। \textit{sentence written in italics}
  • दूसरी विधि। {\it sentence written in italics\/}

क्या अंतर है? बात यह है कि पहली विधि दूसरे का उपयोग करती है। \it मैक्रो फ़ॉन्ट बदलता है और ब्रेस } इसे वापस बदलता है। \textit मैक्रो पूर्ण तर्क पढ़ता है, फ़ॉन्ट बदलता है और फिर तर्क को सम्मिलित करता है: \textit लगभग निम्नानुसार (बिल्कुल नहीं) परिभाषित किया गया है।

\def\texit#1{{\it#1\/}} 

पहली विधि हमेशा अतिरिक्त काम कर रही है। यह तर्क दो बार पढ़ता है। लगभग हमेशा, आप परिवर्तन कर सकते हैं और फिर आप सब कुछ वापस कर सकते हैं।

आखिरकार आप पर्यावरण का उपयोग क्यों करते हैं? मैक्रोज़ का प्रयोग करें।

\veryimportant{ 
    Any thought 
} 
+0

इस समाधान के लिए धन्यवाद! असल में, मुझे टेक्स्ट पर जोर देने के रूप में कुछ के लिए पर्यावरण की आवश्यकता नहीं है। इस उदाहरण को प्रदान करने का मुख्य कारण यह है कि ज्यादातर लोग इसे समझेंगे, प्रश्न और उत्तर कई को लागू करेंगे। मेरा व्यक्तिगत उपयोग एक नए रंग में एक रंगबॉक्स और कुछ संरेखण को एम्बेड करना है। चूंकि कलरबॉक्स एक कमांड है, इसलिए मुझे नहीं पता था कि यह कैसे करें। फिर भी, मेरे उपयोग के लिए यह पर्यावरण का उपयोग करने के लिए और अधिक समझ में आता है, कम से कम नहीं, क्योंकि यह अव्यवस्था और घुंघराले ब्रैकेट के डाउनपोर को रोकता है जो बाद के चरण में संपादन को काफी कठिन बनाता है। धन्यवाद! – kvaruni

-1

नया पर्यावरण somecommand मैक्रो \somecommand को परिभाषित करता है। आप मैक्रो का उपयोग उसी नाम \somecommand के साथ नहीं कर सकते हैं।

इसके अलावा आप

\newenvironment{name}{openning command}{closing commands} 

बजाय

\newenvironment{somecommand}[0]{ \somecommand{ } { } } 

लिखना चाहिए आप स्पष्ट रूप से बंद करने आदेशों के साथ एक समस्या है।

+0

आपने मेरी समस्या दोहराई, इसलिए मैंने अपनी मूल समस्या को बेहतर तरीके से समझाने के लिए संशोधित किया है। मुझे उम्मीद है कि यह स्पष्ट करता है! फिर भी धन्यवाद! – kvaruni

19

इस वातावरण पैकेज के साथ किया जा सकता है इस प्रकार है:

 
\usepackage{environ} 
... 
\NewEnviron{very-important}{\emph{\BODY}} 

\BODY पर्यावरण के शरीर होता है, और वातावरण नेस्ट जा सकता है। अधिक जानकारी के लिए प्रलेखन देखें।

+0

धन्यवाद, हालांकि दूसरा समाधान काम करता है, आपके द्वारा प्रस्तावित समाधान निश्चित रूप से सरल है! – kvaruni

1

आदेश को परिभाषित

\newcommnad{eqn}{1}{\begin{equation}#1\end{equation}} 

बदल जाएगा

\eqn{x^2=y} 

को
\begin{equation} 
    x^2=y 
\end{equation} 

मुझे लगता है कि

3

एक सरल तरीका हो सकता है:

\newenvironment{somecommand}[0]{ \somecommand\bgroup } { \egroup }

स्पष्टीकरण: { की तरह काम करता है और \bgroup\egroup काम करता है } की तरह।

+2

सभी आदेशों के साथ काम नहीं करता है, उदा। '\ Fbox' – Hotschke