Единый список сокращений (список сокращений + список сокращений biblatex)

Единый список сокращений (список сокращений + список сокращений biblatex)

В моей статье есть два списка сокращений: 1) Сокращения некоторых выражений glossaries package(например, APR = Annual Percentage Rate) и 2) Сокращения юридических документов с biblatex packageпомощью сокращений внутри файла .bib (например, Закон о защите прав потребителей = CPA).

Как и положено, если я вставлю выражения \printbiblist{shorthand}, то \printglossary[type=\acronymtype,style=long]получу два списка сокращений.

Однако я хочу иметь единый (унифицированный). Возможно ли это сделать, учитывая, что я использую два разных пакета?

решение1

Я не думаю, что можно заставить два совершенно разных пакета работать вместе таким образом, чтобы они могли распечатать общий список.

Но мы можем подделать все это с помощью biblatex. Мы реализуем @acronymи @glossaryтип. Функциональность — это очень ограниченная подделкаglossaries' набор функций. Идею, безусловно, можно значительно улучшить, поэтому это следует рассматривать как доказательство концепции.

Нам нужна новая модель данных (см.Как создать совершенно новые типы данных с помощью BibLaTeX/Biber?)

\ProvidesFile{fakeglossaries.dbx}[2016/02/24\space fake basic functionalities of the glossaries package using biblatex]
\DeclareDatamodelEntrytypes{glossary}
\DeclareDatamodelEntrytypes{acronym}
\DeclareDatamodelFields[type=field,datatype=literal]{
  name,
  plural,
  description,
  short,
  shortplural,
  long,
  longplural,
}

\DeclareDatamodelEntryfields[glossary]{
  name,
  plural,
  description,
}
\DeclareDatamodelEntryfields[acronym]{
  short,
  shortplural,
  long,
  longplural,
}

Затем нам нужно убедиться, что наши новые типы обрабатываются правильно.

\ExecuteBibliographyOptions[glossary,acronym]{skipbib=true}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \pertype{acronym}
      \step[fieldsource=short]
      \step[fieldset=shorthand, origfieldval]
    }
    \map{
      \pertype{glossary}
      \step[fieldsource=name]
      \step[fieldset=shorthand, origfieldval]
    }
  }
}

они не появляются в библиографии, но получают , shorthandпоэтому они попадают в список shorthands.

Выход контролируется с помощью

