如何在不破坏缩进的情况下以LaTeX模式编写[0,1)?


9

使用编写LaTeX时latex-mode,我经常想在文本中编写“半开间隔”。例如,[0,1),它指的是集所有号码的x使用0 <= x < 1

不幸的是,这些“不平衡的定界符”似乎使缩进解析器混乱,导致后面的文本不适当地缩进,通常向右漂移。

这是一个示例文档。下面的文本是执行后的结果C-x h M-x indent-region。正确的行为是使所有两个段落都缩进0个空格。

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

目前,我正在用一个丑陋的方法解决这个问题:我定义了一个LaTeX宏,该宏可以扩展为空,并在该宏的调用内编写“匹配”定界符。这样可以使压头重新同步。

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

但这确实令人不快。有更好的解决方案吗?

我正在使用GNU Emacs 24.4.1。


3
没有回答您的问题,但是您是否考虑过尝试AUCTeX?它不会遭受这个小错误的困扰。
giordano

@giordano:我已经看过了。它的默认行为比我想要的要重得多。我更喜欢像代码一样编辑LaTeX,而且我真的不想要WYSIWYG风格的编辑器内渲染。也许有可能关闭所有功能并拥有文本编辑器的经验,但这仍然使AUCTeX看起来过于矫kill过正。
Nate Eldredge

6
您指的是哪种所见即所得的行为?只有此类功能是预览和折叠模式,默认情况下它们都不处于活动状态(您甚至不需要加载相应的程序包即可使用AUCTeX)。在插入宏和环境时,AUTCeX和vanilla * TeX模式之间的主要区别是优越的自动完成机制。如果您重视自动补全功能,则可以选择AUCTeX。此外,在AUCTeX中,您始终必须编辑* TeX代码,没有其他可能性,我不知道您为什么会有这种错误印象。
giordano

Answers:



2

缩进功能latex-indentlatex-mode集合的语法表tex-latex-indent-syntax-table,并呼吁latex-find-indent后者又调用latex-backward-sexp-1

的语法?\(?\)被设置为"."代表“标点”。因此,它不再是分隔符。

因此,这样的表达式[0,1)的结果为scan-errorlatex-backward-sexp-1这导致了意外的行为。

您可以通过在初始化文件中添加以下内容来避免这种情况:

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

但是,由于使用,因此我不知道此设置的负面影响auctex。因此,请期待最坏的情况;-)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.