2010-05-05 20 views
8

मैं किसी दस्तावेज़ के अंदर कुछ सी ++ कोड (सिंटैक्स हाइलाइटिंग के साथ) प्रदर्शित करने के लिए लेटेक्स और listings पैकेज का उपयोग कर रहा हूं।लेटेक्स और लिस्टिंग: कोड के कुछ हिस्सों को हाइलाइट करना

मुझे कोड के कुछ हिस्सों को हाइलाइट करने की आवश्यकता है। इस विशिष्ट हाइलाइट में सिंटैक्स हाइलाइटिंग के साथ कुछ लेना देना नहीं है, यह कोड के कुछ हिस्सों है जो मैं हाइलाइट करना चाहता हूं ताकि पाठक इस पर ध्यान केंद्रित कर सके।

मेरी इच्छा है कि मैं कुछ परिवर्तनीय नाम बना सकता हूं, उदाहरण के लिए, बोल्ड में और पीले रंग की पृष्ठभूमि पर प्रदर्शित करना। एमएसवार्ड के साथ मैंने कुछ किया है, मैं लेटेक्स (निश्चित रूप से, लाल और हरे रंग की रेखांकन नहीं) के साथ पुन: पेश करना चाहता हूं:

http://img210.imageshack.us/img210/5302/coden.png

मुझे listings पैकेज के साथ ऐसा करने का कोई तरीका नहीं मिला है। क्या यह संभव है?

उत्तर

6

आप अपने listings क्षेत्र के अंदर मनमाना LaTeX आदेशों को सक्षम कर सकते हैं:

\begin{listings}[escapeinside=\{\}] 
{\highlight{Colonnes[3] = 9}} 
\end{listings} 

\highlight अपने पर प्रकाश डाला मैक्रो (आप इसे खुद लिखने की ज़रूरत है)। अधिक जानकारी के लिए लिस्टिंग प्रलेखन, खंड 4.14 ("लाटेक्स से बचने") देखें। ध्यान दें कि अब आपको अपने कोड के विशेष पात्रों की हर दूसरी घटना से बचने की आवश्यकता है - इसलिए सी ++ कोड के लिए, {} शायद एक खराब विकल्प है।

+1

संकेत के लिए धन्यवाद! मैं इसे 'एस्केपिनसाइड' का उपयोग करके काम नहीं कर सका (पता नहीं क्यों, मुझे समझ में नहीं आया त्रुटि मिली), लेकिन इसे 'escapechar = \% 'के साथ काम किया। रिकॉर्ड के लिए, मैं '\ highlight' मैक्रो इस तरह से परिभाषित: \ newcommand \ उजागर [1] {\ colorbox {पीला} {# 1}} पैकेज का उपयोग' xcolor'। –

10

दुर्भाग्यवश @Konrad's approach वास्तव में listings से पूरी तरह से स्वरूपण से बच निकलता है। यदि हाइलाइट किए गए टेक्स्ट में कोई प्रोग्राम कीवर्ड होता है, तो उन कीवर्ड को listings पैकेज द्वारा हाइलाइट नहीं किया जाएगा क्योंकि वे गैर-हाइलाइट किए गए लाइनों पर होंगे। आदर्श \highlight{\lstinline{...}} का उपयोग करना हो सकता है, लेकिन ऐसा लगता है कि आप \lstinline मैक्रो को listings वातावरण के अंदर घोंसला नहीं दे सकते।

टीएक्स स्टैक एक्सचेंज साइट essentially the same question है, nice answer based on the tikz package और further refinement thereof के साथ। listings स्वचालित रूप से हाइलाइट किए गए टेक्स्ट को प्रारूपित करते समय यह हाइलाइटिंग ओवरले करता है।

यह संपूर्ण tikz-आधारित दृष्टिकोण took on a life of its own, अंत में good, robust solution तक पहुंच गया। यह स्वचालित वाक्यविन्यास हाइलाइटिंग रखते हुए चयनित listings लाइनों को हाइलाइट करने के लिए वर्तमान में सबसे अच्छा ज्ञात (मेरे लिए) दृष्टिकोण है। यह वास्तव में किसी भी किसी दिए गए पृष्ठ पर स्थानों की जोड़ी के बीच हाइलाइट्स को स्ट्रोक करने के लिए भी काम करेगा।

3

सी या सी ++ कोड में, मुझे लगता है कि चरित्र ` बचने वाला चरित्र होने के लिए स्वतंत्र है।

lstset { 
... 
escapeinside=\`\`, 
... 
} 

तो, आप इसे की तरह

\begin{lstlisting} 
const_cast<T>(`\it{exception}`) 
\end{lstlisting} 

शब्द exception का उपयोग तो अपवाद बन सकता है। बीटीडब्ल्यू, चरित्र ` मार्कडाउन प्रारूप कोड के लिए वर्ण है, इसलिए कोड सूची जैसे सी या सी ++ में इसका उपयोग करना बहुत आसान है।

+0

यह अधिक अपवित्र होना चाहिए। अच्छा काम करता है। – meijuh

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