2010-05-04 8 views
5

मैं ntheorem उपयोग कर रहा हूँ की स्थिति का एक सेट टाईपसेट करने के लिए एक प्रमेय की तरह पर्यावरण संदर्भित। मेरी प्रस्तावना में मेरे पास है:द्वारा अपनी [नाम]

\theoremstyle{empty} 
\newtheorem{Condtion}{Condtion} 

जब मैं एक शर्त टाईपसेट करना चाहते हैं, मैं लिखने:

\begin{Condtion}[name] 
\label{cnd:nm} 
foo foo foo 
\end{Condition} 

नाम के साथ, हालत के टेक्स्ट की शुरुआत के रूप में एक ही लाइन पर बोल्ड अक्षरों में प्रकट होता है कोई संख्या या कुछ भी नहीं। उत्तम।

मैं अब क्या करना चाहते हैं क्या \ref आदेश किसी भिन्न रूप से हालत का उल्लेख है, \ रेफरी संख्या [जो कहीं और प्रदर्शित नहीं किया जाता] कॉल \ thref वें हालत के लिए लिखते हैं, "स्थिति n" \ nameref लेबल के सेक्शन का नाम लिखता है। एक zref समाधान here का सुझाव दिया गया था, लेकिन असंतोषजनक और अनावश्यक लगता है।

एक आसान तरीका पर कोई सुझाव यह करने के लिए? (यहां तक ​​कि एक सरल ज़ेफ समाधान भी अच्छा होगा) इस समय मैंने प्रत्येक शर्त के लिए \newcommand परिभाषित किया है और स्थिति का हवाला देते हुए इसका उपयोग किया है। यह semantically अपारदर्शी और बस असंतुष्ट है ...

(संपादित करें: मैंने ntheorem, वुल्फगैंग मई के एक लेखक को ईमेल किया, और उन्होंने समझाया कि वास्तव में ntheorem के भीतर ऐसा करने का कोई तरीका नहीं है, क्योंकि [name] विकल्प रिकॉर्ड नहीं किया गया है।)

(संपादित करें: यह टिप्पणी में सुझाए गए एक डुप्ली नहीं है, क्योंकि मैं अपने वैकल्पिक नाम कमांड द्वारा पर्यावरण को संदर्भित करने में रूचि रखता हूं, जिसमें सेक्शन/अध्याय में बैठता है, संदर्भित नहीं करता है।)

+1

http://stackoverflow.com/questions/1491842/references-with-text-in-latex जांचें जो * एक प्रभावी डुप्लिकेट हो सकता है। इसके अलावा http://stackoverflow.com/questions/2613506/ref-chapter-name-in-latex और चीजें वहां से लिंक हैं। – dmckee

+0

zref काम कर सकता है, लेकिन यह चीजों को करने का एक बहुत ही जटिल तरीका लगता है। मेरा मतलब है, [नाम] पहले से ही पर्यावरण की शुरुआत में घोषित किया गया है। मैं बस इसे अपने नाम से कॉल करना चाहता हूं इसकी संख्या नहीं ... – Seamus

उत्तर

7

मुझे लगता है कि निम्नलिखित तुम क्या चाहते हो सकता है वहाँ "सामान" संदर्भित के बारे में nameref दस्तावेज में एक खंड है।

