LINUX.ORG.RU

Latex - сломалась библиография

 , ,


0

1

Приветствую! Сегодня утром накатил предложенные сиситемой обновления

tex --version
TeX 3.141592653 (TeX Live 2021/Arch Linux)

и как обычно, после каждого релиза начинают отваливаться отточенные годами системы малой автоматизации. Сегодня это bibtex + ugost2008. После компиляции вываливает следующую ошибку:

This is BibTeX, Version 0.99d (TeX Live 2021/Arch Linux)
The top-level auxiliary file: Report_Pas_tr.aux
The style file: ugost2008.bst
Database file #1: tets.bib
"\" can't start a style-file command---line 2611 of file ugost2008.bst
 : 
 : \endinput
(Error may have been on previous line)
(There was 1 error message)

выглядят артефакты такЪ.

Есть ли у кого мысли как победить?


Ответ на: комментарий от Eddy_Em

Попробовал с этим стилевым файлом. Действительно, косяк на косяке... Судя по всему, авторы намудрили с кириллицей: pdflatex при ее обработке решил, что кодировка OT1, а не КОИ8-Р. В общем, если тебе нужен именно этот стиль, придется «чинить» его.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от arbyz

У тебя вместо русских текстов втыкаются коды. Вот один из кусочков стиля:

FUNCTION {bbl.vvol}
{ curlanguage "english" = curlanguage "french" = or curlanguage "italian" = or
   {"Vol."}
   { curlanguage "ukrainian" = curlanguage "russian" = or
      {"^^d0^^a2."}
      { curlanguage "german" =
         {"{Bd.}"} %%%% { "Vol." }
         {"language is not defined: " curlanguage  " in bbl.vvol" * * warning$ "Vol."}
      if$}
   if$}
if$}
Как видишь, вместо «том» втыкается "^^d0^^a2.". Вместо «с.» втыкается "{^^d1^^81.}".

В общем, разработчики стиля настолько рукожопы, что захардкодили какую-то определенную кодировку (хрюникод?), в результате чего любая другая будет выдавать ошибки.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от arbyz

В общем, единственным вменяемым решением будет скопировать этот стиль в директорию с публикацией и полностью перелопатить его, заменив коды на русские буквы.

Вот, например, в стиле vak.bst все сделано правильно:

FUNCTION {bbl.pages}    % { "\bblpp." }
{  curlanguage "english" =
    {"P."}
    { curlanguage "ukrainian" = curlanguage "russian" = or
           {"{\cyr\cyrs.}"}
           {"language is not defined: " language  "P." * * warning$ "P."}
      if$}
  if$
}

Может, тебе хватит ваковского стиля?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Нет, к сожалению. Ваковский стиль вроде заточен под ГОСТ2003, а у меня 2008. Думаю перевести всё на biblatex-gost. Но тоже вариант так-себе… Очень много документов свёрстано именно под сабж… Обратной совместимости нет.

arbyz
() автор топика

Если я правильно понимаю ситуацию, то ты применяешь библиографический стиль ugost2008, который работает только в кодировке UTF-8, к документу в восьмибитной кодировке. Не делай так. Бери gost2008, он должен работать с legacy encodings.

Это не отменяет ошибки, связанной с \endinput. Ее бы надо зарепортить, странно видеть \endinput в бибтеховском стиле.

TeopeTuK ★★★★★
()
Ответ на: комментарий от TeopeTuK

Та неее, всё присутствует

% !TEX encoding = UTF-8

....

\usepackage[utf8]{inputenc}
\usepackage{fontspec}
\setmainfont{Times New Roman}
\newfontfamily\cyrillicfont{Times New Roman}
\setmonofont{CMU Typewriter Text}

схема работала года 3 без нареканий.

arbyz
() автор топика
Ответ на: комментарий от arbyz

Так воспроизвелось. Похоже на баг. Надо репортить авторам ugost2008.bst. А может и авторам xetex и luatex. Должно ли скажем ^^d0^^a2 в коде (буква T в кодировке UTF-8) восприниматься как ^^^^0422?

TeopeTuK ★★★★★
()
Ответ на: комментарий от TeopeTuK

