JabRef는 JabRef 3.0에서 생성된 .bib 파일을 읽을 수 없습니다.

JabRef는 JabRef 3.0에서 생성된 .bib 파일을 읽을 수 없습니다.

새 컴퓨터 설정으로 마이그레이션 중인데 JabRef 3.8.2를 설치했을 때 JabRef 3.0에서 생성된 .bib 파일을 읽을 수 없다는 것을 발견했습니다. 3140개 항목 중 991개만 나타나고 오류 메시지가 표시됩니다(이 게시물 끝 참조).

텍스트 편집기에서 잘못된 줄을 살펴보았는데 누락된 쉼표가 전혀 보이지 않습니다. 하지만 저는 .bib 파일을 직접 편집하지 않고 JabRef에 의해 생성되었기 때문에 여러분이 예상하는 바입니다.

문제를 해결할 수 있는 방법이 있나요? 저는 타이핑 통증에서 회복 중이므로 먼저 덜 타이핑 집약적인 방법을 시도해 보겠습니다.

오류 메시지는 다음과 같습니다.

1. 항목을 구문 분석하는 중 오류가 발생했습니다: '라인 4815 이상의 오류: 빈 텍스트 토큰.
이는 두 필드 사이에 쉼표가 누락되어 발생할 수 있습니다.'. 항목을 건너뛰었습니다.
2. 항목을 구문 분석하는 중 오류가 발생했습니다: '행 6304 이상의 오류: 빈 텍스트 토큰.
이는 두 필드 사이에 쉼표가 누락되어 발생할 수 있습니다.'. 항목을 건너뛰었습니다.
3. 항목을 구문 분석하는 중 오류가 발생했습니다: '행 6393 이상의 오류: 빈 텍스트 토큰.
이는 두 필드 사이에 쉼표가 누락되어 발생할 수 있습니다.'. 항목을 건너뛰었습니다.
4. 항목을 구문 분석하는 중 오류가 발생했습니다: '행 6904 이상의 오류: 빈 텍스트 토큰.
이는 두 필드 사이에 쉼표가 누락되어 발생할 수 있습니다.'. 항목을 건너뛰었습니다.
5. 항목을 구문 분석하는 중 오류가 발생했습니다: '라인 8560 이상의 오류: 빈 텍스트 토큰.
이는 두 필드 사이에 쉼표가 누락되어 발생할 수 있습니다.'. 항목을 건너뛰었습니다.
6. 항목을 구문 분석하는 중 오류가 발생했습니다: '라인 9697 이상의 오류: 빈 텍스트 토큰.
이는 두 필드 사이에 쉼표가 누락되어 발생할 수 있습니다.'. 항목을 건너뛰었습니다.
7. 항목을 구문 분석하는 중 오류가 발생했습니다: '라인 13249 이상의 오류: 빈 텍스트 토큰.
이는 두 필드 사이에 쉼표가 누락되어 발생할 수 있습니다.'. 항목을 건너뛰었습니다.
8. 항목을 구문 분석하는 중 오류가 발생했습니다: '라인 13646 이상의 오류: 빈 텍스트 토큰.
이는 두 필드 사이에 쉼표가 누락되어 발생할 수 있습니다.'. 항목을 건너뛰었습니다.
9. 항목을 구문 분석하는 중 오류가 발생했습니다: '라인 14067 이상의 오류: 빈 텍스트 토큰.
이는 두 필드 사이에 쉼표가 누락되어 발생할 수 있습니다.'. 항목을 건너뛰었습니다.
10. 항목을 구문 분석하는 중 오류가 발생했습니다: '라인 15177 이상의 오류: 빈 텍스트 토큰.
이는 두 필드 사이에 쉼표가 누락되어 발생할 수 있습니다.'. 항목을 건너뛰었습니다.
11. 항목을 구문 분석하는 중 오류가 발생했습니다: '라인 15530 이상의 오류: 빈 텍스트 토큰.
이는 두 필드 사이에 쉼표가 누락되어 발생할 수 있습니다.'. 항목을 건너뛰었습니다.
12. 항목을 구문 분석하는 중 오류가 발생했습니다: '라인 16010 이상의 오류: 빈 텍스트 토큰.
이는 두 필드 사이에 쉼표가 누락되어 발생할 수 있습니다.'. 항목을 건너뛰었습니다.
13. 항목을 구문 분석하는 중 오류가 발생했습니다: '라인 51479 오류: 중간 문자열의 EOF'. 항목을 건너뛰었습니다.

