單一縮寫列表(首字母縮寫列表 + biblatex 速記列表)

單一縮寫列表(首字母縮寫列表 + biblatex 速記列表)

在我的論文中,我有兩個縮寫列表:1)透過某些表達方式的縮寫glossaries package(例如 APR = 年百分比)和 2)透過biblatex package.bib 文件內的速記法表示法律文件的縮寫(例如消費者保護法= CPA) 。

正如預期的那樣,如果我輸入表達式\printbiblist{shorthand}\printglossary[type=\acronymtype,style=long]我會得到兩個縮寫列表。

但是,我想要一個(統一的)。考慮到我使用兩個不同的包,可以這樣做嗎?

答案1

我不認為你可以讓兩個截然不同的套件以可以列印共享清單的方式一起工作。

但我們可以用 來偽造整件事情biblatex。我們將實現 an@acronym和 a@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]
    }
  }
}

它們不會出現在參考書目中,但會得到 a shorthand,因此它們會進入 s 列表shorthand

輸出控制為

\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}

範例輸出

相關內容