Ich versuche etwas Ähnliches wie:Biblatex-Fußnoten am Rand In dem Maße, dass ich ihr Beispiel stehlen kann.
Ich möchte, dass der Text wie gewohnt im Haupttext zitiert wird und dann in der Seitenleiste der Name des Autors, dann das Datum und dann der Name des Werks.
Für die Zwecke dieses MWE verwende ich nur Basislatex \marginpar
. (In meiner eigentlichen Arbeit verwende ich Koma-Scrnote-Layer-Material. Aber das spielt keine Rolle, da ich versuche, BibLaTeX zu verstehen.)
MWE:
\documentclass{article}
\usepackage{blindtext}
% bib-file
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{Knu86,
author = {Knuth, Donald E.},
year = {1986},
title = {The \TeX book},
}
@BOOK{KandR,
AUTHOR = {Kernighan, Brian W. and Ritchie, Dennis M.},
TITLE = {{The C Programming Language Second Edition}},
PUBLISHER = {Prentice-Hall, Inc.},
YEAR = {1988},
}
\end{filecontents}
\usepackage[]{biblatex}
\addbibresource{\jobname}
\newcommand{\tcite}[1]{
\textcite{#1}
\marginpar{
\citeauthor{#1},
\citeyear{#1}.
\citetitle{#1}
}
}
% doc
\begin{document}
\blindtext
\tcite{Knu86}
\blindtext
\tcite{Knu86,KandR}
\blindtext
\end{document}
Man kann sehen, dass der blau eingekreiste Text perfekt ist. Aber der rot eingekreiste Text ist falsch, weil er nach Feldern sortiert ist. Der Grund dafür ist natürlich offensichtlich. Mein Befehl verarbeitet nicht pro Taste, sondern alle Tasten zusammen.
Mein aktueller Befehl ist:
\newcommand{\tcite}[1]{
\textcite{#1}
\marginpar{
\citeauthor{#1},
\citeyear{#1}.
\citetitle{#1}
}
}
Ich glaube, ich möchte es durch etwas ersetzen, das mit BibLaTeX erstellt wurde.\DeclareCiteCommand
Also habe ich es versucht:
\DeclareCiteCommand{\tcite}
{ % prenote
\usebibmacro{prenote}%
}
{ %loopcode
\printnames{author}%
\marginpar{
\printnames{author},
\printfield{year}.
\printfield{title}
}
}
{ %sepcode
\multicitedelim%
}
{\usebibmacro{postnote}}
Das funktioniert. Wir können sehen, dass sowohl die blauen als auch die roten Kreise in Ordnung sind, soweit sie getrennt sind. Aber ich profitiere nicht von der Formatierung der Autorennamen (z. B. dass sie basierend auf meinen Einstellungen nur auf den Nachnamen gekürzt werden). Und da ich sie nicht verwendet, \textcite
sondern nur eingefügt habe printnames{author}
, profitiere ich auch dort nicht von der Formatierung.
Das liegt (nehme ich an) daran, dass ich für diese Dinge die Low-Level-Befehle verwendet habe. Wie kann ich High-Level-Befehle verwenden, die Stil/Konfiguration berücksichtigen?
Antwort1
Sie sollten keine hochrangigen Befehle wie \citeauthor
in einem verwenden \DeclareCiteCommand
. Dies ist mit möglich \citeauthor{\thefield{entrykey}}
, aber keine gute Idee.
Verwenden Sie stattdessen einfach die Bibmacros, die für\citeauthor
\newbibmacro{sidecite}{%
\printnames{labelname}%
\setunit{\printdelim{nametitledelim}}%
\printfield[citetitle]{labeltitle}%
\setunit{\addperiod\space}%
\printfield{year}}
\textcite
Da Sie in Ihrem Beispiel von neu erstellen wollten numeric
, habe ich mich für entschieden.
\documentclass{article}
\usepackage{blindtext}
% bib-file
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{Knu86,
author = {Knuth, Donald E.},
year = {1986},
title = {The \TeX book},
}
@BOOK{KandR,
AUTHOR = {Kernighan, Brian W. and Ritchie, Dennis M.},
TITLE = {{The C Programming Language Second Edition}},
PUBLISHER = {Prentice-Hall, Inc.},
YEAR = {1988},
}
\end{filecontents}
\usepackage[]{biblatex}
\newbibmacro{sidecite}{%
\printnames{labelname}%
\setunit{\printdelim{nametitledelim}}%
\printfield[citetitle]{labeltitle}%
\setunit{\addperiod\space}%
\printfield{year}}
\makeatletter
\DeclareCiteCommand{\cbx@textcite}
{\usebibmacro{textcite:init}}
{\usebibmacro{citeindex}%
\usebibmacro{textcite}%
\setunit{}%
\marginpar{\usebibmacro{sidecite}}%
\setunit{%
\ifbool{cbx:parens}
{\bibcloseparen\global\boolfalse{cbx:parens}}
{}%
\textcitedelim}}
{}
{\usebibmacro{textcite:postnote}}
\makeatother
\addbibresource{\jobname.bib}
% doc
\begin{document}
\blindtext
\textcite{Knu86}
\blindtext
\textcite{Knu86,KandR}
\blindtext
\end{document}
Mit authoryear
sind die Dinge einfacher
\documentclass{article}
\usepackage{blindtext}
% bib-file
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{Knu86,
author = {Knuth, Donald E.},
year = {1986},
title = {The \TeX book},
}
@BOOK{KandR,
AUTHOR = {Kernighan, Brian W. and Ritchie, Dennis M.},
TITLE = {{The C Programming Language Second Edition}},
PUBLISHER = {Prentice-Hall, Inc.},
YEAR = {1988},
}
\end{filecontents}
\usepackage[style=authoryear]{biblatex}
\newbibmacro{sidecite}{%
\printnames{labelname}%
\setunit{\printdelim{nametitledelim}}%
\printfield[citetitle]{labeltitle}%
\setunit{\addperiod\space}%
\printfield{year}}
\DeclareCiteCommand{\tcite}
{\usebibmacro{prenote}}%
{\usebibmacro{citeindex}%
\usebibmacro{cite}%
\marginpar{\usebibmacro{sidecite}}}
{\multicitedelim}
{\usebibmacro{postnote}}
\addbibresource{\jobname.bib}
% doc
\begin{document}
\blindtext
\tcite{Knu86}
\blindtext
\tcite{Knu86,KandR}
\blindtext
\end{document}
Antwort2
\usebibmacro{<macroname>}
ermöglicht Ihnen, ein Bib-Makro in einem aufzurufen DeclareCiteCommand
. Es erlaubt Ihnen jedoch nicht, etwas aufzurufen, das selbst mit definiert wurde, DeclareCiteCommand
also kein \usebibmacro{citeauthor}
.
Der neue Code könnte also lauten:
\DeclareCiteCommand{\tcite}%
{\usebibmacro{prenote}}% prenote
{ %loopcode
\usebibmacro{cite}%
\marginpar{\usebibmacro{cite}, \printfield{title} \\
}
}
{\multicitedelim}% sepcode
{\usebibmacro{postnote}}
Wenn Sie dies mit einem interessanteren Zitierstil in Biblatex ausführen,
\usepackage[citestyle=authoryear]{biblatex}
erhalten Sie: