
Ich möchte @misc-Einträgen in meiner Bibliographie weniger Gewicht verleihen, indem ich sie ans Ende hinter akademische Konferenzveröffentlichungen verschiebe. Ansonsten gefällt mir die Art und Weise, wie abbrvnat die Bibliographieeinträge präsentiert. Ich verwende auch natbib, um Nummernzitate und Komprimierungen zu erhalten.
Standardmäßig werden Zitate nach Autorennamen sortiert (was in Ordnung ist), und wenn kein Autorenname verfügbar ist, scheint es etwas anderes (Titel?) als Sortierfeld in der Bibliografie zu verwenden.
Was ist der einfachste Weg, alle @misc-Referenzen am Ende des Dokuments zu senden und dabei ihre relative Reihenfolge beizubehalten?
Ein Beispieldokument:
\documentclass[11pt]{article}
\usepackage[hyphens]{url}
\usepackage[numbers,sort&compress]{natbib}
\begin{document}
Articles: \cite{bogus, greenwade93}
Website: \cite{example}
\bibliographystyle{abbrvnat}
\bibliography{biblio}
\end{document}
\bibliographystyle{myabbrvnat}
\bibliography{biblio}
Beispielbiblio:
@misc{example,
title = {{Example.org Home Page}},
howpublished = {\url{http://example.org/}},
note = {Accessed: June 2017.}
}
@article{bogus,
aurhor = {Bogus Redwade},
title = {A Bogus Article},
year = {1993},
}
@article{greenwade93,
author = {George D. Greenwade},
title = {The {C}omprehensive {T}ex {A}rchive {N}etwork ({CTAN})},
year = {1993},
journal = {TUGBoat},
volume = {14},
number = {3},
pages = {342--351}
}
In diesem Beispiel möchte ich, dass die Website an das Ende der Liste verschoben wird. Wenn es mehrere Websites gibt, sollte ihre relative Reihenfolge beibehalten werden.
Antwort1
Sofern Sie bereit sind, die Bibliographiedatei zu ändern, können Sie den bekannten \noopsort
Workaround verwenden (siehehttps://tex.stackexchange.com/search?q=noopsort), um die sonstigen Einträge nach dem Rest zu sortieren. Da die Sortierung nach Autor erfolgt, sollten Sie auch das Titelfeld der sonstigen Einträge in Autor ändern. Für diese Lösung müssen Sie die .bst
-Datei nicht ändern.
Beispiel:
@PREAMBLE{ {\providecommand{\noopsort}[1]{}} }
@misc{example,
author = {{\noopsort{zzz-example}}{Example.org Home Page}},
howpublished = {\url{http://example.org/}},
note = {Accessed: June 2017.}
}
Ergebnis:
Alternativ biblatex
kann es verwendet werden, ohne die Bibliographiedatei zu ändern, indem separate Referenzabschnitte nach Typ gedruckt werden. Angepasst vonhttps://tex.stackexchange.com/a/6966:
\printbibliography[nottype=misc,title={References}]
\vspace{-6mm}
\printbibliography[heading=none,type=misc]
Kleines Problem hierbei ist, dass der zweite Abschnitt der Bibliographie, auch ohne Überschrift, immer noch zusätzlichen Leerraum einführt, der entfernt werden muss (beispielsweise durch eine Verneinung vspace
).
Antwort2
Ich habe einen Weg gefunden, aber dafür muss die BST-Datei bearbeitet werden. Das fühlt sich übertrieben an. Die BST-Datei scheint jedoch für die Sortierung verantwortlich zu sein.
Ich habe zunächst versucht, das zu ändern, was ich für den Schlüssel des Eintrags hielt, z. B. indem ich es @misc{foo,...}
in geändert habe @misc{z-foo,...}
, aber das hatte überhaupt keine Wirkung, also habe ich tiefer gegraben.
Schritt 1. Bearbeiten Sie die BST-Datei
- abbrvnat.bst in das Projektverzeichnis kopieren (
$ cp /usr/share/texlive/texmf-dist/bibtex/bst/natbib/abbrvnat.bst ./myabbrtnat.bst
) Beachten Sie, dass oben in der Datei steht: „Werke mit identischem Autor und Jahr werden zusätzlich nach dem Zitatschlüssel sortiert, um die natürliche Reihenfolge beizubehalten.“ Abbrvnat sortiert zuerst nach Autoren. Das bedeutet wahrscheinlich, dass es mit dem Tupel sortiert:
(author(s), year, key)
.Bearbeiten Sie die kopierte Datei:
- Fügen Sie im
ENTRY
Abschnitt nachkey
ein neues Feld mit dem Namensortkey
in einer eigenen Zeile hinzu. - Es gibt eine Funktion author.sort. Ich habe sie so geändert, dass sie das Feld „sortkey“ so verarbeitet, dass das Feld author überschrieben wird:
- Fügen Sie im
(einige Zitattypen sortieren nicht nach Autor (z. B. sortiert nach Herausgeber), daher muss dies je nach Ihrer Bibliografie möglicherweise an anderen Stellen repliziert werden)
FUNCTION {author.sort}
{ sortkey empty$
{ author empty$
{ key empty$
{ "to sort, need author or key in " cite$ * warning$
""
}
{ key sortify }
if$
}
{ author sort.format.names }
if$
}
{ sortkey sortify }
if$
}
Schritt 2. Verwenden Sie das modifizierte BST
In der Haupt-Latex-Datei: ändern Sie zu
\bibliographystyle{myabbrvnat}
Fügen Sie für jedes Bibliografieelement, dessen Reihenfolge geändert werden muss, ein Feld
sortkey
mit dem neuen Wert hinzu, der zur Bestimmung der Reihenfolge verwendet werden soll.Ich stelle dem Namen des Eintrags "zz-" voran, wenn ich ihn zuletzt senden möchte.
Im Text:
...
Website: F~\cite{example-f}, E~\cite{example-e}, A~\cite{example-a}
...
Und Bibliographie:
@misc{example-a,
sortkey = {axample}, % will go before others - starts with 'a'
title = {{Axample.org Home Page}},
howpublished = {\url{http://example.org/}},
}
@misc{example-e,
sortkey = {zzz-example}, % send to the back. prefix with 'zzz-'
title = {{Example.org Home Page}},
howpublished = {\url{http://example.org/}},
}
@misc{example-f,
sortkey = {zzz-fxample}, % send to the back. prefix with 'zzz-'
title = {{Fxample.org Home Page}},
howpublished = {\url{http://example.org/}},
}
Produziert: