Richtige Methode zum Einfügen nicht nummerierter Kapitel in eine kapitelweise Bibliographie mithilfe von Biblatex

Richtige Methode zum Einfügen nicht nummerierter Kapitel in eine kapitelweise Bibliographie mithilfe von Biblatex

Ich habe Beispiele 3.11.4aus der biblatexDokumentation verwendet, um am Ende meiner Arbeit eine Bibliographie für die einzelnen Kapitel zu erstellen. Das funktioniert prima, bis ich versuche, meine Einleitung in ein unnummeriertes Kapitel zu verwandeln. Dann erscheint die Einleitung nicht in der Bibliographie. Hier ist ein MWE:

\documentclass{book}

\usepackage[sorting = none, style = numeric, refsegment = chapter, cite reset = chapter]{bib latex}
\usepackage{nameref}

\defbibheading{bibintoc}{%
  \addcontentsline{toc}{chapter}{\bibname}%
  \section*{References for Chapter \ref{refsegment:\therefsection\therefsegment} - \nameref{refsegment:\therefsection\therefsegment}}}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{A01,
  author = {Author, A.},
  year = {2001},
  title = {Alpha},
}
@misc{B02,
  author = {Buthor, B.},
  year = {2002},
  title = {Bravo},
}
@misc{C03,
  author = {Cuthor, C.},
  year = {2003},
  title = {Charlie},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}

\chapter*{Introduction}

\cite{A01}

\chapter{Chapter 1}

\cite{A01,B02}

\backmatter

\printbibheading
\bibbysegment[heading = bibintoc]

\end{document}

Ich habe eine Problemumgehung gefunden, indem ich einen Verweisabschnitt für die nicht nummerierte Einführung verwende. Hier ist ein MWE der Problemumgehung:

\documentclass{book}

\usepackage[sorting = none, style = numeric, refsegment = chapter, cite reset = chapter]{bib latex}
\usepackage{nameref}

\defbibheading{bibintoc}{%
  \addcontentsline{toc}{chapter}{\bibname}%
  \section*{References for Chapter \ref{refsegment:\therefsection\therefsegment} - \nameref{refsegment:\therefsection\therefsegment}}}

\defbibheading{bibintoc2}{%
  \addcontentsline{toc}{chapter}{\bibname}%
  \section*{References for the \nameref{refsection:\therefsection}}}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{A01,
  author = {Author, A.},
  year = {2001},
  title = {Alpha},
}
@misc{B02,
  author = {Buthor, B.},
  year = {2002},
  title = {Bravo},
}
@misc{C03,
  author = {Cuthor, C.},
  year = {2003},
  title = {Charlie},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}

\chapter*{Introduction}
\begin{refsection}
\cite{A01}
\end{refsection}
\chapter{Chapter 1}

\cite{A01,B02}

\backmatter

\printbibheading
\printbibliography[section=1,heading=bibintoc2]
\bibbysegment[heading = bibintoc]

\end{document}

Damit war ich zufrieden, bis ich eine unnummerierte Schlussfolgerung mit Zitaten hinzugefügt habe. Dann bricht der Code zusammen und biblatexgibt einen nested refsectionsFehler zurück. Hier ist das MWE dafür:

\documentclass{book}

\usepackage[sorting = none, style = numeric, refsegment = chapter, cite reset = chapter]{bib latex}
\usepackage{nameref}

\defbibheading{bibintoc}{%
  \addcontentsline{toc}{chapter}{\bibname}%
  \section*{References for Chapter \ref{refsegment:\therefsection\therefsegment} - \nameref{refsegment:\therefsection\therefsegment}}}

\defbibheading{bibintoc2}{%
  \addcontentsline{toc}{chapter}{\bibname}%
  \section*{References for the \nameref{refsection:\therefsection}}}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{A01,
  author = {Author, A.},
  year = {2001},
  title = {Alpha},
}
@misc{B02,
  author = {Buthor, B.},
  year = {2002},
  title = {Bravo},
}
@misc{C03,
  author = {Cuthor, C.},
  year = {2003},
  title = {Charlie},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}

\chapter*{Introduction}
\begin{refsection}
\cite{A01}
\end{refsection}
\chapter{Chapter 1}

\cite{A01,B02}

\chapter*{Conclusion}
\begin{refsection}
\cite{C03}
\end{refsection}

\backmatter

\printbibheading
\printbibliography[section=1,heading=bibintoc2]
\bibbysegment[heading = bibintoc]

