Seite 1 von 1

renewbibmacro funktioniert nicht

Verfasst: Mo 26. Sep 2016, 10:02
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.

Verfasst: Mo 26. Sep 2016, 11:41
von u_fischer
Die Klammerung sieht falsch aus. Aber da du kein vollständiges Beispiel zeigst, kann man es nicht testen.

Verfasst: Mo 26. Sep 2016, 12:22
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}

Verfasst: Mo 26. Sep 2016, 12:26
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.

Verfasst: Mo 26. Sep 2016, 12:30
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.

Verfasst: Mo 26. Sep 2016, 12:38
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.

Verfasst: Mo 26. Sep 2016, 12:52
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!