Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Оформление списка литературы по ГОСТ Р 2.105-2019 #469

Open
vibro-pribor opened this issue Apr 16, 2021 · 7 comments
Labels

Comments

@vibro-pribor
Copy link

Здравствуйте уважаемые знатоки LaTeX

Столкнулся с проблемой оформления списка литературы по вышеуказанному ГОСТу (https://docs.cntd.ru/document/1200164120) п. 6.11.3 говорит, что необходимо оформить в виде таблицы. Для списка литературы использую Biblatex + Biber. Удалось заставить работать в окружении tabularx, но без горизонтальных и вертикальных линий.
Сейчас кода такой

\RequirePackage{xpatch}
\RequirePackage[style=gost-authoryear,%
				backend=biber,%
				bibencoding=utf8,%
				texencoding=utf8,%
				hyperref=true,%
				sorting=none,
				mcite=true, doi=false, singletitle=true, labeltitle=true, uniquename=true]{biblatex}

\DeclareSourcemap{
    \maps[datatype=bibtex]{
        \map{
          \step[fieldsource=heading, final] % Какое поле отображать в тексте (сейчас стоит поле Heading, т.е будет например ГОСТ 957.996-90)
          \step[fieldset=shorthand, origfieldval]
        }
    }
}
  
\newcommand{\reference}{%
  \par\begin{tabularx}{\textwidth}{>{\arraybackslash}m{0.30\textwidth}>{\arraybackslash}m{0.65\textwidth}}   
        \printfield{heading}     
      & \printfield{title} \clearfield{heading} \clearfield{title} \clearlist{specdata} \clearfield{pagetotal} %
        \clearfield{year} \clearlist{publisher} \clearlist{location} \clearfield{series} \clearfield{year}}
    
\newcommand{\patchdrivers}{%
  \xpretobibdriver{reference}{\reference}{}{}%
  \xapptobibdriver{reference}{\end{tabularx}\vspace{2mm}}{}{}%  
   
}
  
\defbibenvironment{tablebib}
  { \setlength{\parindent}{0pt}%
    \renewcommand*{\labelnamepunct}{}%
    \patchdrivers}
  {}
  {}  
\newcommand*{\VPprintbibliography}{\printbibliography[env=tablebib]}

Ссылки на ГОСТы заисываю в виде

@Reference{ГОСТ_12.3.019,
  _stdintroduced = {01.07.1981},
  heading        = {ГОСТ~12.3.019---80},
  hyphenation    = {russian},
  media          = {text},
  publisher      = {Издательство стандартов},
  specdata       = {Госстандарт СССР, постановление № 1751 от 18.04.1980},
  title          = {Система стандартов безопасности труда. Испытания и измерения электрические. Общие требования безопасности},
  year           = {1987},
}

И сразу вопрос про сортировку, ГОСТ говорит, что сначала межгосударственные стандарты, потом государственные, и т.д.
Как я понимаю мне необходимо добавить некоторое поле для сортировки, и в него вписывать к какому типу данный ГОСТ относиться.
Примерно вот так:
\printbibliography[type=book,heading=subbibliography,title={Book Sources}]

Если кто знает как настроить, просьба поделиться советом.
Надо так-же как на скриншоте
2021-04-16_15-08-38

@matsievskiysv
Copy link

В другом ГОСТ оформление сделано обычным списком. Ваш совет требует использовать именно таблицу?

@vibro-pribor
Copy link
Author

В другом ГОСТ оформление сделано обычным списком. Ваш совет требует использовать именно таблицу?

Да, именно таблицей. Военные, они такие военные....

@matsievskiysv
Copy link

Горизонтальные линии можно попробовать добавить через команду \citesetup или через prenote/postnote.

Про сортировку по ключевым словам написано здесь.

@vibro-pribor
Copy link
Author

Горизонтальные линии можно попробовать добавить через команду \citesetup или через prenote/postnote.

Про сортировку по ключевым словам написано здесь.

Да, я попробовал но получаются разрывы в таблице..

@matsievskiysv
Copy link

Вы можете архив с примером скинуть?

@vibro-pribor
Copy link
Author

Я задал этот вопрос на tex.stackexchange.com и там предложили использовать пакет biblatex-ext-tabular для вывода библиографии в виде таблицы. Остаётся только понять как сортировать в таком варианте и думаю вопрос будет решён. По результату отпишусь тут.

@vibro-pribor
Copy link
Author

Пример возможного решения заданного вопроса.

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[russian]{babel}
\usepackage{csquotes}

\usepackage[
  style=gost-authoryear,
  backend=biber,
  language=autobib,
  autolang=other,
  clearlang=true,
  defernumbers=true,
  sortcites=true,
  sorting=none,
  mcite=false,
  doi=false,
  isbn=false,
  singletitle=true,
  labeltitle=true,
  uniquename=true]{biblatex}
\usepackage{biblatex-ext-tabular}

\usepackage{longtable}
\usepackage{array}
\newcolumntype{L}[1]{%
  >{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}p{#1}}

\defbibtabular{bibtabular}
  {\setlength{\LTpre}{0pt}%
   \setlength{\LTpost}{0pt}%
   \renewcommand*{\arraystretch}{2}%
   \begin{longtable}{%
     @{}
     |L{\dimexpr0.35\textwidth-\tabcolsep\relax}|
      L{\dimexpr0.65\textwidth-\tabcolsep\relax}|
     @{}}
     \hline
     \textbf{Standard designator} & \textbf{Name}\\
     \hline
     \endfirsthead}
  {\end{longtable}}
  {\anchorlang{\printfield[default]{heading}}
   & \plainlang{\printfield{title}}\\\hline}


\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=entrysubtype, match=\regexp{\Astandard\Z}, final]
      \step[fieldset=presort, fieldvalue=AA]
    }
    \map{
      \step[fieldsource=entrysubtype, match=\regexp{\Aotherstandard\Z}, final]
      \step[fieldset=presort, fieldvalue=BB]
    }
    \map{
      \step[fieldsource=entrysubtype, match=\regexp{\Ainterstatestandard\Z}, final]
      \step[fieldset=presort, fieldvalue=CC]
      \step[fieldset=title, null]
    }
  }
}

