5

Как я могу заставить эту команду не переносить такие вещи, как \item?

Например:

\begin{enumerate}
\item this might be a long paragraph that spans multiple lines 
\item blah
\end{enumerate}

если я запускаю "gq}" с курсором на первом элементе (первой буквой this), он производит такой вывод:

\begin{enumerate}
\item this might be a long 
paragraph that spans multiple 
lines \item blah \end{enumerate}

Это то, что я хочу:

\begin{enumerate}
\item this might be a long 
paragraph that spans multiple 
lines 
\item blah
\end{enumerate}

Если я смогу заставить vim распознать, что токен \item означает конец абзаца, я думаю, он будет работать правильно. Но как бы я поступил так?

2 ответа2

6

Я думаю, что вы можете сделать это с помощью опции 'formatlistpat', включающей теги, разделяющие абзацы. Вы должны включить 'n' в 'formatoptions', чтобы это работало. Увидеть

:help 'formatlistpat'
:help 'formatoptions'

Например, с

:set formatlistpat=^\\s*\\\\\\(end\\\\|item\\)\\>
:set formatoptions+=n
:set textwidth=40

форматирование вашего примера производит это:

\begin{enumerate}
\item this might be a long paragraph
     that spans multiple lines 
\item blah
\end{enumerate}

Обратите внимание, что вторая строка первого элемента имеет отступ в длину тега \item , поэтому это не совсем то, что вам нужно, но может быть достаточно близко. Вы также можете поэкспериментировать с \ze как упоминалось в справке, чтобы узнать, сможете ли вы заставить Vim распознавать тег без отступа в последующих строках. Я не пробовал это.

Обновить

Формат «listlistpat» немного понятнее и его легче редактировать, если он установлен с помощью :let вместо :set .

:let &l:flp = '^\s*\\\(end\|item\)\>'

Часть l: указывает, что это локальная настройка буфера.

Обновить

Чтобы уменьшить отступ до 1 символа, сделайте это:

:let &l:flp = '^\s*\\\ze\(end\|item\)\>'

Обратите внимание: если перед \item есть пробелы, отступ становится номером + 1. Я не знаю, возможно ли уменьшить отступ до 0, используя \ze .

0

Вот решение, которое работает для меня. Я написал внешний скрипт для обработки форматирования латексного текста (https://github.com/elmanuelito/par-latex)

Пример использования в vim:

  • Выберите текст (например, Vj или ggVG)
  • тип ":!par-latex "(командная строка vim выглядит так: '<,'>!par-latex)
  • введите ввод

С параметрами по умолчанию, он будет обрабатывать ваш пример, если вы выделите текст в среде itemize. Чтобы это работало, когда вы выделяете больше текста, вам нужно активировать опцию format_inside_group в начале скрипта.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .