다음 LaTeX 인코딩을 변경하는 방법:
\cite{1,3-7,9}
도착하다
\cite{1,3,4,5,6,7,9}
윔에서? 나는 정규식을 사용하는 것을 선호합니다.
답변1
vim의 명령을 사용하여 substitute
이 작업을 수행 할 수 있습니다.
:%s/\\cite{1,3-7,9}/\\cite{1,3,4,5,6,7,9}/g
\cite{1,3-7,9}
이는 AND 의 모든 항목을 대체합니다 \cite{1,3,4,5,6,7,9}
.
현재 줄에 존재하는 일치 항목만 바꾸려면 다음을 사용할 수 있습니다.
:s/\\cite{1,3-7,9}/\\cite{1,3,4,5,6,7,9}/g
c
줄을 변경하기 전에 vim이 확인을 요청하도록 하려면 추가하세요. 예를 들어:
:%s/\\cite{1,3-7,9}/\\cite{1,3,4,5,6,7,9}/gc
답변2
m-n
표현식에서 양식 범위의 단일 인스턴스를 확장하려면 \cite{...}
다음을 수행할 수 있습니다.
perl -pe 's/\\cite{(?:\d+,)*\K(\d+)-(\d+)(?=(?:,\d+)*})/sprintf "%s", join(",", ($1..$2))/e' file.tex
답변3
그리고 내PatternsOnText 플러그인, 패턴 일치( 귀하의 경우) :substitute
로 명령을 제한 할 수 있습니다 .\cite{...}
:%SubstituteInSearch/\\cite{[^}]\+}/\(\d\+\)-\(\d\+\)/\=join(range(submatch(1),submatch(2)), ',')/g
정규식은 시작 및 끝 숫자를 구문 분석하고 및 join()
를 사용하여 숫자 범위로 변환합니다.range()
:help sub-replace-expr
답변4
Vim은 일반적으로 Perl과 연결됩니다.
Vim에서 Perl(또는 유사한 것)을 사용할 가능성이 관련될 수 있습니다.
그렇게 하면 + @steeldriver의 솔루션을 +perl
사용할 수 있습니다 (실제로는 약간 다릅니다).:perldo
:perldo s/\\cite{(?:\d+,)*\K(\d+)-(\d+)(?=(,.*?)?})/sprintf "%s",join(",", $1..$2)/e