Używam znaków przestrzennych z AUCTeX do edycji LaTeX i chciałbym, aby ograniczniki tęczy i / lub bloki tęczy podkreślały równania matematyczne LaTeX. Niestety działa to tylko częściowo, tzn. Niektóre równania są podświetlone, a niektóre nie:
W przykładowym zrzucie ekranu wbudowana matematyka $
nie jest podświetlana, podczas gdy reszta - w tym matematyka dołączona \(...\)
- jest zaznaczona .
Z rainbow-blocks
czasem jest gorzej, ponieważ czasami będzie działać w jednym miejscu dokumentu, a czasem nie będzie działać, niezależnie od zakresu.
P: Czy ktoś wie, dlaczego tak się dzieje lub jak rozpocząć rainbow-blocks
pracę w matematyce liniowej w LaTeX? Czy są jakieś działające alternatywy?
latex
syntax-highlighting
nemesit
źródło
źródło
highlight-parentheses
używa nakładek zamiast blokowania czcionek, i bardzo łatwo byłoby użyć tymczasowej tabeli składni na czas trwania funkcji nakładki. github.com/nschum/highlight-parentheses.el Funkcja, którą należałoby zmienić w tej bibliotece tohl-paren-highlight
:(let ((my-syntax-table (make-syntax-table))) (with-syntax-table my-syntax-table . . .
Niestety, jest to inna biblioteka niż ta, którą określiłeś - nie wiem jak to naprawićrainbow-delimiters
- być może mógłbyś otwórz problem na Githubie z opiekunem.(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)))
niej umożliwia zastąpienie czcionki w osadzonej formule. Ale to nie działa w przypadku poradyrainbow-delimiters-propertize-delimiter
. Wskazuje to, że fontifikacjalatex-mode
ma miejsce po jej zakończeniurainbow-delimiters-mode
.Odpowiedzi:
Od tego czasu bardziej przypomina komentarz
rainbow-delimiters-mode
)font-lock-mode
to naprawdę dość skomplikowana maszyneria)Na początku rozwiązanie dla
rainbow-delimiters-mode
:Zastępujemy właściwość text
font-lock-face
przezface
inrainbow-delimiters-propertize-delimiter
irainbow-delimiters-unpropertize-delimiter
. Ponieważdefsubst
jest używany w pakiecie, zamiast tegodefun
nie możemy zastosować,defalias
ale musimy zmodyfikować same funkcje (o ile rozumiem - proszę o komentarz, jeśli się mylę pod tym względem).Zmodyfikowane funkcje to:
Teraz rozumowanie:
Wbudowane formuły między $ -delimiterami są składniane czcionką według trybu blokowania czcionek (jak już wskazał Kirill). Rejestracja tej czcionki wygląda normalnie (patrz zmienna
font-lock-syntactic-face-function
i funkcjafont-latex-syntactic-face-function
). Aledescribe-char
na znakach osadzonej formuły pokazuje, że czcionka składniowa używaface
-property zamiastfont-lock-face
-property.Poniższe jest hipotetyczne, ponieważ nie do końca rozumiem maszynę do blokowania czcionek, która jest dość złożona.
Wydaje się, że
face
jest silniejszy niżfont-lock-face
. Zastosowania ograniczników tęczy, wfont-lock-face
których dominujeface
składniowa czcionka. Niemniej jednak mamy tę zaletę, że czcionkowanie składniowe jest na pierwszym miejscu przed czcionkami opartymi na wyszukiwaniu (słowach kluczowych), które z kolei używają blokady jit (patrz strony informacyjnefont-lock-mode
).Która prowadzi mnie do wniosku, że problem jest rozwiązany, jeśli używamy
face
wrainbow-delimiters
zamiastfont-lock-face
. I tutaj nie znam pełnych konsekwencji. Ponieważrainbow-delimiters
jednak używa sięjit-lock
bezpośrednio (a nie przezfont-lock-mode
), i tak stoimy na chwiejnej podłodze.Zauważ, że miałem już jakiś kontakt
rainbow-delimiters
(patrz /programming/19800243/highlight-first-mismatching-paren/20022030#20022030 ), ale nie zrainbow-blocks
. Ponieważ mam ograniczony czas, na którym postanowiłem się skoncentrowaćrainbow-delimiters
. Być może możesz rozwiązaćrainbow-blocks
problem w podobny sposób.źródło