Saya menggunakan spacemac dengan AUCTeX untuk mengedit LaTeX dan ingin membuat pelangi-pembatas dan / atau pelangi-blok menyoroti persamaan matematika LaTeX. Sayangnya ini hanya berfungsi sebagian, yaitu, beberapa persamaan disorot dan beberapa tidak:
Dalam contoh tangkapan layar, matematika sebaris yang disertakan $
tidak disorot sementara sisanya - termasuk matematika sebaris yang terlampir \(...\)
- tidak.
Dengan rainbow-blocks
itu semakin buruk, karena kadang-kadang akan berfungsi di satu tempat dokumen dan kadang-kadang tidak akan berfungsi terlepas dari ruang lingkupnya.
T: Apakah ada yang tahu mengapa ini terjadi atau bagaimana cara rainbow-blocks
bekerja untuk in-line matematika di LaTeX? Apakah ada alternatif yang berfungsi?
latex
syntax-highlighting
nemesit
sumber
sumber
highlight-parentheses
menggunakan overlay daripada penguncian font, dan itu akan menjadi hal yang sangat sederhana untuk menggunakan sintaks-tabel sementara untuk durasi fungsi overlay. github.com/nschum/highlight-parentheses.el Fungsi yang perlu diubah di perpustakaan itu adalahhl-paren-highlight
:(let ((my-syntax-table (make-syntax-table))) (with-syntax-table my-syntax-table . . .
Sayangnya, itu adalah perpustakaan lain dari yang telah Anda tentukan - Saya tidak tahu cara memperbaikinyarainbow-delimiters
- mungkin Anda bisa buka masalah tentang Github dengan pengelola.(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)))
dimungkinkan untuk mengganti fontifikasi dalam formula yang disematkan. Tapi ini tidak berhasil dalam saran sekitarrainbow-delimiters-propertize-delimiter
. Ini menunjukkan bahwa fontifikasilatex-mode
dilakukan setelah fontifikasi selesairainbow-delimiters-mode
.Jawaban:
Berikut ini lebih seperti komentar sejak itu
rainbow-delimiters-mode
)font-lock-mode
benar-benar mesin yang cukup rumit)Awalnya solusi untuk
rainbow-delimiters-mode
:Kami mengganti properti teks
font-lock-face
denganface
dirainbow-delimiters-propertize-delimiter
danrainbow-delimiters-unpropertize-delimiter
. Karenadefsubst
digunakan dalam paket alih-alihdefun
kami tidak dapat menggunakandefalias
tetapi harus memodifikasi fungsinya sendiri (sejauh yang saya mengerti - tolong beri komentar jika saya salah dalam hal ini).Fungsi yang dimodifikasi adalah:
Sekarang alasannya:
Rumus yang disematkan di antara $ -delimiters adalah sintaks yang diklasifikasi oleh font-lock-mode (seperti yang sudah ditunjukkan Kirill). Pendaftaran fontifikasi ini terlihat normal (lihat variabel
font-lock-syntactic-face-function
dan fungsifont-latex-syntactic-face-function
). Tetapidescribe-char
pada karakter formula yang disematkan menunjukkan bahwa fonta sintaksis menggunakanface
-properti bukanfont-lock-face
-properti.Berikut ini adalah hipotesis karena saya tidak sepenuhnya mengerti mesin font-lock yang cukup kompleks.
Sepertinya itu
face
lebih kuat darifont-lock-face
. Penggunaan pelangi-pelangifont-lock-face
yang didominasi olehface
fontifikasi sintaksis. Namun demikian, kami memiliki keuntungan bahwa fonta sintaksis didahulukan sebelum pencarian (kata kunci) berbasis fonta yang pada gilirannya menggunakan kunci-jit (lihat info-halaman darifont-lock-mode
).Yang mengarah saya sampai pada kesimpulan bahwa masalah diselesaikan jika kita menggunakan
face
dirainbow-delimiters
bukannyafont-lock-face
. Dan di sini saya tidak tahu konsekuensinya sepenuhnya. Tapi, karenarainbow-delimiters
juga menggunakanjit-lock
langsung (dan tidak melaluifont-lock-mode
) kita berdiri di lantai yang rapuh pula.Perhatikan, bahwa saya sudah memiliki beberapa kontak dengan
rainbow-delimiters
(lihat /programming/19800243/highlight-first-mismatching-paren/20022030#20022030 ) tetapi tidak denganrainbow-blocks
. Karena saya hanya memiliki kerangka waktu terbatas, saya memilih untuk berkonsentrasirainbow-delimiters
. Mungkin, Anda bisa menyelesaikan masalah denganrainbow-blocks
cara yang sama.sumber