단락을 다시 래핑하는 vim "gq}" 명령 및 LaTeX

단락을 다시 래핑하는 vim "gq}" 명령 및 LaTeX

이 명령이 다음과 같은 항목을 래핑하지 않도록 하려면 어떻게 해야 합니까 \item?

예를 들어:

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

첫 번째 항목(의 첫 문자 this)에 커서를 두고 "gq}"를 실행하면 다음과 같은 출력이 생성됩니다.

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

토큰이 \item단락의 끝을 의미한다는 것을 어떻게든 vim이 인식하게 할 수 있다면 그것이 올바르게 작동할 것이라고 생각합니다. 그런데 그렇게 하려면 어떻게 해야 할까요?

답변1

단락 구분 태그를 포함하도록 'formatlistpat' 옵션을 설정하면 이 작업을 수행할 수 있다고 생각합니다. 작동하려면 'formatoptions'에 'n'을 포함해야 합니다. 보다

:help 'formatlistpat'
:help 'formatoptions'

예를 들어,

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

예제의 형식을 지정하면 다음이 생성됩니다.

\begin{열거하다}
\item 이것은 긴 단락일 수 있습니다
     여러 줄에 걸쳐 있는
\item 어쩌구
\end{열거하다}

첫 번째 항목의 두 번째 줄은 태그 길이만큼 들여쓰기되어 있으므로 \item정확히 원하는 내용은 아니지만 충분히 가까울 수 있습니다. \zeVim이 다음 줄을 들여쓰기하지 않고도 태그를 인식할 수 있는지 알아보기 위해 도움말에 언급된 대로 실험해 볼 수도 있습니다 . 나는 그것을 시도하지 않았습니다.

업데이트

:let대신에 'formatlistpat'을 사용하여 설정하면 'formatlistpat'가 좀 더 명확하고 편집하기 쉽습니다 :set.

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

l:부분은 버퍼 로컬 설정임을 지정합니다.

업데이트

들여쓰기를 1자로 줄이려면 다음을 수행하십시오.

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

앞에 공백이 있으면 \item들여쓰기는 해당 숫자 + 1이 됩니다. 를 사용하여 들여쓰기를 0으로 줄이는 것이 가능한지 모르겠습니다 \ze.

답변2

나에게 맞는 솔루션은 다음과 같습니다. 저는 라텍스 텍스트의 서식을 처리하기 위해 외부 스크립트를 작성했습니다(https://github.com/elmanuelito/par-latex)

vim에서의 사용 예:

  • 텍스트를 선택하세요(예: Vj또는 ggVG).
  • ":!par-latex"를 입력하세요(vim 명령줄은 다음과 같습니다: '<,'>!par-latex)
  • Enter를 입력하세요

기본 옵션을 사용하면 itemize 환경 내에서 텍스트를 선택하면 예제가 처리됩니다. 더 많은 텍스트를 선택할 때 작동하려면 format_inside_group스크립트 시작 부분에서 옵션을 활성화해야 합니다.

관련 정보