Ich möchte eine Vorlage für eine Publikationsliste erstellen, die dann von mehreren Personen verwendet werden kann. Die Idee ist, dass es eine Bib-Datei gibt, die alle Publikationen enthält. Peer-Review-Einträge werden mit dem Schlüsselwort = pr gekennzeichnet. Dann gibt es die Master-Datei vom Typ scriptreport, in die jeder seine Kapiteldatei integrieren kann, um die Publikationslisten aller in einer Datei zusammenzuführen. Die Kapiteldatei ist der Kern von allem und soll wiederverwendbar sein. Sie soll aus der Bib-Datei die Einträge für den jeweiligen Autor herausfiltern und in zwei Listen (peer-reviewed und non-peer-reviewed) ausdrucken. Mein Problem ist, dass ich nicht wirklich weiß, wie ich in diesem Fall nach Autor filtern soll. Hier die groben Codes der beiden Dateien:
Meister:
\documentclass[a4paper]{scrreprt}
\usepackage{biblatex}
\title{Publication list}
\addbibresource{sample.bib}
\begin{document}
\maketitle
\tableofcontents
\newpage
\include{Researcher}
\newpage
\end{document}
Kapitel:
\chapter*{Researcher}
\addcontentsline{toc}{chapter}{Researcher}
\nocite{*}
\printbibliography[keyword={pr}, title={Peer-reviewed}]
\nocite{*}
\printbibliography[notkeyword={pr}, title={Non-peer-reviewed}]
Antwort1
Das Filtern nach Namen ist nicht so einfach. Eine Möglichkeit wäre, eine Sourcemap und Regex zu verwenden, um Namen abzugleichen und Schlüsselwörter hinzuzufügen (z. B.biblatex: Trennung von Veröffentlichungen eines bestimmten Autors in der Bibliographie).
Eine andere Möglichkeit, String/Makro-Vergleiche zu verwenden, ist inbiblatex: Publikationen eines bestimmten Autors in den Referenzen dynamisch herausfiltern. Ähnlich zuBestimmten Autor mit Biblatex fett markierenIch würde die Verwendung von Hashes anstelle von String-/Makrovergleichen bevorzugen.
Das Folgende ist eine Anpassung meiner Antworthttps://tex.stackexchange.com/a/416416/35864für fettgedruckte Namen zur Namensfilterung. Der Großteil des Codes von dort kann einfach kopiert werden. Neu ist die Definition von zwei Bibchecks, um die Bibliographieeinträge nach beliebigen Bedingungen zu filtern.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[backend=biber,style=authoryear]{biblatex}
\addbibresource{biblatex-examples.bib}
\makeatletter
\def\fnblx@bibfile@name{\jobname -fnblx.bib}
\newwrite\fnblx@bibfile
\immediate\openout\fnblx@bibfile=\fnblx@bibfile@name
\immediate\write\fnblx@bibfile{%
@comment{Auto-generated file}\blx@nl}
\newcounter{fnblx@name}
\setcounter{fnblx@name}{0}
\newcommand*{\fnblx@writenametobib}[1]{%
\stepcounter{fnblx@name}%
\edef\fnblx@tmp@nocite{%
\noexpand\AfterPreamble{%
\noexpand\setbox0\noexpand\vbox{%
\noexpand\fnblx@getmethehash{fnblx@name@\the\value{fnblx@name}}}}%
}%
\fnblx@tmp@nocite
\immediate\write\fnblx@bibfile{%
@misc{fnblx@name@\the\value{fnblx@name}, author = {\unexpanded{#1}}, %
options = {dataonly=true},}%
}%
}
\AtEndDocument{%
\closeout\fnblx@bibfile}
\addbibresource{\fnblx@bibfile@name}
\newcommand*{\fnblx@namehashes}{}
\DeclareNameFormat{fnblx@hashextract}{%
\xifinlist{\thefield{hash}}{\fnblx@namehashes}
{}
{\listxadd{\fnblx@namehashes}{\thefield{hash}}}}
\DeclareCiteCommand{\fnblx@getmethehash}
{}
{\printnames[fnblx@hashextract][1-999]{author}}
{}
{}
\newtoggle{fnblx@tempa}
\DeclareIndexNameFormat{fnblx@checkfilternames}{%
\xifinlist{\thefield{hash}}{\fnblx@namehashes}
{\global\toggletrue{fnblx@tempa}}
{}}
\newcommand*{\addbfilternames}{\forcsvlist\fnblx@writenametobib}
\newcommand*{\resetfilternames}{\def\fnblx@namehashes{}}
\defbibcheck{filternames}{%
\global\togglefalse{fnblx@tempa}
\indexnames[fnblx@checkfilternames][1-999]{labelname}%
\iftoggle{fnblx@tempa}
{}
{\skipentry}}
\defbibcheck{notfilternames}{%
\global\togglefalse{fnblx@tempa}
\indexnames[fnblx@checkfilternames][1-999]{labelname}%
\iftoggle{fnblx@tempa}
{\skipentry}
{}}
\makeatother
\begin{document}
\cite{sigfridsson,worman,geer,knuth:ct:a,knuth:ct:b}
\addbfilternames{Emma Sigfridsson}
\printbibliography[check=filternames, title={Works by Emma Sigfridsson}]
\printbibliography[check=notfilternames, title={Works not by Emma Sigfridsson}]
\resetfilternames
\addbfilternames{{Knuth, Donald E.}}
\printbibliography[check=filternames, title={Works by Donald Knuth}]
\printbibliography[check=notfilternames, title={Works not by Donald Knuth}]
\end{document}
Die Benutzeroberfläche sollte mit den oben genannten Anwendungsbeispielen selbsterklärend sein. Wenn Sie Fragen zur Implementierung haben, die nicht durchhttps://tex.stackexchange.com/a/416416/35864, fragen Sie bitte vorher in den Kommentaren nach.