2011-09-28 5 views
16

हैं तो मैं त्रुटियों को दिखाता हूं, मैं AUCTEX का उपयोग कर रहा हूं और मैं एक कुंजी बांधना चाहता हूं, उदा। C-0, जो निम्न करता है:मैं एमेक्स में एक कुंजी के लिए लेटेक्सएमके कैसे बांधूं और अगर

  1. मुझे सक्रिय किए बिना सक्रिय फ़ाइल सहेजता है।
  2. मुझे बिना संकेत दिए सक्रिय फ़ाइल पर latexmk चलाता है।
  3. latexmk किसी के मुठभेड़ों से मुझे त्रुटियों को दिखाता है।

मेरे समस्या नहीं एक प्रमुख (जिसके लिए टायलर नीचे एक टिप्पणी में एक लिंक पोस्ट) लेकिन कैसे एक समारोह है कि आइटम 1-3 सिद्ध साथ आने के लिए बाध्य करने के लिए कैसे है।


मैं द्वारा

(add-hook 'LaTeX-mode-hook (lambda() 
    (push 
    '("Latexmk" "latexmk %s" TeX-run-TeX nil t 
     :help "Run Latexmk on file") 
    TeX-command-list))) 

Latexmk फोन यह मेरा .latexmkrc

$pdf_mode = 1; 
$recorder = 1; 
$latex = 'latex -recorder -halt-on-error -interaction=nonstopmode -shell-escape'; 
$pdflatex = 'pdflatex -recorder -halt-on-error -interaction=nonstopmode -shell-escape'; 

मैं Emacs 23.3 और AUCTeX 11.86 का उपयोग कर रहा है।

+0

जो आप पूछ रहे हैं वह उन कार्यों के बहुत करीब है जो डिफ़ॉल्ट AucTex पैकेज में पहले से उपलब्ध हैं। आप इस प्रश्न से शुरू कर सकते हैं: http://stackoverflow.com/questions/2199678/how-to-call-latexmk-in-emacs-and-jump-to-next-error जो आपके लिए सॉर्टेड लेटेक्सएमके प्राप्त करेगा, फिर काम करें उस विशेष व्यवहार को प्राप्त करने के लिए, यदि आवश्यक हो, तो tweaking पर। – Tyler

+0

@ टायलर धन्यवाद। मैं इस तरह के कमांड को कुंजी पर कैसे बांध सकता हूं? –

+0

यदि आप पहले जवाब का पालन करते हैं, तो 'सी-सी सी-सी' को आपकी टेक्सास फ़ाइल को लेटेक्सएमके के साथ संकलित करना चाहिए (आपको अपने डिफ़ॉल्ट के रूप में पॉपअप के लिए लेटेक्सएमके प्राप्त करने के लिए कॉन्फ़िगरेशन फ़ाइलों को बदलना पड़ सकता है, लेकिन ऑक्टेक्स आमतौर पर जानता है कि क्या करना है)। चलने वाला वास्तविक आदेश 'टीएक्स-कमांड-मास्टर' है, जिसे आप सामान्य दृष्टिकोण का उपयोग करके बाध्य कर सकते हैं: http://www.masteringemacs.org/articles/2011/02/08/mastering-key-bindings-emacs/ – Tyler

उत्तर

13

कुछ ऐसा करने के लिए प्रतीक्षा कर सकता है?