추가 정보가 요청됨

여기는내 전체 .bib 파일에 대한 링크.

오류가 발생한 첫 번째 항목은 다음과 같습니다.

@Book{burzio.1994,
  제목 = {{P}{E}English {S}tress}의 원리,
  저자 = {Burzio, L.},
  출판사 = {Cambridge University Press},
  연도 = {1994},
  주소 = {영국 케임브리지},
  키워드 = {음운론, 강세, },
  Lccn = {2008년 5월 8일, 2008년 11월 7일에 직접 대출을 요청했습니다. },
  소유자 = {Word},
  타임스탬프 = {2009.07.31}
}

답변1

나는 너의 문제를 해결한 사람이니까위에 링크한 JabRef의 이슈 트래커에서, github의 해결 답변을 여기 이 사이트에 직접 추가하겠습니다. 이는 tex.stackechange를 좀 더 독립적으로 만듭니다.

귀하의 파일을 살펴본 결과 오류가 있는 항목이 하나 이상 발견되었습니다. 나머지 문제도 비슷한 성격일 것으로 생각됩니다. 문제가 있는 항목은 다음과 같습니다.

@Article{burrows.2007,
  Title                    = {{A}ll the way through: {T}esting for authorship in different frequency strata.\},
  Author                   = {Burrows, John.},
  Journal                  = {Literary and Linguistic Computing},
  Volume                   = {22},
  Year                     = {2007},
  Number                   = {1},
  Abstract                 = {Not very readable. Basic premise is that the most and least frequent
    words aren't so good as a guage, but maybe the middling frequency
    words will work as an indication of an author's style. I suppose
    the word 'stipulate' might never appear in my academic writing, but
    it would in Robert A. Heinlein's. That idea is useful, but I didn't
    understand the mechanics of his specific tests for them.},
  Endnotereftype           = {Journal Article},
  Keywords                 = {computational, stylometry},
  Owner                    = {EN},
  Shorttitle               = {All the way through: Testing for authorship in different frequency strata.},
  Timestamp                = {2009.08.06}
}

문제는 로 끝나는 제목 필드에 있습니다 \}. 백슬래시는 중괄호를 이스케이프하므로 JabRef가 구문 분석 중에 백슬래시를 무시하고 오류가 발생합니다. 백슬래시를 제거하면 항목이 제대로 로드됩니다.

내가 아는 한, JabRef는 이 항목을 거부하는 것이 맞습니다. JabRef 3.0이 이런 방식으로 직렬화한 이유는 알 수 없지만 이것이 버그였던 것 같습니다(더 이상 발생해서는 안 됩니다).

제가 추천하는 것은 텍스트 편집기에서 파일을 검사하고 \}백슬래시가 있는지 검색한 후 삭제하는 것입니다. github에서 언급했듯이 문제가 해결되었습니다.

답변2

누군가 내 문제를 해결했습니다!

https://github.com/JabRef/jabref/issues/2799#issuecomment-297441786

답변3

폴란드어 "획이 있는 L"을 잘못된 방식으로 쓰려고 하면 비슷한 문제가 발생할 수 있습니다.

예: 저자 이름 "Tałanda, A."를 포함하는 경우 bibtex 파일의 5000행에서 와 같이 Ta{\{l}}anda, A.JabRef는 다음 오류를 보고합니다.

1. Error occurred when parsing entry: 'Error in line 5000: Expected = but received a'. Skipped entry.

이 오류를 피하려면 다음과 같이 "획이 있는 L"을 작성해야 합니다("L"을 중괄호로 묶지 않음). Ta{\l}anda, A.

다른 사람이 이 문제에 직면할 경우를 대비해 여기에 남겨둡니다.

관련 정보