\end{document}

Irgendwelche Ideen, wie man das lösen kann? Oder noch besser, wie man es \chapter*mit dem Beispiel 3.11.4des biblatexDokuments richtig implementiert?

Vielen Dank im Voraus für die Hilfe!

Antwort1

Sie können die folgenden Kapitel auch manuell aufrufen \newrefsegmentund ausführen:\citereset

\chapter*{Introduction}
\newrefsegment
\citereset

aber die Titel der Bibliographiesegmente können nicht einheitlich formatiert werden. Es gibt verschiedene Möglichkeiten, dies zu umgehen. Hier behandeln wir alles mit Patches für \chapterund \chapter*.

\documentclass{book}
\usepackage[sorting=none,refsegment=chapter,citereset=chapter]{biblatex}
\usepackage{nameref}

\makeatletter
% Extend biblatex's \chapter patch to \chapter* and save data for titles
\def\blx@refpatch@chapter#1{%
  \ifundef\chapter
    {\blx@err@nodocdiv{chapter}}
    {\pretocmd\@makechapterhead
       {#1%
        \csdef{subbib:\therefsection\therefsegment}{%
          Chapter~\ref{refsegment:\therefsection\therefsegment}}}
       {}{\blx@err@patch{\string\@makechapterhead}}%
     \pretocmd\@makeschapterhead
       {#1%
        \csdef{subbib:\therefsection\therefsegment}{%
          \nameref{refsegment:\therefsection\therefsegment}}}
       {}{\blx@err@patch{\string\@makeschapterhead}}}}
\makeatother
\defbibheading{subbibliography}{%
  \section*{References for \csuse{subbib:\therefsection\therefsegment}}}

\addbibresource{biblatex-examples.bib}
\begin{document}
\tableofcontents
\chapter*{Introduction}
\cite{reese}
\chapter{First chapter}
\cite{companion}
\chapter*{Unnumbered chapter}
\cite{glashow,weinberg}
\chapter{Second chapter}
\cite{glashow}
\chapter*{Conclusion}
\cite{reese}
\printbibheading[heading=bibintoc]
\bibbysegment[heading=subbibliography]
\end{document}

Bildbeschreibung hier eingeben

Dieser Ansatz funktioniert auch für kapitelweise Referenzabschnitte.

\documentclass{book}
\usepackage[sorting=none,refsection=chapter]{biblatex}
\usepackage{nameref}