\DeclareFieldFormat[glossary]{name}{\ifcapital{\MakeCapital{#1}}{#1}}
\DeclareFieldFormat[glossary]{plural}{\ifcapital{\MakeCapital{#1}}{#1}}
\DeclareFieldFormat[glossary]{description}{\ifcapital{\MakeCapital{#1}}{#1}}

\DeclareFieldFormat[acronym]{short}{\mkbibacro{#1}}
\DeclareFieldFormat[acronym]{long}{\ifcapital{\MakeCapital{#1}}{#1}}
\DeclareFieldFormat[acronym]{longplural}{\ifcapital{\MakeCapital{#1}}{#1}}

\DeclareBibliographyDriver{acronym}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \printfield{long}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}}

\DeclareBibliographyDriver{glossary}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \printfield{description}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}}

\newbibmacro{fakegls}{%
  \ifentrytype{glossary}
    {\printfield{name}}
    {\ifentrytype{acronym}
       {\ifciteseen
          {\printfield{short}}
          {\printfield{long}}}}}

\newbibmacro{fakeglspl}{%
  \ifentrytype{glossary}
    {\iffieldundef{plural}
       {\printfield{name}s}
       {\printfield{plural}}}
    {\ifentrytype{acronym}
       {\ifciteseen
          {\iffieldundef{shortplural}
             {\printfield{short}s}
             {\printfield{shortplural}}}
          {\iffieldundef{longplural}
            {\printfield{long}s}
            {\printfield{longplural}}}}}}

И наконец, реализованы команды верхнего уровня.

\DeclareCiteCommand{\fakegls}
  {\usebibmacro{prenote}}
  {\usebibmacro{fakegls}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\fakeglspl}
  {\usebibmacro{prenote}}
  {\usebibmacro{fakeglspl}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\newrobustcmd*{\Fakegls}{\bibsentence\fakegls}
\newrobustcmd*{\Fakeglspl}{\bibsentence\fakeglspl}

МВЭ

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[british]{babel}
\usepackage{csquotes}
\usepackage{filecontents}

\begin{filecontents}{fakeglossaries.dbx}
\ProvidesFile{fakeglossaries.dbx}[2016/02/24\space fake basic functionalities of the glossaries package using biblatex]
\DeclareDatamodelEntrytypes{glossary}
\DeclareDatamodelEntrytypes{acronym}
\DeclareDatamodelFields[type=field,datatype=literal]{
  name,
  plural,
  description,
  short,
  shortplural,
  long,
  longplural,
}

\DeclareDatamodelEntryfields[glossary]{
  name,
  plural,
  description,
}
\DeclareDatamodelEntryfields[acronym]{
  short,
  shortplural,
  long,
  longplural,
}
\end{filecontents}

\usepackage[style=authoryear,backend=biber,citetracker,datamodel=fakeglossaries]{biblatex}

\begin{filecontents}{\jobname.bib}
@glossary{potato,
  name        = {potato},
  plural      = {potatoes},
  description = {starchy tuber},
}
@glossary{cauliflower,
  name        = {cauliflower},
  description = {Cabbage with a College Education},
}
@acronym{dm,
  short      = {DM},
  long       = {diagonal matrix},
  longplural = {diagonal matrices},
}
@acronym{lkw,
  short      = {LKW},
  shortplural= {LKW},
  long       = {Lastkraftwagen},
  longplural = {Lastkraftwagen},
}
\end{filecontents}
\addbibresource{biblatex-examples.bib}
\addbibresource{\jobname.bib}

\ExecuteBibliographyOptions[glossary,acronym]{skipbib=true}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \pertype{acronym}
      \step[fieldsource=short]
      \step[fieldset=shorthand, origfieldval]
    }
    \map{
      \pertype{glossary}
      \step[fieldsource=name]
      \step[fieldset=shorthand, origfieldval]
    }
  }
}

\DeclareFieldFormat[glossary]{name}{\ifcapital{\MakeCapital{#1}}{#1}}
\DeclareFieldFormat[glossary]{plural}{\ifcapital{\MakeCapital{#1}}{#1}}
\DeclareFieldFormat[glossary]{description}{\ifcapital{\MakeCapital{#1}}{#1}}

\DeclareFieldFormat[acronym]{short}{\mkbibacro{#1}}
\DeclareFieldFormat[acronym]{long}{\ifcapital{\MakeCapital{#1}}{#1}}
\DeclareFieldFormat[acronym]{longplural}{\ifcapital{\MakeCapital{#1}}{#1}}

\DeclareBibliographyDriver{acronym}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \printfield{long}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}}

\DeclareBibliographyDriver{glossary}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \printfield{description}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}}

\newbibmacro{fakegls}{%
  \ifentrytype{glossary}
    {\printfield{name}}
    {\ifentrytype{acronym}
       {\ifciteseen
          {\printfield{short}}
          {\printfield{long}}}}}

\newbibmacro{fakeglspl}{%
  \ifentrytype{glossary}
    {\iffieldundef{plural}
       {\printfield{name}s}
       {\printfield{plural}}}
    {\ifentrytype{acronym}
       {\ifciteseen
          {\iffieldundef{shortplural}
             {\printfield{short}s}
             {\printfield{shortplural}}}
          {\iffieldundef{longplural}
            {\printfield{long}s}
            {\printfield{longplural}}}}}}


\DeclareCiteCommand{\fakegls}
  {\usebibmacro{prenote}}
  {\usebibmacro{fakegls}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\fakeglspl}
  {\usebibmacro{prenote}}
  {\usebibmacro{fakeglspl}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\newrobustcmd*{\Fakegls}{\bibsentence\fakegls}
\newrobustcmd*{\Fakeglspl}{\bibsentence\fakeglspl}

\begin{document}
Lorem\footcite{sigfridsson,kant:kpv} ipsum

\Fakegls{potato}, \fakegls{dm}, \fakegls{dm}, \fakegls{lkw}, \fakegls{lkw}

\citereset \Fakeglspl{potato}, \fakeglspl{dm}, \fakeglspl{dm}, \fakeglspl{lkw}, \fakeglspl{lkw}

\printbiblist{shorthand}
\printbibliography
\end{document}

пример вывода

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