
In einem Abschnitt meines Dokuments sind die Referenzen nach ihren Schlüsselwörtern in Kategorien gruppiert. Jetzt möchte ich die Bibliographie für jeden Abschnitt basierend auf der Kategorie des Zitats drucken, z. B. eine Bibliographie für Artikel mit Schlüsselwort in
und eine Bibliographie mit Schlüsselwort out
. Aus ästhetischen Gründen möchte ich, dass die Bibliographien fortlaufend nummeriert werden, wie in diesem Textmodell
**In**
[1-1] a. “a”. In: a (a).
[1-2] c. “c”. In: c (c).
[1-3] e. “e”. In: e (e).
**Out**
[1-4] b. “b”. In: b (b).
[1-5] d. “d”. In: d (d).
Daher verwende ich das defernumbers
von biblatex
, um die Einträge fortlaufend zu nummerieren. Das Problem ist, dass dies dazu führt, dass die Nummerierung für jedes wieder bei 1 beginnt \printbibliography
.
Ich möchte defernumbers
across \printbibliography
per aktivieren \refsection
.
MWE
\documentclass{article}
\pagestyle{empty}
\usepackage{filecontents}
\begin{filecontents*}{test.bib}
@article{a,
title = {a},
author = {a},
journal = {a},
year = {a},
keywords = {in}
}
@article{b,
title = {b},
author = {b},
journal = {b},
year = {b},
keywords = {out}
}
@article{c,
title = {c},
author = {c},
journal = {c},
year = {c},
keywords = {in}
}
@article{d,
title = {d},
author = {d},
journal = {d},
year = {d},
keywords = {out}
}
@article{e,
title = {e},
author = {e},
journal = {e},
year = {e},
keywords = {in}
}
\end{filecontents*}
\usepackage[
defernumbers=true,
citestyle=numeric,
]{biblatex}
\defbibheading{subbibliography}[\bibname]{%
\subsubsection*{#1}
}
\addbibresource{test.bib}
\begin{document}
\section{Testing biblatex}
\refsection
\cite{a,b,c,d,e}
\printbibliography[
title={In},
prefixnumbers={\thesection-},
heading=subbibliography,
keyword=in
]
\printbibliography[
title={Out},
prefixnumbers={\thesection-},
heading=subbibliography,
keyword=out
]
\endrefsection
\section{Testing biblatex}
\refsection
\cite{a,b,c,d,e}
\printbibliography[
title={In},
prefixnumbers={\thesection-},
heading=subbibliography,
keyword=in
]
\printbibliography[
title={Out},
prefixnumbers={\thesection-},
heading=subbibliography,
keyword=out
]
\endrefsection
\end{document}
Ausgabe
Natürlich wird Kopfgeld ausgesetzt!
Antwort1
Dieses Problem ergibt sich aus einer inhärenten Funktionalität von biblatex
. Wie ausandere Fragen, biblatex
hat ein implizites Merkmal resetnumbers=true
, das angewendet wird, wenn Sie verwenden, prefixnumbers
um dem Label ein Präfix hinzuzufügen. Dies kann auf verschiedene Weise angegangen werden, aber nur durch Hacks, die das Problem entweder wirklich leicht verändern oder die Art und Weise ändern, wie das Präfix gehandhabt/angewendet wird.
Da die Absicht dieser Frage darin besteht, jede Bibliographie nach Abschnitten (oder Kapiteln usw.) zu unterteilen, ist es möglich, die prefixnumber
Einstellung global auf eine andere Weise anzuwenden und das implizite zu eliminieren, resetnumbers=true
das bei jedem angewendet wird \printbibliography
. Dazu definieren wir die Art und Weise, wie das Etikett gedruckt wird, neu und integrieren Folgendes \thesection
in das Format:
\DeclareFieldFormat{labelnumber}{\mkbibsecnum{#1}}
\newrobustcmd{\mkbibsecnum}[1]{\thesection-#1\relax}
Jedes Etikett wird als 1, 2, 3... gespeichert, ist aber mit der Abschnittsnummer formatiert, in der es beim Drucken erscheint. (Hinweis*: Da wir das Präfix auf diese Weise hinzufügen, \printbibliography
muss der Befehl im selben section
/ refsection
wie die Zitate erscheinen. Dies bedeutet insbesondere, dass Sie diese Methode nicht verwenden können, um am Ende eine kumulative Bibliographie mit mehreren refsection
durch s unterteilten s auszudrucken \printbibliography[section=1...]
.)
An dieser Stelle muss nur noch die Nummerierung an der entsprechenden Stelle (jeweils das erste Literaturverzeichnis refsection
) mit neu gesetzt werden \printbibliography[...resetnumbers=true]
.
Ergebnis
Das Ergebnis sieht wie folgt aus:
MWE
Ich habe einige Änderungen vorgenommen, um die Lösung effizienter zu machen als im ursprünglichen MWE.
refsection=section
(könnte auch ...=part
, ...=chapter
, usw. sein) wird global an übergeben, um nur Referenzen in jedem Abschnitt zu sammeln. Dies kann bei Bedarf durch / biblatex
ersetzt werden, um die Bibliographieelemente manuell zu partitionieren.\newrefsection
\endrefsection
defernumbers=true
wird beibehalten, um jede Unterbibliographie sequentiell zu sortieren.
Ich habe auch einige der Zitate auskommentiert, um die Wirkung der Nummerierung und refsection
s hervorzuheben.
Das modifizierte MWE demonstriert diese Lösung:
\documentclass{article}
\pagestyle{empty}
\usepackage{filecontents}
\begin{filecontents*}{test.bib}
@article{a,
title = {a},
author = {a},
journal = {a},
year = {a},
keywords = {in}
}
@article{b,
title = {b},
author = {b},
journal = {b},
year = {b},
keywords = {out}
}
@article{c,
title = {c},
author = {c},
journal = {c},
year = {c},
keywords = {in}
}
@article{d,
title = {d},
author = {d},
journal = {d},
year = {d},
keywords = {out}
}
@article{e,
title = {e},
author = {e},
journal = {e},
year = {e},
keywords = {in}
}
\end{filecontents*}
\usepackage[
defernumbers=true,
citestyle=numeric,
refsection=section % Each \section{...} starts a new refsection environment
]{biblatex}
% Format the labelnumber with \thesection prefix
\DeclareFieldFormat{labelnumber}{\mkbibsecnum{#1}}
\newrobustcmd{\mkbibsecnum}[1]{\thesection-#1\relax}
\defbibheading{subbibliography}[\bibname]{%
\subsubsection*{#1}
}
\addbibresource{test.bib}
\begin{document}
\section{Testing biblatex} % New refsection, too!
Cite a \cite{a};
Cite b \cite{b};
Cite c \cite{c};
\printbibliography[
title={In},
heading=subbibliography,
keyword=in,
resetnumbers=true % The first bibliography in each refsection needs its numbers manually reset
]
\printbibliography[
title={Out},
heading=subbibliography,
keyword=out
]
\section{Testing biblatex} % New refsection, too!
Cite b \cite{b};
Cite d \cite{d};
Cite e \cite{e}.
\printbibliography[
title={In},
heading=subbibliography,
keyword=in,
resetnumbers=true % The first bibliography in each refsection needs its numbers manually reset
]
\printbibliography[
title={Out},
heading=subbibliography,
keyword=out
]
\end{document}
*@Guidos Lösungdefiniert die gesamte Bibliografieumgebung neu und verwendet den Enumerate-Series-Zähler, um für bestimmte Labels weiterzuzählen, für andere jedoch nicht. Dies könnte bei diesem Problem funktionieren (und würde das Problem der kumulativen Bibliografie beheben), aber ich konnte den Code nicht mit der Abschnittsnummerierung kompilieren, wie es der OP verlangte.