Ao escrever o LaTeX usando latex-mode
, geralmente quero escrever "intervalos semiabertos" no meu texto. Por exemplo [0,1)
,, que se refere ao conjunto de todos os números x
com 0 <= x < 1
.
Infelizmente, esses "delimitadores desequilibrados" parecem confundir o analisador de indentação, fazendo com que o texto a seguir seja indentado de maneira inadequada, geralmente à direita.
Aqui está um exemplo de documento. O texto abaixo é o resultado depois de fazer C-x h M-x indent-region
. O comportamento correto seria ter todos os parágrafos recuados por 0 espaços.
\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}
Atualmente, estou trabalhando nisso com um truque feio: defino uma macro LaTeX que não se expande e escrevo os delimitadores "correspondentes" dentro de uma invocação dessa macro. Isso faz o indentador voltar a sincronizar.
\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}
Mas isso é realmente desagradável. Existe uma solução melhor?
Estou usando o GNU Emacs 24.4.1.
fonte
Respostas:
Não é uma solução Emacs, mas meu código LaTeX grava intervalos como
\halfopen{0}{1}
, ondeEsta convenção leva o problema de balanceamento para um local onde é improvável que cause problemas. E é pesquisável :-)
fonte
(0,1]
?\openhalf
hehehe\halfclosed
A função
latex-indent
de indentação delatex-mode
define a tabela de sintaxe paratex-latex-indent-syntax-table
e chama,latex-find-indent
que por sua vez chamalatex-backward-sexp-1
.A sintaxe de
?\(
e?\)
é configurada para o"."
que significa "pontuação". Portanto, não é mais um delimitador.Portanto, expressões como
[0,1)
resultado em umscan-error
emlatex-backward-sexp-1
que leva ao comportamento inesperado.Você pode evitar isso adicionando o seguinte ao seu arquivo init:
Mas não conheço as consequências negativas dessa configuração desde que uso
auctex
. Então, espere o pior ;-).fonte