17 Stimmen

Wie kann ich mit LaTeX am Ende eines jeden Abschnitts ein Literaturverzeichnis erstellen?

Ich möchte das Literaturverzeichnis für jeden Abschnitt erstellen und am Ende des Abschnitts einfügen. Wenn ich dies im Moment tue, wird das vollständige Literaturverzeichnis erstellt und nach jedem Abschnitt eingefügt.

Gibt es eine Möglichkeit, dies zu bewerkstelligen?

Der Ratschlag ici dice

"Das chapterbib-Paket bietet eine Option sectionbib, die die Bibliographie in einem \section * \chapter * wenn es in jedem Kapitel eine Bibliographie Kapitel gibt. Diese Option wird nicht funktionieren wenn natbib ebenfalls geladen ist; stattdessen, fügen Sie die Option zu natbib hinzu. "

Ich verstehe nicht, was das bedeutet, und ich habe versucht, mit den Optionen zu experimentieren, von denen ich dachte, dass es sie gibt. Was bedeutet insbesondere "die Option zu natbib hinzufügen"?

Meine anschließende Frage (die sich entwickelte, nachdem meine erste Frage gelöst war) ist, dass zwischen den Verweisen und dem nächsten Abschnitt kein Seitenumbruch erfolgen soll.

Ich danke Ihnen für Ihre Hilfe.

12voto

rcollyer Punkte 10285

Wenn Sie Folgendes verwenden Biblatex wie für Zitieren von Artikeltiteln Sie können damit Bibliografien am Ende von Abschnitten oder Kapiteln erstellen oder sogar eine kombinierte Bibliografie erstellen, in der sie nach Kapitel/Abschnitt getrennt sind. Als Paket soll es "babelbib, bibtopic, bibunits, chapterbib, cite, inlinebib, mlbib, multibib, splitbib" ersetzen.

Sie können nach jedem Abschnitt ein Literaturverzeichnis einfügen, und zwar auf eine von drei Arten. Erstens können Sie den Text Ihres Abschnitts in ein \begin{refsection} / \end{refsection} Paar, als solches

\section{SomeSectionName}
\begin{refsection}
% your text goes here
\printbibliography
\end{refsection}
\section{NextSection}

Zweitens, nach jeder \section Anweisung setzen Sie eine \newrefsection Anweisung, die den vorherigen Abschnitt beendet und den neuen beginnt. Und, Sie stellen die nächste \section avec un \printbibliography Aussage, wieder. Schließlich gibt es eine refsection Paketoption, die entweder none , part , chapter , section ou subsection als Argument. Um Ihre bibliografischen Einträge pro Abschnitt in einer globalen Bibliografie zu gruppieren, verwenden Sie refsegment stattdessen mit \bibbysegment um alle Segmente der Reihe nach zu drucken. ( \bibbysection kann auf dieselbe Weise auch für Reflexionsabschnitte verwendet werden).

Ich weiß nicht, inwieweit Sie Ihren Text aufteilen müssen, wie in der Antwort von @Norman beschrieben, aber mit ein wenig Experimentieren können Sie es herausfinden.

10voto

Norman Ramsey Punkte 193087

Zusätzlich zu

\usepackage[sectionbib]{natbib}
\usepackage{chapterbib}

Sie müssen jeden Abschnitt in eine separate .tex-Datei einfügen, die Sie dann \include . Sie müssen Folgendes ausführen bibtex für jede .tex-Datei einzeln.

N.B. Verwendung \input statt \include vermeidet unerwünschte Seitenumbrüche, erzeugt aber nicht die .aux-Datei, die BibTeX für seine Arbeit benötigt. Ich habe mir die Definition von \include und ich sehe nicht, wie man die Funktion zum Umbrechen der Seite deaktivieren kann, außer durch Deaktivieren \clearpage vollständig. Sie könnten versuchen

\let\originalclearpage=\clearpage
\def\clearpage{\relax}

gleich nach Ihrem \begin{document} aber Sie müssen möglicherweise einige \originalclearpage von Hand ein.

2voto

Ich habe es noch nicht ausprobiert, aber wie ich gelesen habe, schlägt es vor:

\usepackage[sectionbib]{natbib} % Note the option in the optional argument
\usepackage{chapterbib}

Allerdings kann ich die richtige Reihenfolge dieser Zeilen nur vermuten.

2voto

Steve Punkte 1511

@celenius - wenn Sie den Seitenumbruch wirklich loswerden wollen, hier ist ein sehr schmutzig Trick, um es zu tun...

\\makeatletter
\\let\\O@@input@\\@input@
\\def\\@noclearpage{\\@ifnextchar\\clearpage\\@gobble\\relax}
\\def\\@input@#1{\\O@@input@{#1}\\@noclearpage}
\\let\\O@@include\\@include
\\def\\@include{\\expandafter\\@noclearpage\\O@@include}
\\let\\O@include\\include
\\def\\include{\\expandafter\\@noclearpage\\O@include}
\\makeatother

Grundsätzlich führen wir Operationen an den \include Makro, um all das loszuwerden \clearpage Instanzen, aber der sauberste Weg, dies zu tun, ist, wie Sie sehen können, immer noch wirklich schmutzig. Das ist furchtbar spröde und funktioniert wahrscheinlich nur für die article Klasse, wenn Sie also eine andere \documentclass dann haben Sie Pech gehabt. Ich habe dies im Wesentlichen durch die Aktivierung von \tracingcommands=1 y \tracingmacros=1 und das Greifen der .log Datei für \clearpage so dass ich alles, was davor aufgerufen wird, hacken könnte, um eine \@noclearpage .

Ich empfehle diese Lösung nicht - es wäre viel besser, zu prüfen, wie chapterbib funktionieren und sie auf die richtige Art und Weise zu beheben, ohne sich auf \include und die separate .aux Dateien generiert... aber ich bin sicher, dass das eine ziemlich schwierige Aufgabe wäre. Ich schätze, eine andere Lösung wäre, einen Befehl zu schreiben, der Folgendes emuliert \include Die Zerschlagung von .aux Dateien, ohne die Includes tatsächlich durchzuführen...


EDIT: Okay, hier ist ein Quickie

\\makeatletter
\\newenvironment{auxfile}\[1\]{\\relax
  \\ifnum\\@auxout=\\@partaux
    \\@latex@error{auxfile environments cannot be nested or \\string\\include d}
    \\@eha
  \\else\\@changeaux{#1}\\fi
}{\\immediate\\closeout\\@partaux\\let\\@auxout\\@mainaux}
\\def\\@changeaux#1{%
  \\immediate\\write\\@mainaux{\\string\\@input{#1.aux}}%
  \\let\\@auxout\\@partaux
  \\immediate\\openout\\@partaux#1.aux%
  \\immediate\\write\\@partaux{\\relax}}
\\makeatother

Dann können Sie einfach einfügen \begin{auxfile}{foo}...\end{auxfile} und es wird verwendet foo.aux anstelle der normalen .aux Datei. Diese ist vollständig kompatibel mit chapterbib . Ich glaube nicht, dass CTAN so etwas hat, also werde ich es vielleicht als Mini-Paket einreichen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X