JabRef не может прочитать файл .bib, созданный JabRef 3.0

JabRef не может прочитать файл .bib, созданный JabRef 3.0

Я перехожу на новую конфигурацию компьютера, и когда я установил JabRef 3.8.2, я обнаружил, что он не может прочитать файлы .bib, созданные JabRef 3.0. Появляется только 991 из 3140 записей, и появляется сообщение об ошибке (см. конец этого сообщения).

Я посмотрел на предположительно плохие строки в текстовом редакторе, и я действительно не вижу никаких пропущенных запятых. Но это то, что вы могли бы ожидать, потому что я никогда не редактирую файл .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}ринципы {английского {S}ресса},
  Автор = {Бурцио, Л.},
  Издатель = {Издательство Кембриджского университета},
  Год = {1994},
  Адрес = {Кембридж, Великобритания},
  Ключевые слова = {фонология, ударение, },
  Lccn = {Запрошенный заем напрямую 8 мая 2008 г., 7 ноября 2008 г.},
  Владелец = {Слово},
  Временная метка = {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.» Ta{\{l}}anda, A.в строку 5000 вашего файла bibtex, JabRef сообщит о следующей ошибке:

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

Чтобы избежать этой ошибки, необходимо написать «L со штрихом» следующим образом (без заключения «L» в фигурные скобки): Ta{\l}anda, A.

Я просто оставлю это здесь на случай, если кто-то еще столкнется с такой проблемой.

Связанный контент