Естественно, это баг! Вменяемые люди не хардкодяд в стилевые файлы коды букв! Позволяется использовать лишь макросы вида \cyr\cyrzh\cyr\cyro\cyr\cyrp\cyr\cyra. А тут получилось, что даже у пользователя-хрюникодчика вылезают ошибки!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от einhander

Вот пример заполнения.

@BOOK{zyev_2019,
	author = {Зуев, Ю.А.},	
	title = {Совеременная дискретная математика: От перечислительной комбинаторики до криптографии XXI века.},
	year = 2019,
	publisher = {ЛЕНАНД},
	location = {М.},
	isbn = {978-5-9710-5660-7},
	pagetotal = 720,
	language = {russian},
	langid = {russian},
}

Вот выход

arbyz
() автор топика
Ответ на: комментарий от aquadon

Может подскажете как правильно настроить? Я взял настройки, якобы максимально заточенные под ГОСТ:

\usepackage[
backend=biber,
bibencoding=utf8,
sorting=none,
style=gost-numeric,
language=autobib,
autolang=other,
clearlang=true,
defernumbers=true,
sortcites=true,
doi=true,
isbn=true,
]{biblatex}

Но на выходе получаю печаль. Отсутсвует отчество, подчёркивает ФИО.

arbyz
() автор топика
Последнее исправление: arbyz (всего исправлений: 1)
Ответ на: комментарий от arbyz

В деталях не подскажу, т.к. такая порнография, как оформление по ГОСТу меня давно не интересует.

Вот кусок из одного из моих старых файлов:

\usepackage[
	natbib		= true,
	style		= gost-numeric,
	maxbibnames = 99,
	maxnames 	= 99,
	sorting		= nyvt,
	backend		= biber,
	language	= autobib,
	autolang	= other,
	doi			= false,
	url			= false,
	isbn 		= false,
	eprint		= false,
	]{biblatex}


% Написание названия работы курсивом (во всех записях)
\DeclareFieldFormat{title}{\textit{#1}}

% Правильный пробел между инициалами в библиографии
\renewcommand*{\bibinitdelim}{\,}
\renewcommand*{\mkbibhdnamefamily}[1]{#1}
\renewcommand*{\mkbibhdnamegiven}[1]{#1}
\renewcommand*{\mkbibhdnameprefix}[1]{#1}
\renewcommand*{\mkbibhdnamesuffix}[1]{#1}

\DeclareFieldFormat[article,periodical]{volume}{\textbf{#1}}
\DeclareFieldFormat[article,periodical]{number}{#1}
\DeclareFieldFormat{journaltitle}{\mkbibemph{#1}}

\newbibmacro*{jour:volume+parts+issuetitle}{%
  \printfield{volume}%
  \setunit*{\addcomma\space}%
  \printfield{issue}%
  \setunit*{\addcomma\space}%
  \printfield{number}%
  \iffieldundef{issuetitle}
    {}
    {\setunit{\addcolon\space}%
     \mkbibemph{\printfield{issuetitle}}}}%


\renewbibmacro*{jour:volume+parts+issuetitle}{%
  \mkbibbold{\printfield{volume}}%
  \setunit*{\addcomma\space}%
  \printfield{issue}%
  \setunit*{\addcomma\space}%
  \printfield{number}%
  \iffieldundef{issuetitle}
    {}
    {\setunit{\addcolon\space}%
     \printfield{issuetitle}}}%


\renewcommand{\mkbibnamelast}[1]{\mkbibemph{#1}}
\renewcommand*{\newunitpunct}{\addcomma\space}

% Поместить инициалы после фамилии (через запятую)
\DeclareNameAlias{default}{family-given}

% Убрать "In: " ("В: ") перед названием журнала
\renewbibmacro{in:}{}  % suppress the "In: " before the journaltitle

У меня были конкретные стилистические требования от издательства. Возможно, что-то из этого будет полезно в качестве отправной точки.

aquadon ★★★★★
()
Последнее исправление: aquadon (всего исправлений: 1)
22 июля 2021 г.
Ответ на: комментарий от Eddy_Em

Не нужно писать о том, чего не знаешь. OT1 – кодировка шрифта, KOI8-R – кодировка tex-файла. Весь мир уже перешел на юникод, только грамотеи с этого сайта сидят на устаревшем хламе.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.