कैसे लाटेक्स समीकरणों में इन-लाइन गणित को उजागर करने के लिए इंद्रधनुष-सीमांकक / इंद्रधनुष-ब्लॉक प्राप्त करें


12

मैं LaTeX संपादन के लिए AUCTeX के साथ स्पेसमैक्स का उपयोग कर रहा हूं और इंद्रधनुष-सीमांकक और / या इंद्रधनुष-ब्लॉकों को बनाने के लिए LaTeX गणित समीकरणों को उजागर करना चाहूंगा । दुर्भाग्य से यह केवल आंशिक रूप से काम करता है, अर्थात, कुछ समीकरण हाइलाइट किए जाते हैं और कुछ नहीं:

उदाहरण: इंद्रधनुष-सीमांकक

उदाहरण के स्क्रीनशॉट में, इन-लाइन गणित $को उजागर नहीं किया जाता है, जबकि बाकी - इन-लाइन गणित में शामिल है \(...\)- में करता है।

साथ rainbow-blocksयह खराब हो जाता है, यह कभी कभी दस्तावेज़ के एक ही स्थान पर काम करते हैं और कभी कभी के रूप में गुंजाइश की परवाह किए बिना काम नहीं करेगा।

उदाहरण: इंद्रधनुष-खंड

प्रश्न: क्या किसी को पता है कि ऐसा क्यों होता है या rainbow-blocksलाटेक्स में इन-लाइन गणित के लिए कैसे काम करना है? क्या कोई काम करने के विकल्प हैं?


लेटेक्स-मोड इनटेक्स में वाक्य-तालिका में विशेष वाक्यविन्यास करने के लिए "$" को परिभाषित करने के लिए लगता है, इसलिए शायद फ़ॉन्ट-लॉक के वाक्य-विन्यास फ़ॉन्टकरण किसी भी कीवर्ड-आधारित फ़ॉन्टकरण से आगे निकल रहा है।
किरिल

