Perl을 사용하여 LaTeX 문서 수정

Perl을 사용하여 LaTeX 문서 수정

문서를 perl수정하기 위해 명령을 사용하려고 합니다 . LaTeX실제로 인용 형식을 다음과 같이 변경하려고 합니다.

. \cite{poelma20113d}

도착하다

\cite{poelma20113d}.

즉, 앞에 마침표와 공백이 있는 따옴표를 찾아서 공백으로 바꾼 다음 따옴표와 마침표를 그 뒤에 배치하고 싶습니다. 누구든지 perl하나의 라이너로 이 작업을 수행하는 방법을 도와줄 수 있습니까 ? 이렇게 하고 싶은 이유는 제가 준비하고 있는 원고의 형식을 Journal of Physics of Fluids에서 Journal of Physical Review E로 바꾸고 싶기 때문입니다.

답변1

LaTeX는 LaTeX를 통해서만 올바르게 구문 분석될 수 있다고 확신합니다.1Perl에서 LaTeX를 구현하는 것은 정말 어려운 일이 될 것입니다. 따라서 간단한 Perl 솔루션은 특정 엣지 조건에서 실패합니다. 다음 예제를 사용하세요

이것은 cite{foo}입니다. \cite{foo} 이것은 cite[foo]{bar}입니다. \cite[foo]{bar} 이것은 citet{foo, bar}입니다. \citet{foo, 바}

여기에는 단일 선택적 인수, 여러 참조, \cite다음으로 시작하는 대체 항목, 및 \cite사이의 가변 개수의 공백이 포함됩니다. 다음 표현은 필요한 것을 수행하는 것 같습니다.\citeperl

perl -pe 's/(.\s*)(\\cite)([^{]*)(\[[^\]]*\])?{([^}]*)}/\2\3\4\{\5\}./g' afile

이것은 cite{foo}\cite{foo}입니다. cite[foo]{bar}\cite[foo]{bar}입니다. citet{foo, bar}\citet{foo, bar}입니다.

답변2

쿼리할 때 스왑을 찾아 수행합니다.

$ perl -lpe 's/\. (\\cite.*)/$1./' afile 
\cite{poelma20113d}.

한 줄의 코드를 가지려면 파일을 실제로 변경하십시오.

$ perl -i.bak -lpe 's/\. (\\cite.*)/$1./' afile 

afile.bak.bak 파일 생성을 중단하려면 perl스위치에 대한 인수를 생략하여 이 작업을 수행하지 않도록 지정할 수 있습니다 -i.

$ perl -i -lpe 's/\. (\\cite.*)/$1./' afile 

어떻게 작동하나요?

위의 예에서는 file 의 각 문자열에서 다음 비트를 찾습니다 afile.

  • \.- 텍스트를 찾아보세요 ..
  • s/.../../- 패턴을 검색하여 다른 패턴으로 교체해 보세요.
  • (\\cite.*)- 텍스트 패턴, \문자열 cite및 기타 항목을 찾습니다. 이 모든 내용은 $1괄호(예: )로 묶여 있으므로 변수에 저장됩니다 (....). 노트: (\\cite.*})닫는 중괄호에 도달하면 중지됩니다 }. 예를 들어 이렇게 하면 LaTeX \cite{}in 명령 뒤의 다음 문장이 . \cite{poelma20113d} This is the next sentence.올바르게 처리됩니다.
  • $1.- 는 $1괄호 안에 일치하는 내용이므로 뒤에 넣고 를 추가합니다 ..

관련 정보