.png)
В моей статье есть два списка сокращений: 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
поэтому они попадают в список shorthand
s.
Выход контролируется с помощью
\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}