![單一縮寫列表(首字母縮寫列表 + biblatex 速記列表)](https://rvso.com/image/328824/%E5%96%AE%E4%B8%80%E7%B8%AE%E5%AF%AB%E5%88%97%E8%A1%A8%EF%BC%88%E9%A6%96%E5%AD%97%E6%AF%8D%E7%B8%AE%E5%AF%AB%E5%88%97%E8%A1%A8%20%2B%20biblatex%20%E9%80%9F%E8%A8%98%E5%88%97%E8%A1%A8%EF%BC%89.png)
在我的論文中,我有兩個縮寫列表: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}