LaTeX denklemlerinde satır içi matematiği vurgulamak için gökkuşağı sınırlayıcıları / gökkuşağı blokları nasıl elde edilir


12

LaTeX düzenleme için AUCTeX ile spacemacs kullanıyorum ve gökkuşağı sınırlayıcıları ve / veya gökkuşağı blokları LaTeX matematik denklemlerini vurgulamak istiyorum. Ne yazık ki bu sadece kısmen çalışıyor, yani bazı denklemler vurgulanıyor ve bazıları çalışmıyor:

Örnek: gökkuşağı ayırıcılar

Örnek ekran görüntüsünde, içine alınan satır içi matematik $vurgulanırken geri kalan - satır içi matematik dahil - vurgulanır \(...\).

Daha rainbow-blocksda kötüleşir, çünkü bazen belgenin tek bir yerinde çalışacak ve bazen kapsamdan bağımsız olarak çalışmayacaktır.

Örnek: gökkuşağı blokları

S: Bunun neden olduğunu veya rainbow-blocksLaTeX'te satır içi matematik için nasıl çalışılacağını bilen var mı ? Çalışan alternatifler var mı?


auctex'teki lateks modu, sözdizimi tablosunda özel bir sözdizimine sahip olmak için "$" tanımlıyor gibi görünüyor, bu nedenle belki de font-lock'un sözdizimsel fontlaması, anahtar kelime tabanlı herhangi bir fontlaştırmayı geçersiz kılıyor.
Kirill

highlight-parenthesesfont kilidi yerine yer paylaşımları kullanır ve yer paylaşımı işlevi süresince geçici bir sözdizimi tablosu kullanmak çok basit bir şey olacaktır. github.com/nschum/highlight-parentheses.el Bu kütüphanede değiştirilmesi gereken işlev hl-paren-highlight: (let ((my-syntax-table (make-syntax-table))) (with-syntax-table my-syntax-table . . . Maalesef, belirttiğiniz kütüphaneden başka bir kütüphane - nasıl düzeltileceğini bilmiyorum rainbow-delimiters- belki de bakıcıyla Github'da bir sorun açın.
hukukçu

Kullanarak (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)))gömülü formül içindeki yazı tipini değiştirmek mümkündür. Ancak bu bir tavsiye etrafında işe yaramaz rainbow-delimiters-propertize-delimiter. Bu, yazı tipinin, yazı tipinden latex-modesonra gerçekleştiğini gösterir rainbow-delimiters-mode.
Tobias

rainbow-delimiters doğrudan jit-lock kullanır. Belki, sözdizimsel fontlaştırma jit-lock kullanmaz ve bu nedenle bir zamanlama problemi alırız?
Tobias

Yanıtlar:


2

Aşağıdaki daha çok bir yorum gibidir

  1. sorunun sadece küçük bir kısmına çözülür ( rainbow-delimiters-mode)
  2. ayrıntılı olarak test edilmemiştir (sadece bir lateks dosyasıyla)
  3. Neden çalıştığını tam olarak anlamıyorum ( font-lock-modegerçekten oldukça karmaşık bir makinedir)

İlk başta aşağıdakiler için çözüm rainbow-delimiters-mode:

Biz metin özelliğini değiştirmek font-lock-faceyoluyla faceiçinde rainbow-delimiters-propertize-delimiterve rainbow-delimiters-unpropertize-delimiter. Yana defsubstyerine paketinde kullanılan defunbiz istihdam edemez defalias(- lütfen yorumunu ben bu konuda yanıldığımı eğer anladığım kadarıyla) ama işlevleri kendileri değiştirmeniz gerekir.

Değiştirilen işlevler şunlardır:

(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))))

Şimdi akıl yürütme:

$ -Delimiters arasındaki gömülü formüller, font-lock-mode (zaten Kirill'in işaret ettiği gibi) tarafından yazılan sözdizimidir. Bu yazı tipinin kaydı normal görünüyor (bkz. Değişken font-lock-syntactic-face-functionve işlev font-latex-syntactic-face-function). Ancak describe-chargömülü formülün karakterlerinde sözdizimsel fontlaştırmanın face-property yerine -property kullandığını gösterir font-lock-face.

Aşağıdakiler varsayımsaldır, çünkü oldukça karmaşık olan yazı tipi kilit makinelerini tamamen anlamıyorum.

Görünüşe göre facedaha güçlü font-lock-face. Sözdizimsel fontların font-lock-facehakim olduğu gökkuşağı sınırlayıcıları kullanır face. Bununla birlikte, sözdizimsel fontlaştırmanın arama (anahtar kelime) tabanlı fontlaştırmadan önce önce gelmesi avantajına sahibiz, bu da jit-lock kullanır (bilgi sayfalarına bakın font-lock-mode).

Bu beni face, rainbow-delimitersyerine kullanırsak sorunun çözüldüğü sonucuna götürür font-lock-face. Ve burada tam sonuçlarını bilmiyorum. Ancak, doğrudan rainbow-delimitersda kullandığı jit-lock(ve üzerinden değil font-lock-mode) olduğu için, yine de titrek bir yerde duruyoruz.

Zaten ile temas kurduğumu unutmayın rainbow-delimiters(bkz. Https://stackoverflow.com/questions/19800243/highlight-first-mismatching-paren/20022030#20022030 ) ama ile değil rainbow-blocks. Çünkü konsantre olmayı seçtiğim sınırlı bir zaman dilimim var rainbow-delimiters. Belki, rainbow-blocks-problemi benzer şekilde çözebilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.