Emacs: после обновления Aquamacs, Alt-q в Auto-Fill-Mode прерывает строки в математических разделителях в LaTeX.

После того, как я обновил Aquamacs, использование Alt-q (в второстепенном режиме Auto-Fill) для заполнения абзацев при редактировании документа LaTeX приводит к разрыву каждой строки при первом появлении закрывающего ограничителя математики LaTeX, \). (Ну, почти! За одним исключением см. Пример ниже.)

Информация о версии: Aquamacs 3.2 GNU Emacs 24.4.51.2.

Вопрос

Как мне указать режиму Aquamacs / Emacs / Auto-Fill не разрывать строки на первом \), который он видит в строке, а фактически заполнять абзац, как это было до обновления?

Шаги по воспроизведению этого поведения

  1. Help -> Diagnose and report bug -> Start Aquamacs without customizations, чтобы получить "первозданное" окно Aquamacs.
  2. Откройте файл с именем testemacs.tex и дважды вставьте текст Lorem Ipsum, чтобы получилось два абзаца.
  3. Добавьте небольшие математические выражения, разделенные разделителями LaTeX \( и \), в случайные места во втором абзаце. Оставьте первый абзац как есть.
  4. Введите Alt-x auto-fill-mode, чтобы включить режим автозаполнения.
  5. Перейдите к каждому абзацу и введите Alt-q, чтобы вызвать функцию fill-paragraph.
  6. Обратите внимание на разницу! Смотрите скриншот ниже:

Изображение, показывающее разрывы строк в математических разделителях

Как видите, везде, кроме самой последней строки, fill-paragraph прерывает строку по первому закрывающему ограничителю \), который он видит. Это делает абзац действительно уродливым и сводит на нет всю цель заполнения абзацев. Как мне избавиться от такого поведения?

Режимы

Пожалуйста, посмотрите на снимок экрана ниже, чтобы увидеть действующие режимы:

Информация о режимах


person G Philip    schedule 29.04.2015    source источник


Ответы (2)


Это недавнее изменение в AUCTeX. Вы можете настроить переменную LaTeX-fill-break-at-separators. По умолчанию это

 (\\\( \\\) \\\[ \\\])

что согласно документации означает, что строки будут разорваны до или после этих разделителей, если все выражение не помещается в строке при заполнении. Однако поведение не совсем такое, и, как вы видите, оно безоговорочно разрывает строку после закрывающих разделителей \) и \]. Удаление встроенных математических переключателей \( и \) из этого списка восстанавливает прежнее поведение. Я также считаю, что для получения приемлемых результатов просто удаляю \) из этого списка, см. Пример 2 ниже. В интерфейсе настройки просто снимите флажок «Закрытие встроенных математических переключателей».

Вот конкретная демонстрация различных настроек.

  1. значение по умолчанию LaTeX-fill-break-at-separators, что эквивалентно

    (custom-set-variables
     '(LaTeX-fill-break-at-separators (quote (\\\( \\\) \\\[ \\\]))))
    

дает следующее с разрывом строки после каждого \):

Let \( \gamma\colon \BbbR \times [0,T) \to \BbbR^2 \)
be a family of regular curves solving~\eqref{eq:c-flow}, with each
curve \( \gamma^t \)
of period~\( \Psi \)
and with \( \gamma^0 \)
strictly convex. Let \( \kappa_0(t) \)
be the minimum value of \( \kappa \)
on \( \gamma^t \).
Note that \( \kappa_0(t) \)
is achieved at some point \( (\psi,t) \),
so in particular \( \kappa_0(0) > 0 \).
  1. Без встроенного математического закрытия

    (custom-set-variables
     '(LaTeX-fill-break-at-separators (quote (\\\( \\\[ \\\]))))
    

сохраняет математические группы в строке, но разрешает текст после них:

Let \( \gamma\colon \BbbR \times [0,T) \to \BbbR^2 \) be a family of
regular curves solving~\eqref{eq:c-flow}, with each curve
\( \gamma^t \) of period~\( \Psi \) and with \( \gamma^0 \) strictly
convex. Let \( \kappa_0(t) \) be the minimum value of \( \kappa \) on
\( \gamma^t \).  Note that \( \kappa_0(t) \) is achieved at some point
\( (\psi,t) \), so in particular \( \kappa_0(0) > 0 \).
  1. Без встроенного математического разделителя

    (custom-set-variables
     '(LaTeX-fill-break-at-separators (quote (\\\[ \\\]))))
    

математические группы могут быть разбиты по строкам:

Let \( \gamma\colon \BbbR \times [0,T) \to \BbbR^2 \) be a family of
regular curves solving~\eqref{eq:c-flow}, with each curve \( \gamma^t
\) of period~\( \Psi \) and with \( \gamma^0 \) strictly convex. Let
\( \kappa_0(t) \) be the minimum value of \( \kappa \) on \( \gamma^t
\).  Note that \( \kappa_0(t) \) is achieved at some point \( (\psi,t)
\), so in particular \( \kappa_0(0) > 0 \).
person Andrew Swann    schedule 29.04.2015
comment
Спасибо, это сработало, как вы и сказали. Для других, кому это может пригодиться: переменная принадлежит группе LaTeX. - person G Philip; 29.04.2015
comment
Я все еще думаю, что это какая-то ошибка. По крайней мере, документация по переменной неточна. В нем говорится, что разрыв строки будет вставлен, если блок не умещается на строке. Вместо этого безоговорочно вставляется разрыв строки. - person Thomas; 07.11.2015
comment
@Thomas согласился, что в документации есть ошибки. - person Andrew Swann; 07.11.2015

Я также отмечу, что Aquamacs не работает: он перезаписывает значение по умолчанию fill-paragraph (которое не принимает аргументов в GNU Emacs) функцией из fill-adapt, которая принимает один аргумент.

Это, по сути, нарушает работу всех пакетов, использующих fill-paragraph.

person Clément    schedule 26.01.2016