246 lines
7.2 KiB
Plaintext
246 lines
7.2 KiB
Plaintext
|
%% hgbbib.sty
|
||
|
%% Bibliography Setup
|
||
|
%% This file is part of the Hagenberg Thesis package for creating bachelors's and masters's theses
|
||
|
%% Author: Wilhelm Burger (wilbur@ieee.org)
|
||
|
%% GitHub: https://github.com/Digital-Media/HagenbergThesis
|
||
|
%% File encoding: ASCII
|
||
|
|
||
|
\ProvidesPackage{hgbbib}[2023/11/06]%%AUTO
|
||
|
|
||
|
\newcommand{\@bibstyle}{numeric-comp} %% default bibliography style is 'numeric-comp'
|
||
|
\DeclareOption{apa}{\renewcommand{\@bibstyle}{apa}}
|
||
|
\ProcessOptions\relax
|
||
|
|
||
|
\RequirePackage{xifthen}
|
||
|
|
||
|
%\usepackage[style=numeric-comp,backend=biber,bibencoding=auto]{biblatex}
|
||
|
\usepackage[style=\@bibstyle,backend=biber]{biblatex}
|
||
|
\ExecuteBibliographyOptions{
|
||
|
bibencoding=auto,
|
||
|
bibwarn=true,
|
||
|
sortcites=true,
|
||
|
defernumbers=true,
|
||
|
isbn=false,
|
||
|
doi=true,
|
||
|
backref=true,
|
||
|
backrefstyle=three}
|
||
|
|
||
|
\RequirePackage{csquotes} % recommended for biblatex
|
||
|
|
||
|
%% titles of reference section + 3 categories of references:
|
||
|
\newcommand{\@bibtitle}{Quellenverzeichnis}
|
||
|
\newcommand{\@bibtitleLiteratur}{Literatur}
|
||
|
\newcommand{\@bibtitleMedia}{Medien}
|
||
|
\newcommand{\@bibtitleOnline}{Online-Quellen}
|
||
|
\newcommand{\@bibtitleSoftware}{Software}
|
||
|
|
||
|
\ifthenelse{\equal{\hgb@MainLanguage}{english}}{%
|
||
|
\renewcommand{\@bibtitle}{References}
|
||
|
\renewcommand{\@bibtitleLiteratur}{Literature}
|
||
|
\renewcommand{\@bibtitleMedia}{Media}
|
||
|
\renewcommand{\@bibtitleOnline}{Online sources}
|
||
|
\renewcommand{\@bibtitleSoftware}{Software}
|
||
|
}{}
|
||
|
|
||
|
%% categories for a split bibliography (order of declaration is important!)
|
||
|
\DeclareBibliographyCategory{literature}
|
||
|
\DeclareBibliographyCategory{media}
|
||
|
\DeclareBibliographyCategory{software}
|
||
|
\DeclareBibliographyCategory{online}
|
||
|
|
||
|
%% headings for the bibliography categories
|
||
|
\defbibheading{literature}{%
|
||
|
\phantomsection%
|
||
|
\section*{\@bibtitleLiteratur}%
|
||
|
\addcontentsline{toc}{section}{\@bibtitleLiteratur}%
|
||
|
}
|
||
|
|
||
|
\defbibheading{media}{%
|
||
|
\pagebreak[3]%
|
||
|
\phantomsection%
|
||
|
\section*{\@bibtitleMedia}%
|
||
|
\addcontentsline{toc}{section}{\@bibtitleMedia}%
|
||
|
}
|
||
|
|
||
|
\defbibheading{online}{%
|
||
|
\pagebreak[3]%
|
||
|
\phantomsection%
|
||
|
\section*{\@bibtitleOnline}%
|
||
|
\addcontentsline{toc}{section}{\@bibtitleOnline}%
|
||
|
}
|
||
|
|
||
|
\defbibheading{software}{%
|
||
|
\pagebreak[3]%
|
||
|
\phantomsection%
|
||
|
\section*{\@bibtitleSoftware}%
|
||
|
\addcontentsline{toc}{section}{\@bibtitleSoftware}%
|
||
|
}
|
||
|
|
||
|
\defbibheading{noheader}[]{} % 'none' should be defined but isn't
|
||
|
|
||
|
%Assign a given bibliography entry to one of the defined categories.
|
||
|
\newcommand{\@AssignToBibCategory}[1]% argument 1: entry key
|
||
|
{\ifthenelse{%
|
||
|
\ifentrytype{online}\OR
|
||
|
\ifentrytype{www}}
|
||
|
{\addtocategory{online}{#1}}%
|
||
|
{\ifthenelse{%
|
||
|
\ifentrytype{movie}\OR
|
||
|
\ifentrytype{video}\OR
|
||
|
\ifentrytype{music}\OR
|
||
|
\ifentrytype{audio}\OR
|
||
|
\ifentrytype{image}}
|
||
|
{\addtocategory{media}{#1}}%
|
||
|
{\ifthenelse{%
|
||
|
\ifentrytype{software}\OR
|
||
|
\ifentrytype{electronic}}
|
||
|
{\addtocategory{software}{#1}}%
|
||
|
{\addtocategory{literature}{#1}}% else (default)
|
||
|
}}}
|
||
|
|
||
|
%Hook provided by biblatex.
|
||
|
\AtEveryCitekey{\@AssignToBibCategory{\thefield{entrykey}}}
|
||
|
|
||
|
%This is only a wrapper to \addbibresource to allow the use
|
||
|
%of the classic bibtex-workflow in the future.
|
||
|
\newcommand{\AddBibFile}[1]{
|
||
|
\addbibresource{#1}%
|
||
|
}
|
||
|
|
||
|
% Declare a source map so the sorting in \cite commands works across the bib categories
|
||
|
% The maps need to correspond to the entry types in the bib categories (which can't unfortunately used)
|
||
|
\DeclareSourcemap{
|
||
|
\maps[datatype=bibtex]{
|
||
|
\map{ % All entry types except for media, software and online
|
||
|
\pernottype{movie}
|
||
|
\pernottype{video}
|
||
|
\pernottype{music}
|
||
|
\pernottype{audio}
|
||
|
\pernottype{image}
|
||
|
\pernottype{software}
|
||
|
\pernottype{electronic}
|
||
|
\pernottype{online}
|
||
|
\pernottype{www}
|
||
|
\step[fieldset=presort, fieldvalue = {A}]
|
||
|
}
|
||
|
\map{ % media entry types
|
||
|
\pertype{movie}
|
||
|
\pertype{video}
|
||
|
\pertype{music}
|
||
|
\pertype{audio}
|
||
|
\pertype{image}
|
||
|
\step[fieldset=presort, fieldvalue = {B}]
|
||
|
}
|
||
|
\map{ % software entry types
|
||
|
\pertype{software}
|
||
|
\pertype{electronic}
|
||
|
\step[fieldset=presort, fieldvalue = {C}]
|
||
|
}
|
||
|
\map{ % online entry types
|
||
|
\pertype{online}
|
||
|
\pertype{www}
|
||
|
\step[fieldset=presort, fieldvalue = {D}]
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
%See http://www.jr-x.de/publikationen/latex/tipps/zeilenumbruch.html
|
||
|
\newenvironment{bibhyphenation}%
|
||
|
{\hyphenpenalty=2% (default 50)
|
||
|
\tolerance=9999% (default 200)
|
||
|
\exhyphenpenalty=2% (default 50)
|
||
|
\linepenalty=1% (default 10)
|
||
|
\setlength{\emergencystretch}{3em}%
|
||
|
% allow URL hyphenation at any character (definitions in biblatex.def)
|
||
|
\setcounter{biburlnumpenalty}{1}%
|
||
|
\setcounter{biburlucpenalty}{1}%
|
||
|
\setcounter{biburllcpenalty}{1}%
|
||
|
\biburlsetup}%
|
||
|
{}
|
||
|
|
||
|
% Currently the only public macro:
|
||
|
% \MakeBibliography ... creates a reference section split subsections (default)
|
||
|
% \MakeBibliography[nosplit] ... creates a one-piece reference section
|
||
|
\newcommand{\MakeBibliography}[1][]{
|
||
|
% opt. arg (#1): optional argument "nosplit" to get a 1-piece bibliography
|
||
|
%\clearpage
|
||
|
\ifthenelse{\equal{#1}{nosplit}}%
|
||
|
{% create a single bibliography with all entries:
|
||
|
\printbibheading[heading=bibintoc,title={\@bibtitle}]
|
||
|
\begin{bibhyphenation}
|
||
|
\printbibliography[heading=noheader]
|
||
|
\end{bibhyphenation}
|
||
|
}
|
||
|
{% split the bibliography using the predefined categories:
|
||
|
\printbibheading[heading=bibintoc,title={\@bibtitle}]
|
||
|
\begin{bibhyphenation}
|
||
|
\bibbycategory
|
||
|
\end{bibhyphenation}
|
||
|
}%
|
||
|
}
|
||
|
|
||
|
% Suppress unusual "In:" within journal article references.
|
||
|
% see http://tex.stackexchange.com/questions/10682/suppress-in-biblatex
|
||
|
\renewbibmacro{in:}{%
|
||
|
\ifentrytype{article}{}{%
|
||
|
\printtext{\bibstring{in}\intitlepunct}}}
|
||
|
|
||
|
|
||
|
% To suppress warnings related to missing biblatex "drivers":
|
||
|
\DeclareBibliographyAlias{video}{misc}
|
||
|
\DeclareBibliographyAlias{movie}{misc}
|
||
|
\DeclareBibliographyAlias{audio}{misc}
|
||
|
\DeclareBibliographyAlias{software}{misc}
|
||
|
\DeclareBibliographyAlias{electronic}{misc}
|
||
|
\DeclareBibliographyAlias{image}{misc}
|
||
|
\DeclareBibliographyAlias{standard}{misc}
|
||
|
\DeclareBibliographyAlias{legislation}{misc}
|
||
|
|
||
|
|
||
|
% Remove the contents of the url field if a doi field is present
|
||
|
% To avoid duplicate DOI URLs
|
||
|
\AtEveryBibitem{
|
||
|
\iffieldundef{doi}{}{\clearfield{url}}
|
||
|
}
|
||
|
|
||
|
|
||
|
% Use a semicolon between multiple entries in \cites
|
||
|
%\renewcommand*{\multicitedelim}{\addsemicolon\space} %% abandoned, affects regular \cite{a,b,c,..} entries too
|
||
|
|
||
|
% New command for multiple citations with supplementary texts
|
||
|
% usage: \mcite[text1]{key1}[text2]{key2}...[textN]{keyN}
|
||
|
% see https://tex.stackexchange.com/a/132981
|
||
|
\DeclareMultiCiteCommand{\mcite}[\mkbibbrackets]{\cite}{\addsemicolon\space}
|
||
|
|
||
|
|
||
|
% Macro to produce cites with no backref entries
|
||
|
% NOTE: \citenobr is DEPRECATED, use ... {\backtrackerfalse\cite{...}} instead!
|
||
|
\ifthenelse{\equal{\@bibstyle}{apa}}
|
||
|
{
|
||
|
\DeclareCiteCommand{\citenobr}% version for APA
|
||
|
{\PackageWarning{hgb}{Macro \protect\citenobr\space is deprecated, use \protect\backtrackerfalse\space instead!}
|
||
|
\backtrackerfalse%
|
||
|
\usebibmacro{prenote}}
|
||
|
{\usebibmacro{citeindex}%
|
||
|
\usebibmacro{cite}}%
|
||
|
{\multicitedelim}
|
||
|
{\usebibmacro{postnote}}
|
||
|
}
|
||
|
{
|
||
|
\DeclareCiteCommand{\citenobr}% version for numeric-comp et al.
|
||
|
{\PackageWarning{hgb}{Macro \protect\citenobr\space is deprecated, use \protect\backtrackerfalse\space instead!}
|
||
|
\usebibmacro{cite:init}%
|
||
|
\bibopenbracket%
|
||
|
\backtrackerfalse%
|
||
|
\usebibmacro{prenote}%
|
||
|
}
|
||
|
{\usebibmacro{citeindex}%
|
||
|
\usebibmacro{cite:comp}}
|
||
|
{}
|
||
|
{\usebibmacro{cite:dump}%
|
||
|
\usebibmacro{postnote}%
|
||
|
\bibclosebracket}
|
||
|
}
|
||
|
|
||
|
|
||
|
|