%% 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/02/13]%%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} }