インデントを解除せずにLaTeXモードで[0,1)を書き込むにはどうすればよいですか?


9

を使用してLaTeXを作成する場合latex-mode、テキストに「ハーフオープン間隔」を記述したいことがよくあります。たとえば、は[0,1)、ですべての数値のセットを参照x0 <= 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を試してみることを検討しましたか?1つは、この小さなバグの影響を受けないことです。
ジョルダーノ2015

@giordano:私はそれを見てきました。そのデフォルトの動作は、私が望むものよりもかなり重いです。私はコードのようにLaTeXを編集することを好み、WYSIWYGスタイルのエディター内レンダリングを本当に望んでいません。たぶんそれをすべてオフにしてテキストエディタのエクスペリエンスを実現することは可能ですが、それでもAUCTeXはやり過ぎのように見えます。
Nate Eldredge 2015

6
どのWYSIWYGのような動作を参照していますか?そのような機能だけがプレビューと折りたたみモードであり、デフォルトではどれもアクティブではありません(AUCTeXを使用するために対応するパッケージをロードする必要すらありません)。AUCTeXモードとバニラ* TeXモードの主な違いは、マクロと環境を挿入する際のはるかに優れたオートコンプリートメカニズムです。オートコンプリートを重視する場合、AUCTeXが適しています。さらに、AUCTeXでは常に* TeXコードを編集する必要があります。他に可能性はありません。なぜこの間違った印象を抱いたのかはわかりません。
ジョルダーノ2015

回答:


7

Emacsソリューションではありませんが、私のLaTeXコードはのような間隔を書き込みます\halfopen{0}{1}

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

この慣習により、問題が発生する可能性が低い場所にバランシングの問題が発生します。そしてそれは検索可能です:-)


2
何に使うの(0,1]
Andrew Swann

@ andrew-swannおそらく\openhalfhehehe
Dox

@AndrewSwann\halfclosed
Norman Ramsey

2

インデント機能latex-indentlatex-modeセット構文テーブルへtex-latex-indent-syntax-tableと呼び出しlatex-find-indentターンの呼び出しでいますlatex-backward-sexp-1

?\(and の構文はwhichが「句読点」を表すように?\)設定されて"."います。そのため、区切り文字ではなくなりました。

したがって、のような式[0,1)に結果scan-errorlatex-backward-sexp-1予期しない動作につながります。

これを回避するには、initファイルに以下を追加します。

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

しかし、私はを使用してauctexいるので、この設定の悪影響を知りません。したがって、最悪の事態を予想してください;-)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.