von MoeWe » Sa 21. Sep 2019, 15:19
Dieses Verhalten ist recht tief in biblatex-dw verankert und hat primär zwei Ursachen.
Zunächst nutzt biblatex-dw an einigen Stellen einen internen Zitierbefehl, der von biblatex als ein solcher erkannt wird und daher auch den pageref/backref-Tracker auslöst. Das führt dazu, dass die Elterneinträge so aufgeführt werden, als sein sie an den Stellen zitiert worden, an denen die Kindeintträge zitiert wurden. Da dieser interne Zitierbefehl auch im Literaturverzeichnis genutzt wird, wird die Seitenzahl auch immer aufgeführt. Die Lösung hier ist es, biblatex explizit zu sagen, dass dieser interne Befehl nicht getrackt werden soll.
Dann stellt sich aber heraus, dass bei den Kindeinträgen die Seiten, auf denen sie zitiert wurden, nicht aufgeführt werden, wenn xref im Spiel ist. Das ist tatsächlich so im Driver festgelegt. Ob das nur ein Versehen oder Absicht war, kann ich nicht sagen. Aber mit etwas Aufwand und der großzügigen Hilfe von
xpatch können wir die relevanten Makros in den relevanten Stellen hinzufügen.
\documentclass[ngerman]{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=footnote-dw,xref=true,backref=true,minxrefs=1]{biblatex}
\usepackage{xpatch}
\DeclareCiteCommand{\bbx@xref}
{\boolfalse{backtracker}}
{\usebibmacro{cite:xref}}
{}
{}
\makeatletter
\newcommand*{\getbackpageref}[1]{%
\xpatchbibdriver{#1}
{\usebibmacro{pages}}
{\usebibmacro{pages}%
\newunit\newblock
\usebibmacro{pageref}}
{}
{\blx@error
{Failed to patch driver for @#1}
{The driver for @#1 does not have the expected format.\MessageBreak
Are you really using biblatex-dw?}}
}
\makeatother
\forcsvlist{\getbackpageref}{inbook,incollection,inproceedings,inreference}
%\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@incollection{Edelmann.2001,
xref = {Boch.2001},
author = {Edelmann, Heidrun},
title = {Der Umgang mit dem Rückstand. Deutschlands Automobilindustrie in der Zwischenkriegszeit},
pages = {41--48},
bookpagination = {page},
publisher = {Steiner},
isbn = {3-515-07866-5},
editor = {Boch, Rudolf},
booktitle = {Geschichte und Zukunft der deutschen Automobilindustrie},
date = {2001},
address = {Stuttgart}
}
@book{Erhard.1962,
author = {Erhard, Ludwig},
date = {1962},
title = {Deutsche Wirtschaftspolitik: Der Weg der Sozialen Marktwirtschaft},
address = {Düsseldorf and Wien and Frankfurt a.\,Main},
publisher = {Econ and Knapp},
shorttitle = {Wirtschaftspolitik}
}
@incollection{Erhard.1962b,
xref = {Erhard.1962},
author = {Erhard, Ludwig},
title = {Der Weg in die Zukunft: Rede vor der 14.\,Vollversamm\-lung des Wirtschaftsrates des Vereinigten Wirtschaftsgebietes am 21.\,April 1948 in Frankfurt a.\,M.},
pages = {37--61},
bookpagination = {page},
publisher = {Econ and Knapp},
booktitle = {Deutsche Wirtschaftspolitik},
date = {1962},
address = {Düsseldorf and Wien and Frankfurt a.\,Main},
bookauthor = {Erhard, Ludwig}
}
@incollection{Stieniczka.2001,
xref = {Boch.2001},
author = {Stieniczka, Norbert},
title = {Vom fahrbaren Untersatz zur Chromkarosse mit innerer Sicherheit~--
der Wandel der Nutzeranforderungen an das Automobil in den 50er und 60er Jahren},
pages = {177--200},
bookpagination = {page},
publisher = {Steiner},
isbn = {3-515-07866-5},
editor = {Boch, Rudolf},
booktitle = {Geschichte und Zukunft der deutschen Automobilindustrie},
date = {2001},
address = {Stuttgart}
}
@collection{Boch.2001,
date = {2001},
title = {Geschichte und Zukunft der deutschen Automobilindustrie:
Tagung im Rahmen der Chemnitzer Begegnungen 2000},
address = {Stuttgart},
publisher = {Steiner},
isbn = {3-515-07866-5},
editor = {Boch, Rudolf},
shorttitle = {Automobilindustrie}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
test test\footcite{Stieniczka.2001} test test\footcite{Edelmann.2001} test test\footcite{Erhard.1962b}
\printbibliography
\end{document}
Dieses Verhalten ist recht tief in [tt]biblatex-dw[/tt] verankert und hat primär zwei Ursachen.
Zunächst nutzt [tt]biblatex-dw[/tt] an einigen Stellen einen internen Zitierbefehl, der von [tt]biblatex[/tt] als ein solcher erkannt wird und daher auch den [tt]pageref[/tt]/[tt]backref[/tt]-Tracker auslöst. Das führt dazu, dass die Elterneinträge so aufgeführt werden, als sein sie an den Stellen zitiert worden, an denen die Kindeintträge zitiert wurden. Da dieser interne Zitierbefehl auch im Literaturverzeichnis genutzt wird, wird die Seitenzahl auch immer aufgeführt. Die Lösung hier ist es, [tt]biblatex[/tt] explizit zu sagen, dass dieser interne Befehl nicht getrackt werden soll.
Dann stellt sich aber heraus, dass bei den Kindeinträgen die Seiten, auf denen sie zitiert wurden, nicht aufgeführt werden, wenn [tt]xref[/tt] im Spiel ist. Das ist tatsächlich so im Driver festgelegt. Ob das nur ein Versehen oder Absicht war, kann ich nicht sagen. Aber mit etwas Aufwand und der großzügigen Hilfe von [p]xpatch[/p] können wir die relevanten Makros in den relevanten Stellen hinzufügen.
[code]\documentclass[ngerman]{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=footnote-dw,xref=true,backref=true,minxrefs=1]{biblatex}
\usepackage{xpatch}
\DeclareCiteCommand{\bbx@xref}
{\boolfalse{backtracker}}
{\usebibmacro{cite:xref}}
{}
{}
\makeatletter
\newcommand*{\getbackpageref}[1]{%
\xpatchbibdriver{#1}
{\usebibmacro{pages}}
{\usebibmacro{pages}%
\newunit\newblock
\usebibmacro{pageref}}
{}
{\blx@error
{Failed to patch driver for @#1}
{The driver for @#1 does not have the expected format.\MessageBreak
Are you really using biblatex-dw?}}
}
\makeatother
\forcsvlist{\getbackpageref}{inbook,incollection,inproceedings,inreference}
%\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@incollection{Edelmann.2001,
xref = {Boch.2001},
author = {Edelmann, Heidrun},
title = {Der Umgang mit dem Rückstand. Deutschlands Automobilindustrie in der Zwischenkriegszeit},
pages = {41--48},
bookpagination = {page},
publisher = {Steiner},
isbn = {3-515-07866-5},
editor = {Boch, Rudolf},
booktitle = {Geschichte und Zukunft der deutschen Automobilindustrie},
date = {2001},
address = {Stuttgart}
}
@book{Erhard.1962,
author = {Erhard, Ludwig},
date = {1962},
title = {Deutsche Wirtschaftspolitik: Der Weg der Sozialen Marktwirtschaft},
address = {Düsseldorf and Wien and Frankfurt a.\,Main},
publisher = {Econ and Knapp},
shorttitle = {Wirtschaftspolitik}
}
@incollection{Erhard.1962b,
xref = {Erhard.1962},
author = {Erhard, Ludwig},
title = {Der Weg in die Zukunft: Rede vor der 14.\,Vollversamm\-lung des Wirtschaftsrates des Vereinigten Wirtschaftsgebietes am 21.\,April 1948 in Frankfurt a.\,M.},
pages = {37--61},
bookpagination = {page},
publisher = {Econ and Knapp},
booktitle = {Deutsche Wirtschaftspolitik},
date = {1962},
address = {Düsseldorf and Wien and Frankfurt a.\,Main},
bookauthor = {Erhard, Ludwig}
}
@incollection{Stieniczka.2001,
xref = {Boch.2001},
author = {Stieniczka, Norbert},
title = {Vom fahrbaren Untersatz zur Chromkarosse mit innerer Sicherheit~--
der Wandel der Nutzeranforderungen an das Automobil in den 50er und 60er Jahren},
pages = {177--200},
bookpagination = {page},
publisher = {Steiner},
isbn = {3-515-07866-5},
editor = {Boch, Rudolf},
booktitle = {Geschichte und Zukunft der deutschen Automobilindustrie},
date = {2001},
address = {Stuttgart}
}
@collection{Boch.2001,
date = {2001},
title = {Geschichte und Zukunft der deutschen Automobilindustrie:
Tagung im Rahmen der Chemnitzer Begegnungen 2000},
address = {Stuttgart},
publisher = {Steiner},
isbn = {3-515-07866-5},
editor = {Boch, Rudolf},
shorttitle = {Automobilindustrie}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
test test\footcite{Stieniczka.2001} test test\footcite{Edelmann.2001} test test\footcite{Erhard.1962b}
\printbibliography
\end{document}[/code]