쉘 스크립트에서 BibTeX의 특수 문자(예: {\'{o}} = ó)를 어떻게 바꾸나요?

쉘 스크립트에서 BibTeX의 특수 문자(예: {\'{o}} = ó)를 어떻게 바꾸나요?

유틸리티에 대해 알고 있거나 BibTeX 파일의 특수 문자를 bash 스크립트의 올바른 유니코드 해당 문자로 변환한 경험이 있는 사람이 있습니까? 문제는 BibTeX 특수 문자의 전체 목록을 어디에서도 찾을 수 없다는 것입니다. 정규식 괴물을 만들었지만 BibTeX 특수 문자(예: 백슬래시, 따옴표 및 중괄호)가 정규식 또는 셸 코드와 잘 호환되지 않기 때문에 여전히 이스케이프 문제가 있습니다.

{\ }나는 BibTeX 마크업에서 패턴을 찾는 캡처 그룹이 포함된 간단한 정규식을 갖는 것만으로도 충분할 것이라고 생각했습니다. 그리고 일치하는 항목이 있으면 {\\'{o}}파일을 만든 일종의 외부 사전(예:)을 사용하여 일치시키는 것입니다. , 해당 시퀀스를 올바른 유니코드 문자로 매핑합니다... ó이 경우. 특수 문자의 전체 목록에 액세스하지 않으면 이 작업을 수행하기가 어렵습니다. 이는 연구 논문 메타데이터(제가 작업 중인 데이터)에서 매우 흔한 경향이 있습니다.

또 다른 문제는 BibTex 파일마다 특수 문자에 대한 구문이 다르다는 것입니다. 이름은 , (안쪽 중괄호에 추가 백슬래시) 또는 심지어 (특수 문자 TeX 조각 주위에 중괄호 없음) Müller로 인코딩될 수 있습니다 .author = {M{\"{u}}ller}author = {M{\"{\u}}ller}author = {M\"{u}ller}

나는 내가 다운로드한 연구 논문으로 작업하거나, 보기/건너뛰기/잊어버리거나, DOI를 입력할 수 있는 대화형 쉘 스크립트를 가지고 있습니다. 이 시점에서 쉘 스크립트는 논문의 BibTeX를 검색하고 내가 사용하는 규칙에 따라 파일 이름을 바꿉니다. BibTex를 사용하여 데이터와 DOI에 태그를 지정한 다음 세션을 완료한 후 처리된 모든 파일을 Zotero로 가져온 다음 처리된 각 문서에 PDF 첨부 파일과 Dropbox 링크를 추가하는 내가 작성한 또 다른 스크립트를 실행합니다. 하지만 이러한 특수 문자가 내 파일 이름과 Zotero 메타데이터를 망치고 있습니다...

긴 이야기 짧게- bash 스크립트의 맥락에서 BibTeX/TeX 특수 문자를 유니코드로 변환하는 방법을 아는 사람이 있습니까? 아니면 BibTeX 특수 문자의 전체 목록을 어디서 찾을 수 있는지 아는 사람이 있나요?

ベストアンサー1

내 생각에는 Python이 Bash보다 문자열과 유니코드를 처리하는 데 더 적합하다고 생각합니다. Bash에서 쉽게 사용할 수 있으며 이 간단한 템플릿을 사용하기 위해 Python을 알 필요는 없습니다.

#!/usr/bin/env python3
import sys
for line in sys.stdin:
    line = line.replace(r"\'{o}",r"ó")
    line = line.replace(r'{\"{u}}',r"ü")
    line = line.replace(r'{\"{\u}}',r"ü")
    line = line.replace(r'\"{u}',r"ü")
    print(line, end='')

용법:

  • 위의 내용을 복사하여 새 텍스트 파일에 붙여넣습니다.convert_tex_chars.py
  • 터미널을 열고 cd텍스트 파일이 있는 디렉터리로 이동합니다.
  • 파일을 실행 가능하게 만듭니다.chmod +x convert_tex_chars.py
  • 테스트: echo "s\'{o}ng p\'{o}ng "'M{\"{u}}ller M{\"{\u}}ller M\"{u}ller' |./convert_tex_chars.py(이 표시되어야 함 sóng póng Müller Müller Müller)
  • BibTeX 파일에서 테스트해 보세요.cat original_bibtex_file |./convert_tex_chars.py >new_bibtex_file

Python 파일을 편집하고 필요에 따라 대체 항목을 추가하거나 편집합니다. Python에서는 동일한 방식으로 작동하므로 "내용 에 작은따옴표가 포함된 경우에 사용되고 내용에 큰따옴표가 포함된 경우에는 사용됩니다. 각 문자열 앞에 백슬래시 문자를 이스케이프 처리하지 않고 포함할 수 있습니다 ('""''r자세한 내용은).

정규식 대체를 원할 경우 import re이를 두 번째 줄로 삽입하고 다음과 같이 사용합니다. ( 이것은 로 line = re.sub(r'\\', r'\\', line)대체됩니다 ). 첫 번째 매개변수는 정규식이고 두 번째 매개변수는 대체 매개변수(백슬래시)입니다.\\\여기에서 처리됨), 세 번째는 소스 문자열입니다. 보다공식 문서그리고웹에는 수백 가지의 예가 있습니다..

おすすめ記事