¿Cómo puedo escribir [0,1) en modo LaTeX sin romper la sangría?

9

Cuando escribo LaTeX usando latex-mode, a menudo quiero escribir "intervalos medio abiertos" en mi texto. Por ejemplo, [0,1)que se refiere al conjunto de todos los números xcon 0 <= x < 1.

Desafortunadamente, estos "delimitadores desequilibrados" parecen confundir el analizador de sangría, lo que hace que el siguiente texto se sangra de manera inapropiada, generalmente a la derecha.

Aquí hay un documento de ejemplo. El siguiente texto es el resultado después de hacer C-x h M-x indent-region. El comportamiento correcto sería tener todos los dos párrafos sangrados por 0 espacios.

\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}

Actualmente estoy trabajando en esto con un truco feo: defino una macro LaTeX que se expande a nada, y escribo los delimitadores "coincidentes" dentro de una invocación de esta macro. Esto vuelve a sincronizar el penetrador.

\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}

Pero esto es realmente desagradable. ¿Hay una mejor solución?

Estoy usando GNU Emacs 24.4.1.

Nate Eldredge
fuente
3
No responde a su pregunta, pero ¿ha considerado probar AUCTeX? No sufre de este pequeño error, por ejemplo.
giordano
@ giordano: lo he mirado. Su comportamiento predeterminado es mucho más pesado de lo que quiero. Prefiero editar el código similar a LaTeX, y realmente no quiero la representación en el editor de estilo WYSIWYG. Tal vez sea posible desactivar todo eso y tener una experiencia de editor de texto, pero aún así hace que AUCTeX parezca excesivo.
Nate Eldredge
66
¿A qué comportamiento similar a WYSIWYG te refieres? Solo esas características son de vista previa y modo plegable y ninguna de ellas está activa por defecto (ni siquiera necesita cargar los paquetes correspondientes para usar AUCTeX). La principal diferencia entre los modos AUCTeX y Vanilla * TeX es un mecanismo de autocompletado muy superior al insertar macros y entornos. Si valora el autocompletado, AUCTeX es el camino a seguir. Además, en AUCTeX siempre tiene que editar el código * TeX, no hay otras posibilidades, no sé por qué tuvo esta impresión equivocada.
giordano

Respuestas:

7

No es una solución de Emacs, pero mi código LaTeX escribe intervalos tales como \halfopen{0}{1}, donde

\newcommand\halfopen[2]{\ensuremath{[#1,#2)}}

Esta convención lleva el problema del equilibrio a un lugar donde es poco probable que cause problemas. Y se puede buscar :-)

Norman Ramsey
fuente
2
¿Para qué usas (0,1]?
Andrew Swann
@ Andrew-Swann Quizás \openhalfjejeje
Dox
@AndrewSwann\halfclosed
Norman Ramsey
2

La función latex-indentde sangría de latex-modeestablece la tabla de sintaxis tex-latex-indent-syntax-tabley llama a lo latex-find-indentque a su vez llama latex-backward-sexp-1.

La sintaxis de ?\(y ?\)se establece en lo "."que significa "puntuación". Entonces ya no es un delimitador.

Por lo tanto, expresiones como [0,1)resultado en un scan-erroren latex-backward-sexp-1que conduce a un comportamiento inesperado.

Puede evitar esto agregando lo siguiente a su archivo init:

(eval-after-load "tex-mode"
    '(progn (modify-syntax-entry ?\( "()" tex-latex-indent-syntax-table)
             (modify-syntax-entry ?\) ")(" tex-latex-indent-syntax-table)))

Pero no sé las consecuencias negativas de esta configuración desde que la uso auctex. Entonces, espera lo peor ;-).

Tobias
fuente