highlight-parenthesesफ़ॉन्ट लॉक के बजाय ओवरले का उपयोग करता है, और ओवरले फ़ंक्शन की अवधि के लिए एक अस्थायी सिंटैक्स-टेबल का उपयोग करना बहुत सरल बात होगी। github.com/nschum/highlight-parentheses.el उस लाइब्रेरी में जिस फ़ंक्शन को बदलना होगा hl-paren-highlight: (let ((my-syntax-table (make-syntax-table))) (with-syntax-table my-syntax-table . . . दुर्भाग्य से, यह आपके द्वारा निर्दिष्ट एक से अधिक लाइब्रेरी है - मुझे नहीं पता कि कैसे ठीक करना है rainbow-delimiters- शायद आप कर सकते थे रखवाले के साथ गितुब पर एक मुद्दा खोलें।
कानून सूची

(with-silent-modifications (remove-text-properties (region-beginning) (region-end) '(face nil font-lock-face nil)) (add-text-properties (region-beginning) (region-end) '(face rainbow-delimiters-depth-1-face)))इसका उपयोग एक एम्बेडेड सूत्र के भीतर फ़ॉन्टकरण को बदलना संभव है। लेकिन यह एक सलाह के आसपास काम नहीं करता है rainbow-delimiters-propertize-delimiter। यह इंगित करता है कि latex-modeफॉन्टिफिकेशन के माध्यम से जगह का निर्धारण होता है rainbow-delimiters-mode
तोबियास

इंद्रधनुष-सीमांकक सीधे जीट-लॉक का उपयोग करता है। हो सकता है, सिंटैक्टिक फॉन्टिफिकेशन में जीट-लॉक का इस्तेमाल न किया गया हो और उसकी वजह से हमें टाइमिंग की समस्या हो?
टोबियास

जवाबों:


2

निम्नलिखित एक टिप्पणी की तरह अधिक है

  1. यह समस्या के एक छोटे से हिस्से को हल करता है ( rainbow-delimiters-mode)
  2. यह पूरी तरह से परीक्षण नहीं किया गया है (सिर्फ एक लेटेक्स-फ़ाइल के साथ)
  3. मुझे पूरी तरह से समझ में नहीं आता है कि यह क्यों काम करता है ( font-lock-modeवास्तव में काफी जटिल मशीनरी है)

पहले समाधान के लिए rainbow-delimiters-mode:

हम पाठ संपत्ति की जगह font-lock-faceद्वारा faceमें rainbow-delimiters-propertize-delimiterऔर rainbow-delimiters-unpropertize-delimiter। चूँकि हम उपयोग नहीं कर सकते, defsubstबल्कि पैकेज में प्रयोग किया जाता है, लेकिन कार्यों को स्वयं संशोधित करना चाहिए (जहाँ तक मैं इसे समझता हूँ - कृपया टिप्पणी करें कि क्या मैं इस संबंध में गलत हूँ)।defundefalias

संशोधित कार्य हैं:

(defsubst rainbow-delimiters-propertize-delimiter (loc depth)
  "Highlight a single delimiter at LOC according to DEPTH.

LOC is the location of the character to add text properties to.
DEPTH is the nested depth at LOC, which determines the face to use.

Sets text properties:
`font-lock-face' to the appropriate delimiter face.
`rear-nonsticky' to prevent color from bleeding into subsequent characters typed by the user."
  (with-silent-modifications
    (let ((delim-face (if (<= depth 0)
                          'rainbow-delimiters-unmatched-face
                        (rainbow-delimiters-depth-face depth))))
      ;; (when (eq depth -1) (message "Unmatched delimiter at char %s." loc))
      (add-text-properties loc (1+ loc)
               ;; 2015-05-24: Changed font-lock-face to face to enable rainbow after syntax fontification in latex-mode
               ;; (see http://emacs.stackexchange.com/questions/4260/how-to-get-rainbow-delimiters-rainbow-blocks-to-highlight-in-line-math-in-latex)
                           `(face ,delim-face
                             rear-nonsticky t)))))


(defsubst rainbow-delimiters-unpropertize-delimiter (loc)
  "Remove text properties set by rainbow-delimiters mode from char at LOC."
  (with-silent-modifications
    (remove-text-properties loc (1+ loc)
                ;; 2015-05-24: See corresponding line in `rainbow-delimiters-propertize-delimiter'.
                            '(face nil
                              rear-nonsticky nil))))

अब तर्क:

$ -Delimiters के बीच एम्बेडेड फ़ार्मुलों को फ़ॉन्ट-लॉक-मोड द्वारा परिभाषित सिंटैक्स किया जाता है (जैसा कि पहले ही किरिल ने बताया था)। इस फॉन्टिफिकेशन का पंजीकरण सामान्य दिखता है (चर font-lock-syntactic-face-functionऔर फ़ंक्शन देखें font-latex-syntactic-face-function)। लेकिन describe-charएक अंतर्निहित सूत्र के वर्णों से पता चलता है कि वाक्य-रचना फ़ॉन्टकरण face-प्रोक्सी के बजाय -प्रोटीटी का उपयोग करता है font-lock-face

निम्नलिखित काल्पनिक है क्योंकि मैं फॉन्ट-लॉक मशीनरी को पूरी तरह से नहीं समझता हूं जो काफी जटिल है।

ऐसा लगता है कि इससे faceज्यादा मजबूत है font-lock-face। इंद्रधनुष-सीमांकक का उपयोग करता है font-lock-faceजो faceसिंटैक्टिक फॉन्टिफिकेशन द्वारा हावी है । फिर भी, हमारे पास यह फायदा है कि खोज (कीवर्ड) आधारित फॉन्टिफिकेशन से पहले सिंटैक्टिक फॉन्टिफिकेशन पहले आता है, जो बदले में जीट-लॉक (सूचना-पृष्ठ देखें font-lock-mode) का उपयोग करता है ।

निष्कर्ष यह है कि समस्या अगर हम का उपयोग करने के लिए हल किया जाता है यही कारण है कि सुराग मुझे faceमें rainbow-delimitersके बजाय font-lock-face। और यहाँ मैं पूर्ण परिणाम नहीं जानता। लेकिन, के बाद से rainbow-delimitersभी उपयोग करता है jit-lock(के माध्यम से और नहीं सीधे font-lock-mode) हम वैसे भी एक अस्थिर मंजिल पर खड़े हैं।

ध्यान दें, मेरे पास पहले से ही कुछ संपर्क था rainbow-delimiters(देखें /programming/19800243/highlight-first-mismatching-paren/20022030#20022030 ) लेकिन उसके साथ नहीं rainbow-blocks। क्योंकि मेरे पास केवल समय का एक सीमित ढांचा है जिसे मैंने ध्यान केंद्रित करने के लिए चुना है rainbow-delimiters। हो सकता है, आप rainbow-blocksएक समान तरीके से -problem को हल कर सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.