Pisząc LaTeX za pomocą latex-mode
, często chcę pisać w tekście „półotwarte interwały”. Na przykład, [0,1)
który odnosi się do zestawu wszystkich liczb x
z 0 <= x < 1
.
Niestety, te „niezrównoważone separatory” zdają się mylić parser wcięć, powodując niewłaściwe wcięcie następującego tekstu, zwykle przesuwając się w prawo.
Oto przykładowy dokument. Poniższy tekst to wynik po wykonaniu C-x h M-x indent-region
. Prawidłowe zachowanie polega na tym, że wszystkie oba akapity są wcięte 0 spacjami.
\documentclass{article}
\begin{document}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam volutpat
at dui et mattis. Here is a half open interval $[0,1)$. Proin
fringilla lectus nec mi tincidunt aliquet. Vestibulum fermentum eu
neque id egestas. Here is another $[1,2)$. Nullam et lectus
convallis, placerat neque non, vehicula nisi. Fusce imperdiet
dignissim ante, eget fringilla nisi.
Integer fermentum nunc eget purus molestie commodo. Integer
tristique tincidunt odio, vel rutrum diam commodo quis. Fusce a
aliquet quam. Cras suscipit est et nisl sollicitudin
iaculis. Aliquam erat volutpat. Phasellus sapien arcu, aliquet ut
hendrerit in, lobortis nec ante.
\end{document}
Obecnie pracuję nad tym z brzydkim włamaniem: definiuję makro LaTeX, które rozwija się do zera, i piszę „pasujące” ograniczniki wewnątrz wywołania tego makra. Spowoduje to powrót synchronizacji wgłębnika.
\documentclass{article}
\newcommand{\ugh}[1]{}
\begin{document}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam volutpat
at dui et mattis. Here is a half open interval $[0,1)$. Proin
fringilla lectus nec mi tincidunt aliquet. Vestibulum fermentum eu
neque id egestas. \ugh{(]} Now on the next line we are back in sync.
Nullam et lectus convallis, placerat neque non, vehicula nisi. Fusce
imperdiet dignissim ante, eget fringilla nisi.
\end{document}
Ale to naprawdę nieprzyjemne. Czy jest lepsze rozwiązanie?
Używam GNU Emacs 24.4.1.
źródło
Odpowiedzi:
Nie jest to rozwiązanie Emacsa, ale mój kod LaTeX zapisuje takie przedziały jak
\halfopen{0}{1}
, gdzieTa konwencja przesuwa kwestię równoważenia do miejsca, w którym jest mało prawdopodobne, aby powodowała problemy. I można to przeszukiwać :-)
źródło
(0,1]
?\openhalf
hehehe\halfclosed
Funkcja wcięcie
latex-indent
zlatex-mode
zestawów składnia do stołutex-latex-indent-syntax-table
i wzywalatex-find-indent
co z kolei połączeńlatex-backward-sexp-1
.Składnia
?\(
i?\)
jest ustawiona"."
na „interpunkcja”. Więc nie jest już ogranicznikiem.W związku z tym wyrażenia podobne
[0,1)
do wyników w,scan-error
wlatex-backward-sexp-1
których prowadzi do nieoczekiwanego zachowania.Można tego uniknąć, dodając następujące elementy do pliku init:
Ale nie znam negatywnych konsekwencji tego ustawienia, ponieważ używam
auctex
. Spodziewaj się więc najgorszego ;-).źródło