\makeatletter
% Extend biblatex's \chapter patch to \chapter*, save data for titles
\def\blx@refpatch@chapter#1{%
  \ifundef\chapter
    {\blx@err@nodocdiv{chapter}}
    {\pretocmd\@makechapterhead
       {#1\csdef{subbib:\therefsection}{Chapter~\ref{refsection:\therefsection}}}
       {}{\blx@err@patch{\string\@makechapterhead}}%
     \pretocmd\@makeschapterhead
       {#1\csdef{subbib:\therefsection}{\nameref{refsection:\therefsection}}}
       {}{\blx@err@patch{\string\@makeschapterhead}}}}
\makeatother
\defbibheading{subbibliography}{\section*{References for \csuse{subbib:\therefsection}}}

\addbibresource{biblatex-examples.bib}
\begin{document}
...
\printbibheading[heading=bibintoc]
\bibbysection[heading=subbibliography]
\end{document}

Antwort2

Mit müssen Sie \endrefsegmentden letzten Abschnitt vor dem nicht nummerierten Kapitel „Fazit“ manuell beenden.

\documentclass{book}

\usepackage[sorting = none, style = numeric, refsegment = chapter, cite reset = chapter]{bib latex}
\usepackage{nameref}

\defbibheading{bibintoc}{%
  \addcontentsline{toc}{chapter}{\bibname}%
  \section*{References for Chapter \ref{refsegment:\therefsection\therefsegment} - \nameref{refsegment:\therefsection\therefsegment}}}

\defbibheading{bibintoc2}{%
  \addcontentsline{toc}{chapter}{\bibname}%
  \section*{References for the \nameref{refsection:\therefsection}}}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{A01,
  author = {Author, A.},
  year = {2001},
  title = {Alpha},
}
@misc{B02,
  author = {Buthor, B.},
  year = {2002},
  title = {Bravo},
}
@misc{C03,
  author = {Cuthor, C.},
  year = {2003},
  title = {Charlie},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}

\chapter*{Introduction}
\begin{refsection}
\cite{A01}
\end{refsection}
\chapter{Chapter 1}

\cite{A01,B02}

\endrefsegment

\chapter*{Conclusion}
\begin{refsection}
\cite{C03}
\end{refsection}

\backmatter

\printbibheading
\printbibliography[section=1,heading=bibintoc2]
\bibbysegment[heading = bibintoc]
\printbibliography[section=2,heading=bibintoc2]

\end{document}

Bildbeschreibung hier eingeben

Dies löst zwar Ihr unmittelbares Problem, aber Ihre Problemumgehung, bei der Sie s für die Einleitung und den Schluss verwenden, refsectionführt zu völlig unabhängigen Bibliografiebezeichnungen für diese Kapitel (beachten Sie, dass der Arbeit von C. Cuthor im Schluss die Bezeichnung „1“ zugewiesen wird). Die folgende Lösung funktioniert nur mit refsegments (und erreicht dadurch für das gesamte Dokument eindeutige Bezeichnungen):

  • Verwenden Sie nicht die mit Sternchen markierte Version \chapter*, sondern\chapter Auchfür die Einleitung und das Fazit. Dadurch refsegmentwerden den Kapiteln (positiv) Nummern zugewiesen und die jeweiligen Verweise können mit ausgedruckt werden \bibbysegment.

  • Verwenden Sie und \frontmatter, um Einleitung und Schluss zu nicht nummerierten Kapiteln zu machen. (Verwenden Sie eigentlich anstelle von , um die Umstellung auf römische Seitennummerierung zu vermeiden.)\mainmatter\backmatter\boolfalse{@mainmatter}\frontmatter

  • Deklarieren Sie neue Zähler, um die Werte \therefsegmentnach dem Vorspann bzw. Hauptteil zu speichern, und verwenden Sie diese Zähler in einer neuen Definition der bibintoc2Überschrift, um das unterschiedliche Format für Vorspann-/Haupt-/Nachspann-Referenzen zu erreichen.


\documentclass{book}

\usepackage[sorting=none,style =numeric,refsegment=chapter,citereset=chapter]{biblatex}
\usepackage{nameref}

\newcounter{segmentendfront}
\newcounter{segmentendmain}

\defbibheading{bibintoc2}{%
  \addcontentsline{toc}{chapter}{\refname}%
  \section*{\refname\ for
    \ifnumgreater{\therefsegment}{\value{segmentendfront}}{%
      \ifnumgreater{\therefsegment}{\value{segmentendmain}}{%
        the
      }{%
        Chapter~\ref{refsegment:\therefsection\therefsegment} --
      }%
    }{%
      the
    }%
    \nameref{refsegment:\therefsection\therefsegment}%
  }%
}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@misc{A01,
  author = {Author, A.},
  year = {2001},
  title = {Alpha},
}
@misc{B02,
  author = {Buthor, B.},
  year = {2002},
  title = {Bravo},
}
@misc{C03,
  author = {Cuthor, C.},
  year = {2003},
  title = {Charlie},
}
\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}

\boolfalse{@mainmatter}% instead of \frontmatter, which would also switch
    %to Roman page numbering

\chapter{Introduction}

\cite{A01}

\mainmatter
\setcounter{segmentendfront}{\therefsection\therefsegment}

\chapter{First chapter}

\cite{A01,B02}

\chapter{Second chapter}

\cite{B02}

\backmatter
\setcounter{segmentendmain}{\therefsection\therefsegment}

\chapter{Conclusion}

\cite{C03}

\printbibheading
\bibbysegment[heading=bibintoc2]

\end{document}

Bildbeschreibung hier eingeben

Antwort3

Ich denke, Sie können Folgendes tun:

\chapter*{Introduction}
\begin{refsegment}
\cite{A01}
\end{refsegment}

Edit: Das Problem mit dem Refsegment zum Abschluss ist nicht, dass es ein zweites Refsegment gibt, sondern dass bei der Option refsegment=chaptera- \chapterKommando ein \begin{refsegment}(oder etwas analoges) eingefügt wird und dieses nicht durch `\chapter* abgeschlossen wird.

Man könnte diesen Abschnitt auch vor dem Schluss abbrechen:

\endrefsegment

\chapter*{Conclusion}

(Eine bessere Lösung wäre, \chapter*auch einen Patch zu verwenden).

verwandte Informationen