Як я можу записати [0,1) у режимі LaTeX, не порушуючи відступ?


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 здається непосильним.
Нейт Елдредж

6
Яку поведінку, схожу на WYSIWYG, ви маєте на увазі? Тільки такі функції є режимом попереднього перегляду та складання, і жодна з них не активна за замовчуванням (вам навіть не потрібно завантажувати відповідні пакети, щоб використовувати AUCTeX). Основна відмінність режимів AUCTeX від vanilla * TeX - це набагато покращений механізм автозаповнення під час вставки макросів і середовищ. Якщо ви цінуєте автодоповнення AUCTeX - це шлях. Крім того, в AUCTeX завжди потрібно редагувати * TeX-код, інших можливостей немає, я не знаю, чому у вас виникло таке неправильне враження.
giordano

Відповіді:


7

Не рішення Emacs, але мій код LaTeX записує такі інтервали, як \halfopen{0}{1}, де

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

Ця конвенція підштовхує питання балансування до місця, де навряд чи викличе проблеми. І це пошук :-)


2
Для чого ви використовуєте (0,1]?
Ендрю Сванн

@ andrew-swann Можливо, \openhalfhehehe
Dox

@AndrewSwann\halfclosed
Norman Ramsey

2

Поглиблення функція latex-indentз latex-modeбезлічі синтаксис-таблиці для tex-latex-indent-syntax-tableі викликів latex-find-indent, в свою чергу викликів latex-backward-sexp-1.

Синтаксис ?\(і ?\)встановлюється, "."що означає "пунктуація". Тож це вже не роздільник.

Тому такі вирази , як [0,1)результат в scan-errorіншій , latex-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. Тож чекайте найгіршого ;-).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.