(require 'tex-buf) 

(defun run-latexmk() 
    (interactive) 
    (let ((TeX-save-query nil) 
     (TeX-process-asynchronous nil) 
     (master-file (TeX-master-file))) 
    (TeX-save-document "") 
    (TeX-run-TeX "latexmk" "latexmk" master-file) 
    (if (plist-get TeX-error-report-switches (intern master-file)) 
     (TeX-next-error t) 
     (minibuffer-message "latexmk done")))) 

(add-hook 'LaTeX-mode-hook 
      (lambda() (local-set-key (kbd "C-0") #'run-latexmk))) 

संपादित: TeX-save-document अपने मास्टर फ़ाइल और उप फ़ाइलों की बचत होती है (यदि आप सिर्फ एक फ़ाइल है, यह अपने गुरु फ़ाइल है), और जब TeX-save-query नहीं के बराबर है, यह पुष्टि करने के लिए आप से पूछना नहीं है । फिर TeX-run-TeX आमतौर पर TeX चलाने के लिए उपयोग की जाने वाली तंत्र का उपयोग करते हुए लेटेक्सएमके चलाता है, जिसमें त्रुटि संदेश पार्सिंग शामिल है, लेकिन क्योंकि यह आमतौर पर एसिंक्रोनस प्रक्रिया शुरू करता है, इसलिए हम TeX-process-asynchronous को शून्य तक समाप्त करने के लिए प्रतीक्षा करते हैं।अजीब दिखने वाले plist-get फॉर्म TeX-run-TeX से त्रुटियों की जांच करने के लिए प्रलेखित तरीका है (tex-buf.el में टिप्पणियां देखें), और यदि त्रुटियां हैं, तो हम पहले पर कूदते हैं; अगर कोई त्रुटि नहीं है, तो हम बस मस्ती के लिए मिनीबफर में एक संदेश दिखाते हैं।

अंत में, local-set-key फ़ंक्शन के लिए कुंजी को बांधने का एक तरीका है।

+0

क्या आप कोड को समझाते हैं? –

+0

यह बहुत करीब है मैं किसके साथ tweaking गया है। लेकिन कम से कम (एक विंडोज़ बॉक्स) पर, मेरे सिस्टम पर, LaTeX असीमित रूप से चलाया जाता है, और इसलिए '(plist-get ...)' विश्वसनीय रूप से सही नहीं लौटाता है। मैं चारों ओर काम करने में कामयाब रहा यह 'टीएक्स-टीएक्स-सेंटीनेल-चेक' की सलाह देकर, लेकिन यह अविश्वसनीय रूप से हैकिश लगता है ... –

+0

ओह, मैं देखता हूं, आपने TeX-process-asynch सेट किया है शून्य से घबराहट, ताकि बस ऐसा न हो ... अच्छा, यह काम करना चाहिए :-) –

3

क्या यह वही है जो आप चाहते हैं?

(defun my-tex() 
"Saves the current buffer and runs LaTeX, all with no prompts or further interaction." 
    (interactive) 
    (save-buffer) 
    (TeX-command "LaTeX" 'TeX-master-file -1)) 

मैं latexmk का उपयोग नहीं करते हैं, लेकिन जो शायद है कि काम तुम सब करने की जरूरत है नाम स्ट्रिंग आप TeX-command-list में latexmk के लिए उपयोग (के लिए स्विच स्ट्रिंग "LaTeX" है बनाने के लिए सिर्फ "latexmk" या "Latexmk")।

मुझे खुशी है कि आपने पूछा, क्योंकि यह अब मेरे लिए उपयोगी होगा!

+1

I पर इस प्रश्न का पालन करें। मेरी सूची के आइटम 1 और 2 को संतुष्ट करता है। अगर कोई है तो मैं एक खिड़की को त्रुटियों को दिखाऊंगा। मैं pdflatex के साथ '-इंटरक्शन = nonstopmode' का उपयोग कर रहा हूं, इसलिए मैं केवल उस त्रुटि को देखना चाहूंगा जो यह बंद हो जाता है। –

+0

क्षमा करें, मुझे नहीं पता कि कैसे लेटेक्सएमके काम करता है, इसलिए मुझे यकीन नहीं है कि कहां जाना है। आपने मुझे लेटेक्सएमके के लिए भरने के लिए एक्टेक्स प्राप्त करने की जांच करने के लिए प्रेरित किया है - हालांकि सी-सी सी-सी को मारने के बिना पीडीएफएलएक्सएक्स और बिबटेक्स को कितनी बार चलाने के लिए एक्टेक्स प्राप्त करना संभव होना चाहिए। हालांकि यह चारों ओर थोड़ा और अधिक पोकिंग करने जा रहा है। – Tyler

2

मान लिया जाये कि आप पहले से ही AUCTeX के लिए आदेश सूची में latexmk जोड़ने के लिए How to call latexmk in emacs, and jump to next-error में जवाब का उपयोग किया है, तो आपको निम्न फ़ंक्शन का उपयोग कर सकते हैं:

(defun run-latexmk() 
    (interactive) 
    (save-buffer) 
    (TeX-command "Latexmk" 'TeX-master-file 0) 
    (if (plist-get TeX-error-report-switches (intern (TeX-master-file))) 
     (next-error))) ;; 0 -> suppress confirmation 

और यह बाध्य करने के लिए कुंजी-बाइंडिंग तकनीकों में से किसी का उपयोग C-0 पर; यहाँ एक है कि टेक्स मोड के लिए स्थानीय है:

(define-key TeX-mode-map (kbd "C-0") 'run-latexmk) 

run-latexmk समारोह TeX-command-master के माध्यम से खुदाई, और अपनी आवश्यकताओं के यह सरल बनाने पर आधारित है। ध्यान दें कि (next-error) पर कॉल हमेशा नहीं हो सकता है, क्योंकि LaTeX आपकी त्रुटि से भ्रमित हो सकता है और इनपुट

+0

मुझे "वैल्यू के रूप में प्रतीक का मान शून्य है: टीएक्स-मोड-मैप" जब मैं कीबाइंडिंग का प्रयास करता हूं, भले ही मैं इसे 'eval-after-load' tex' में लपेटूं। –

+0

मुझे "TeX-command-expand भी मिलता है: गलत प्रकार तर्क: स्ट्रिंग, शून्य" जब मैं रन-लेटेक्सएमके चलाने की कोशिश करता हूं। –

+0

@ एनएन। मैं मानता हूं कि मैंने इसे मुख्य बाध्यकारी से नहीं चलाया, लेकिन सिर्फ 'एम-एक्स रन-लेटेक्सएमके', और यह मेरे लिए काम किया ... अब इसे आजमा रहा है, हालांकि, मुझे आपके द्वारा की जाने वाली त्रुटियां नहीं दिखाई देती हैं। आप 'डिफिन-की'' को '(एड-हुक' लाटेक्स-मोड-हुक (लैम्ब्डा() (परिभाषित-कुंजी ...)) के साथ लपेटकर "प्रतीक का मान ..." त्रुटि को ठीक कर सकते हैं, जो आपको सुनिश्चित करता है 'लाटेक्स मोड में फिर से। मैं TeX-command-expand त्रुटि को पुन: उत्पन्न कर सकता हूं, लेकिन केवल अगर मैं इसे सीधे कॉल करता हूं, जो उपर्युक्त कोड नहीं करता है ... क्या मोड हुक का उपयोग दोनों समस्याओं को ठीक करता है, या आपके लिए केवल एक समस्या है? –

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