\begin{filecontents}{\jobname.bib}
@reference{QR_160D,
  heading      = {QR---160D},
  title        = {Environmental conditions and test procedures for airborne equipment},
  entrysubtype = {standard},
}
@reference{QR_160A,
  heading      = {QR---160A},
  title        = {Environmental conditions and test procedures for airborne equipment},
  entrysubtype = {standard},
}
@reference{QR_160F,
  heading      = {QR---160F},
  title        = {Environmental conditions and test procedures for airborne equipment},
  entrysubtype = {standard},
}
@reference{ASTM_D2196_18,
  heading      = {ASTM D2196---18},
  title        = {Standard Test Methods for Rheological Properties
                  of Non-Newtonian Materials by Rotational Viscometer},
  entrysubtype = {otherstandard},
}
@reference{ASTM_D2196_19,
  heading      = {ASTM D2196---19},
  title        = {Standard Test Methods for Rheological Properties
                  of Non-Newtonian Materials by Rotational Viscometer},
  entrysubtype = {otherstandard},
}
@reference{ASTM_D2196_11,
  heading      = {ASTM D2196---11},
  title        = {Standard Test Methods for Rheological Properties
                  of Non-Newtonian Materials by Rotational Viscometer},
  entrysubtype = {otherstandard},
}
@reference{ASTM_D2196_48,
  heading     = {ASTM D2196---48},
  title       = {Standard Test Methods for Rheological Properties
                 of Non-Newtonian Materials by Rotational Viscometer},
  entrysubtype = {otherstandard},
}
@reference{IEC_60063,
  heading      = {IEC~60063},
  title        = {Marking codes for resistors and capacitors},
  entrysubtype = {interstatestandard},
}
\end{filecontents}
\addbibresource{\jobname.bib}
%\addbibresource{biblatex-examples.bib}


\begin{document}
Lorem \cite{QR_160D, ASTM_D2196_18, ASTM_D2196_11, ASTM_D2196_19}

\cite{QR_160A, ASTM_D2196_11, ASTM_D2196_48, QR_160F,IEC_60063}

\newrefcontext[sorting=nty]
\printbibtabular[type=reference]
\end{document}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants