renewbibmacro funktioniert nicht

Erstellung eines Literaturverzeichnisses mit BibTeX, Biber, BibLaTeX und Co.


DerHarry
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Di 7. Jul 2015, 15:05

renewbibmacro funktioniert nicht

Beitrag von DerHarry »

Ich möchte im Literaturverzeichnis für Einträge mit dem keyword "primary" den journaltitle und das ", in:" entfernen.

Mein Code sieht wie folgt aus:
\AtEveryBibitem{%
	\ifkeyword{primary}%
		{\clearfield{journaltitle}}%
}%

\AtEveryBibitem{%
	\ifkeyword{primary}%
		{\renewbibmacro*{in:}{{}{\printtext{\bibstring{in}\intitlepunct}}}}%
}%
{\clearfield{journaltitle}} funktioniert wie gewünscht, renewbibmacro allerdings nicht. Was passiert ist, dass das Wort "primary" vor jede Zeile im Literaturverzeichnis geknallt wird.

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4304
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

Die Klammerung sieht falsch aus. Aber da du kein vollständiges Beispiel zeigst, kann man es nicht testen.

DerHarry
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Di 7. Jul 2015, 15:05

Beitrag von DerHarry »

Hier ein Minimalbeispiel:
\documentclass{article}

\usepackage[backend=biber,style=footnote-dw]{biblatex}

\AtEveryBibitem{%
	\ifkeyword{primary}%
		{\clearfield{journaltitle}}%
}%

\AtEveryBibitem{%
   \ifkeyword{primary}%
      {\renewbibmacro*{in:}{{}{\printtext{\bibstring{in}\intitlepunct}}}}%
}%

\usepackage{filecontents}

\begin{filecontents*}{\jobname.bib}
 @article{test,
  keywords = {primary},
  author = {Max Muster},
  date = {2006-09-20},
  title = {Test},
  journal = {Die Zeitung}
}
\end{filecontents*}

\addbibresource{\jobname.bib}

\begin{document}

\nocite{*}
\printbibliography

\end{document}
Zuletzt geändert von DerHarry am Mo 26. Sep 2016, 12:57, insgesamt 1-mal geändert.

Gast

Beitrag von Gast »

Dir fehlt bei \ifkeyword auf jeden Fall ein Klammerpaar, die Syntax ist
\ifkeyword{<keyword>}
  {<truecode>}
  {<falsecode>}
Wobei Du den die Anweisung für false ({<falsecode>}) nicht einfach weglassen kannst. (TeX versucht das auszugleichen, das kann sogar klappen, aber es kann auch furchtbar schiefgehen. - Im ersten Fall gehts wohl, bei renewbibmacro nicht mehr so gut.)

Bei dem renewbibmacro brauchst Du das \AtEveryBibitem aller Wahrscheinlichkeit nicht (es sei denn, Du möchtest, dass Zitate sich anders verhalten),
\renewbibmacro*{in:}{%
  \ifkeyword{primary}
    {}
    {\printtext{\bibstring{in}\intitlepunct}}}
wäre daher eine meiner Ansicht nach sinnvolle Alternative.

Ob das genau das tut, was Du Dir vorstellst, weiß ich nicht. Testen können wir das nur mit dem von Ulrike angefragten Minimalbeispiel.

Es sei noch kurz darauf hingewiesen, dass es mir spanisch vorkommt, bei bestimmten Quellen, das Journal zu unterdrücken. Besonders, wenn Du volume und so nicht entfernst. Vielleicht solltest Du das Problem anders angehen.

Gast

Beitrag von Gast »

Oh, wie schön, ich sehe gerade, dass unser Rufen nach einem vollständigen Beispiel erhört worden ist.

Ich würde Dir im Ganzen also
\documentclass{article}
\usepackage[backend=biber,style=footnote-dw]{biblatex}

\AtEveryBibitem{%
  \ifkeyword{primary}
    {\clearfield{journaltitle}}
    {}%
}%

\renewbibmacro*{in:}{%
  \ifkeyword{primary}
    {}
    {\printtext{\bibstring{in}\intitlepunct}}}

\usepackage{filecontents}

\begin{filecontents*}{\jobname.bib}
@article{test,
keywords = {primary},
author = {Max Muster},
date = {2006-09-20},
title = {Test},
journal = {Die Zeitung}
}
\end{filecontents*}

\addbibresource{\jobname.bib}

\begin{document}
\nocite{*}
\printbibliography
\end{document}
vorschlagen.

Der Sinn erschließt sich mir noch nicht ganz, aber OK.

Gast

Beitrag von Gast »

Es wäre übrigens sinnvoll, das Kästchen "BBcode in diesem Beitrag deaktivieren" nicht abzuhaken, sondern deaktiviert zu lassen! Sonst nützt die Markierung als Code nämlich leider nichts.

DerHarry
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Di 7. Jul 2015, 15:05

Beitrag von DerHarry »

Danke für die Antworten, es lag am fehlenden false bei if.

Ich hab es jetzt so gelöst:
\AtEveryBibitem{%
	\ifkeyword{primary}
		{\clearfield{journaltitle}}
		{}%
}%

\AtEveryBibitem{%
   \renewbibmacro*{in:}{%
  	\ifkeyword{primary}
    	{}
    	{\printtext{\bibstring{in}\intitlepunct}}}
	{}%
}%
Zum Sinn:

Ich benutze in meiner Arbeit mehrere Zeitungen, die ich im Text auch unterscheiden muss. Im Literaturverzeichnis gruppiere ich die jeweiligen Zeitungen aber unter eigenen Überschriften, weshalb die Angabe "in: Zeitung" redundant ist.

Danke!

Antworten