2009-10-14 10 views
17

मैं अपने लाटेक्स दस्तावेज़ में \begin{figure} ... \end{figure} का उपयोग कर रहा हूं, लेकिन डिफ़ॉल्ट स्टाइल बदसूरत है; अर्थात्, आंकड़े सभी बाएं-गठबंधन हैं। वहाँ "आंकड़ा" पर्यावरण को फिर से परिभाषित करने का एक तरीका तो यह स्वचालित रूप से इस तरह के इस ?: तरहलाटेक्स पर्यावरण में एक छोटा संशोधन करना

\begin{figure} \begin{center} 
\end{center} \end{figure} 

ज़रूर के रूप में कुछ केंद्रित आदेशों सम्मिलित करता है, मैं \newenvironment का प्रयोग कर एक "cfigure" पर्यावरण को परिभाषित करने के सकता है, लेकिन है कि अवांछनीय है। मैं अपने सभी "आंकड़े" को "cfigures" में बदलना नहीं चाहता हूं (और बाद में बाद में एहसास हुआ कि मैं चाहता हूं कि सभी आंकड़े सही-गठबंधन हों और उन्हें सभी को "rfigures" का नाम बदलना पड़े।)

मैं \renewenvironment इस्तेमाल कर सकते हैं, लेकिन फिर मैं क्या "आंकड़ा" पर्यावरण मूल प्रति के रूप में परिभाषित किया गया था खोजने के लिए LaTeX स्रोत के माध्यम से खुदाई/में पेस्ट करना होगा।

मैं लगभग पाया कि मैं क्या this blog post पर चाहता था, लेकिन उदाहरण के लिए एक आदेश के लिए, पर्यावरण नहीं था।

उत्तर

15
\let\oldfigure\figure 
\def\figure{\oldfigure\centering} 

वैकल्पिक तर्क के साथ काम करने वाला एक और समाधान।

फिक्स्ड।

\let\oldfigure\figure 
\let\oldendfigure\endfigure 
\def\figure{\begingroup \oldfigure} 
\def\endfigure{\centering \oldendfigure \endgroup} 

फिक्स्ड 2. यह किसी भी विकल्प और किसी भी नियम और \par अंदर के साथ अच्छी तरह से काम करता है।

\makeatletter 
\let\oldfigure\figure 
\def\figure{\@ifnextchar[\[email protected] \[email protected]} 
\def\[email protected][#1]{\oldfigure[#1]\centering} 
\def\[email protected]{\oldfigure\centering} 
\makeatother 
+2

यह काम नहीं करता है, क्योंकि आंकड़ा एक वैकल्पिक तर्क (जैसे [एचटीबीपी] लेता है जो इस पुनर्वितरण द्वारा तोड़ा जाएगा। –

+1

उम्मम ... ठीक है। मैं –

+1

हम्म पर पुनर्विचार करूंगा, क्या आपने अपना नया समाधान परीक्षण किया है?मेरे लिए काम नहीं लग रहा है। –

5

एक और जवाब में बताया गया है, तो आप \figure मैक्रो क्योंकि उस इच्छाशक्ति गंदगी वैकल्पिक तर्क प्रसंस्करण के अंत तक prepending आदेशों की पुरानी चाल नहीं कर सकते।

यदि किसी पर्यावरण में तर्क नहीं है तो यह ठीक काम करेगा, लेकिन अन्यथा ऐसा करने का कोई सीधा तरीका नहीं है। स्वचालित रूप से अपने आंकड़ों की सामग्री केंद्रित कर देगा तो

\usepackage{floatrow} 

:

आंकड़ों के साथ अपनी समस्या के लिए, floatrow पैकेज लोड करके देखें।

अद्यतन: यदि आप कोई पैकेज लोड नहीं करना चाहते हैं, तो यहां कुछ कोड है जो यह भी करेगा। ध्यान दें कि यह figure पर्यावरण के लिए विशिष्ट है, लेकिन मूल विषय यह है: मूल परिभाषा की प्रतिलिपि बनाएँ, उसी तरह तर्कों को पार्स करना, फिर अंत में आपको जो भी कोड चाहिए, उसे जोड़ें।

 
\makeatletter 
\renewenvironment{figure}[1][\[email protected]]{ 
    \edef\@tempa{\noexpand\@float{figure}[#1]} 
    \@tempa\centering 
}{ 
    \[email protected] 
} 
\makeatother 

\edef पूरी तरह से विस्तार करने के लिए \[email protected] पहले यह \@float मैक्रो के लिए पारित किया है की आवश्यकता है।

+0

मैंने ऐसे समाधान के लिए कहा था जिसमें परिभाषा की प्रतिलिपि शामिल नहीं है, लेकिन मैंने इसे वैसे भी कोशिश की और एक अपरिभाषित कमांड "\ fps" प्राप्त किया। – exclipy

+0

मैंने समझाया कि परिभाषा की प्रतिलिपि किए बिना (इस मामले में) ऐसा करना असंभव क्यों है। कोड के आस-पास आपको '\ makeatletter' ...' \ makeatother' जोड़ने की आवश्यकता है (मैंने इसे मेरे उदाहरण में जोड़ा) जब (पुनः) '@ 'वाले कमांड को परिभाषित करते हैं। –

2

कैसे के बारे में:

\newenvironment{centeredfigure}{\begin{figure}\begin{center}}{\end{center}\end{figure}} 

नोट: अपरीक्षित।

+3

इस दृष्टिकोण के साथ कुछ भी गलत नहीं है लेकिन आपको 'केंद्र' पर्यावरण के बजाय '\ centering' का उपयोग करना चाहिए, क्योंकि बाद में अतिरिक्त ऊर्ध्वाधर पैडिंग जोड़ना आवश्यक नहीं है। –

+0

अच्छा बिंदु। मैं इसे खुद से बचने की कोशिश कर रहा हूं। धन्यवाद! – Martijn

+3

जैसा कि मैंने अपने प्रश्न में कहा था, मैं इसे किसी अन्य नाम के तहत फिर से परिभाषित नहीं करना चाहता हूं। – exclipy

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