\makeatletter 
\def\namedlabel#1#2{\begingroup 
    \def\@currentlabel{#2}% 
    \label{#1}\endgroup 
} 
\makeatother 

तो फिर तुम, के रूप में

\begin{theorem} 
    \namedlabel{thm:seamus}{Seamus' Theorem} 
    Here is Seamus' Theorem. 
\end{theorem} 

Here I reference~\ref{thm:seamus}. 

दुर्भाग्य से, यह तो केवल नाम से संदर्भित किया जा सकता इसका इस्तेमाल हालांकि मैं आप (बेशक एक अलग कुंजी के साथ) के रूप में अच्छी तरह से एक सामान्य \label इस्तेमाल कर सकते हैं लगता है।

amsthm वातावरण के लिए आप उपयोग कर सकते हैं

\makeatletter 
\let\@[email protected]=\@begintheorem 
\def\@begintheorem#1#2[#3]{% 
    \gdef\@[email protected]{#3}% 
    \@[email protected]{#1}{#2}[#3]% 
} 
\def\namedthmlabel#1{\begingroup 
    \edef\@currentlabel{\@[email protected]}% 
    \label{#1}\endgroup 
} 
\makeatother 
+0

उस तरह के काम करता है। लेकिन यह अभी भी आदर्श नहीं है। मुद्दा यह है कि, मैं शर्त के वैकल्पिक तर्क की सामग्री का उपयोग उस नाम के रूप में करना चाहता हूं जैसा मैं कॉल कर रहा हूं। तो मेरे पास \ \ {{कंडीशन} [सीएनडी नाम] है 'और मैं एक लेबल चाहता हूं जो, जब मैं इसे' रेफरी 'करता हूं, तो "सीएनडी नाम" कहें, बोल्ड में जब यह पहली बार लिखा जाता है। इस तरह, मुझे लेबल में एक अतिरिक्त तर्क जोड़ना है और यह सुनिश्चित करना है कि यह "सीएनडी नाम" से मेल खाता है ... – Seamus

+0

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

+0

ठीक है धन्यवाद। मैं बाद में कोशिश करूँगा। क्या इसी तरह की चीज ntheorem के लिए काम करेगी? – Seamus

2

आप nameref पैकेज है, जो hyperref साथ वितरित किया जाता है की जाँच कर सकते हैं। http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=nameref

अधिक संदर्भित पर: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=nameref

+1

nameref काम नहीं करता है: यह सेक्शन के शीर्षक को संदर्भित करता है प्रमेय-जैसे वातावरण में दिखाई देता है। टिप्पणी के संभावित डुप्लिकेट में मिली अन्य संभावनाओं की जांच कर रहा हूं ऊपर। – Seamus

3

nameref काम नहीं करता है:। यह धारा प्रमेय की तरह वातावरण में प्रकट होता है के शीर्षक का संदर्भ

यह एक है nameref बग जो पहले से ही कुछ समय पहले तय किया गया था: http://web.archiveorange.com/archive/v/9uUx5EuqoCGynIvx3om7#lY2MJxvge2oMgOi

दुर्भाग्य से संकुल की बुरी तरह पुराने संस्करणों के साथ Debian/Ubuntu के जहाज की तरह कुछ Linux distros (उबंटू 11.04 अभी भी जहाजों लाइव 2009 टेक्स हालांकि नवीनतम संस्करण टेक्स लाइव 2011)।यदि आप डिस्ट्रो में टेक्स लाइव पैकेज का उपयोग करके ऐसे लिनक्स डिस्ट्रो स्टॉप का उपयोग कर रहे हैं, और यहां से सीधे TeX Live इंस्टॉल करें: http://www.tug.org/texlive/ फिर आप tlmgr (वास्तव में एक अच्छा टूल जो डेबियन/उबंटू के साथ शिप नहीं करते हैं) का उपयोग करके पैकेज अपडेट कर सकते हैं। ।

0

मैंने सोचा कि दूसरों को यह सहायक मिल सकता है। भले ही मेरे पास hyperref पैकेज अपडेट किया गया था, फिर भी मुझे \nameref से सही व्यवहार प्राप्त करने के लिए \usepackage{hyperref} के बाद \usepackage{nameref} पर स्पष्ट रूप से कॉल करना पड़ा। \usepackage{nameref} पर स्पष्ट कॉल के बिना, \nameref काम किया, लेकिन इस धागे में चर्चा की गई बग का प्रदर्शन किया।

अद्यतन: यह कामकाज न्यूनतम उदाहरण (जिसे मैंने चेक किया) के लिए आवश्यक नहीं है। मुझे नहीं पता कि मेरी स्टाइल फाइलों में कुछ और जटिल हो रहा है, लेकिन अगर मुझे कुछ मिल जाए तो मैं इसे अपडेट कर दूंगा। यह अभी भी किसी भी मुद्दे पर चलने में मदद कर सकता है।

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