PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : BibLatex: authoryear + shorthand



slowfox
16-11-2010, 16:00
Ich versuche gerade den Authoryear-Stil und Shorthands nach meinen Wünschen miteinander arbeiten zu lassen. Das heißt, beim ersten Auftreten, egal ob mit cite, textcite oder parencite soll ergänzt werden "im Folgenden zitiert als ...". An allen weiteren Stellen soll dann nurnoch der Shorthand verwendet werden. Die Anpassungen für cite und parencite konnte ich bereits umsetzen, textcite macht mir noch Probleme: der shorthand wird derzeit doppelt dargestellt. Entferne ich die zweite Ausgabe, verliere ich auch die das optionale Argument umschließenden Klammern. Nun weiß ich nicht mehr weiter.


\begin{filecontents}{\jobname.bib}
@TECHREPORT{beispiel,
title = {Buchtitel},
author = {Autor, Vorname},
shorthand = {Trivialname},
institution = {Verlag},
year = {2010},
type = {Norm},
}

@TECHREPORT{beispiel2,
title = {Buchtitel},
author = {Autor, Vorname},
institution = {Verlag},
year = {2010},
type = {Norm},
}
\end{filecontents}

\documentclass[ngerman]{scrartcl}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{babel}

\usepackage[style=authoryear-comp,citetracker=true]{biblatex}
\bibliography{\jobname}

\renewbibmacro*{cite}{%
\ifciteseen
{\iffieldundef{shorthand}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldund ef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\addspace}}
{\printnames{labelname}%
\setunit{\nameyeardelim}}%
\usebibmacro{cite:labelyear+extrayear}}
{\usebibmacro{cite:shorthand}}}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldund ef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\addspace}}
{\printnames{labelname}%
\setunit{\nameyeardelim}}%
\usebibmacro{cite:labelyear+extrayear}
\usebibmacro{shorthandintro}}}

\renewbibmacro*{textcite}{%
\ifciteseen
{\ifnameundef{labelname}
{\iffieldundef{shorthand}
{\usebibmacro{cite:label}%
\setunit{%
\global\booltrue{cbx:parens}%
\addspace\bibopenparen}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\usebibmacro{cite:labelyear+extrayear}}
{\usebibmacro{cite:shorthand}}}
{\iffieldundef{shorthand}
{\printnames{labelname}%
\setunit{%
\global\booltrue{cbx:parens}%
\addspace\bibopenparen}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\usebibmacro{citeyear}}}
{\usebibmacro{cite:shorthand}%
\setunit{%
\global\booltrue{cbx:parens}%
\addspace\bibopenparen}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\usebibmacro{citeyear}}}
{\ifnameundef{labelname}
{\iffieldundef{shorthand}
{\usebibmacro{cite:label}%
\setunit{%
\global\booltrue{cbx:parens}%
\addspace\bibopenparen}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\usebibmacro{cite:labelyear+extrayear}}
{\usebibmacro{cite:shorthand}}}
{\printnames{labelname}%
\setunit{%
\global\booltrue{cbx:parens}%
\addspace\bibopenparen}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\usebibmacro{citeyear}}
\usebibmacro{shorthandintro}}}


\begin{document}

\textcite[3]{beispiel}

\textcite[3]{beispiel2}


\cite[3]{beispiel}

\textcite[3]{beispiel}

\parencite[3]{beispiel}


\cite[3]{beispiel2}

\textcite[3]{beispiel2}

\parencite[3]{beispiel2}

\printshorthands

\printbibliography

\end{document}

mechanicus
24-11-2010, 20:57
Hi,

hast du das Problem auch mit biblatex v1.0?

Gruß
Marco

slowfox
25-11-2010, 14:51
Moin Marco,

ich verwende bislang v0.9a und v0.9e, die v1.0 war mir bis eben noch nicht bekannt. Ich versuche mich mal an einem manuellen Update (Miktex hat die v1.0 noch nicht aufgenommen, sondern nutzt noch die v0.9e, da die neuset Version vom 16.11. ist, während die v1.0 scheinbar am 19.11. veröffentlicht wurde).

Hast Du denn die v1.0 diesbezüglich getestet?


Ciao, Marco

mechanicus
25-11-2010, 18:55
Hast Du denn die v1.0 diesbezüglich getestet?
Ja. Habe ja auch TexLive :D:D

Das Problem ist, dass ich zwar sehe, was rauskommt, aber ich bin mit den Namen und Trivialnamen durcheinander gekommen. :p

Gruß
Marco

voss
29-11-2010, 12:32
Ich versuche gerade den Authoryear-Stil und Shorthands nach meinen Wünschen miteinander arbeiten zu lassen. Das heißt, beim ersten Auftreten, egal ob mit cite, textcite oder parencite soll ergänzt werden "im Folgenden zitiert als ...". An allen weiteren Stellen soll dann nurnoch der Shorthand verwendet werden. Die Anpassungen für cite und textcite konnte ich bereits umsetzen, parencite macht mir noch Probleme: der shorthand wird derzeit doppelt dargestellt. Entferne ich die zweite Ausgabe, verliere ich auch die das optionale Argument umschließenden Klammern. Nun weiß ich nicht mehr weiter.


ist das noch aktuell für dich?

Herbert

slowfox
30-11-2010, 07:30
Ja, allerdings. Ich habe mir die v1.0 angesehen, aber auch dort erhalte ich nicht die gewünschte Darstellung.

voss
30-11-2010, 07:58
Ja, allerdings. Ich habe mir die v1.0 angesehen, aber auch dort erhalte ich nicht die gewünschte Darstellung.

Versuche mal diese Variante, wobei ich mir nicht ganz sicher bin,
ob ich dein Problem richtig verstanden habe.

Herbert


\documentclass[ngerman]{scrartcl}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@TECHREPORT{beispiel,
title = {Beispiel 1},
author = {Autor1, Vorname1},
shorthand = {Eins},
institution = {Verlag1},
year = {2010},
type = {Norm},
}

@TECHREPORT{beispiel2,
title = {Beispiel 2},
author = {Autor2, Vorname2},
institution = {Verlag2},
year = {2010},
type = {Norm},
}
\end{filecontents}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{babel}

\usepackage[style=authoryear-comp,citetracker,backend=biber]{biblatex}
\bibliography{\jobname}

\renewbibmacro*{cite}{%
\ifciteseen
{\iffieldundef{shorthand}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldund ef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\addspace}}
{\printnames{labelname}%
\setunit{\nameyeardelim}}%
\usebibmacro{cite:labelyear+extrayear}}
{\usebibmacro{cite:shorthand}}}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldund ef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\addspace}}
{\printnames{labelname}%
\setunit{\nameyeardelim}}%
\usebibmacro{cite:labelyear+extrayear}
\usebibmacro{shorthandintro}}}

\renewbibmacro*{textcite}{%
\ifciteseen
{\ifnameundef{labelname}
{\iffieldundef{shorthand}
{\usebibmacro{cite:label}%
\setunit{\global\booltrue{cbx:parens}\addspace\bib openparen}%
\ifnumequal{\value{citecount}}{1}{\usebibmacro{pre note}}{}%
\usebibmacro{cite:labelyear+extrayear}}
{\usebibmacro{cite:shorthand}}}
{\iffieldundef{shorthand}
{\printnames{labelname}%
\setunit{\global\booltrue{cbx:parens}\addspace\bib openparen}%
\ifnumequal{\value{citecount}}{1}{\usebibmacro{pre note}}{}%
\usebibmacro{citeyear}}}
{\usebibmacro{cite:shorthand}%
\setunit{\global\booltrue{cbx:parens}\addspace\bib openparen}%
\ifnumequal{\value{citecount}}{1}{\usebibmacro{pre note}}{}%
\printtext[mkbibparens]{\printfield{prenote}}%\usebibmacro{citeyear}
}}
{\ifnameundef{labelname}
{\iffieldundef{shorthand}
{\usebibmacro{cite:label}%
\setunit{\global\booltrue{cbx:parens}\addspace\bib openparen}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\usebibmacro{cite:labelyear+extrayear}}
{\usebibmacro{cite:shorthand}}}
{\printnames{labelname}%
\setunit{%
\global\booltrue{cbx:parens}%
\addspace\bibopenparen}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
%\usebibmacro{citeyear}}
\printtext{\printfield{year}}}
\usebibmacro{shorthandintro}}}

\begin{document}

textcite: \textcite[3]{beispiel}

textcite: \textcite[3]{beispiel2}


cite: \cite[3]{beispiel}

textcite: \textcite[3]{beispiel}

parencite: \parencite[3]{beispiel}


cite: \cite[3]{beispiel2}

textcite: \textcite[3]{beispiel2}

parencite: \parencite[3]{beispiel2}

\printshorthands

\printbibliography

\end{document}

slowfox
30-11-2010, 09:49
Zuersteinmal muss ich mich entschuldigen: In meinem Eingangsposting habe ich textcite und parencite verwechselt.

DAnke für deine Unterstützung Herbert. Dein Code löst das Problem des doppelten Shorthand bei textcite. Leider ist nun der Erstaufruf der Referenz fehlerhaft, d.h. dort wo Originaldarstellung und Shorthand miteinander verknüpft werden. Dort heißt es jetzt:

"textcite: Autor1 (Eins [im Folgenden zit. als Eins], S. 3)"

Es müsste aber lauten:

"textcite: Autor1 (2010 [im Folgenden zit. als Eins], S. 3)"

Hast Du dafür vielleicht auch eine Lösung?

voss
30-11-2010, 13:34
Zuersteinmal muss ich mich entschuldigen: In meinem Eingangsposting habe ich textcite und parencite verwechselt.

DAnke für deine Unterstützung Herbert. Dein Code löst das Problem des doppelten Shorthand bei textcite. Leider ist nun der Erstaufruf der Referenz fehlerhaft, d.h. dort wo Originaldarstellung und Shorthand miteinander verknüpft werden. Dort heißt es jetzt:

"textcite: Autor1 (Eins [im Folgenden zit. als Eins], S. 3)"

Es müsste aber lauten:

"textcite: Autor1 (2010 [im Folgenden zit. als Eins], S. 3)"

Hast Du dafür vielleicht auch eine Lösung?
sie oben die rote Änderung (vorletzte Zeile in \textcite}

Herbert

slowfox
30-11-2010, 16:05
Prima, Danke.

Aber ist ein Problem gelöst taucht das nächste auf. Bei zwei Veröffentlichungen eines Autors fehlt jetzt beim erstmaligen Aufruf der Citation mit textcite der Zusatz a und b...

voss
30-11-2010, 16:07
Prima, Danke.

Aber ist ein Problem gelöst taucht das nächste auf. Bei zwei Veröffentlichungen eines Autors fehlt jetzt beim erstmaligen Aufruf der Citation mit textcite der Zusatz a und b...

_Komplettes_ Beispiel; es ist nicht so, dass ich täglich biblatex mache ...

Herbert

slowfox
30-11-2010, 22:57
_Komplettes_ Beispiel


\documentclass[ngerman]{scrartcl}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@TECHREPORT{beispiel,
title = {Beispiel 1},
author = {Autor1, Vorname1},
shorthand = {Eins},
institution = {Verlag1},
year = {2010},
type = {Norm},
}

@TECHREPORT{beispiel2,
title = {Beispiel 2},
author = {Autor1, Vorname1},
institution = {Verlag2},
year = {2010},
type = {Norm},
}
\end{filecontents}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{babel}

\usepackage[style=authoryear-comp,citetracker,backend=biber]{biblatex}
\bibliography{\jobname}

\renewbibmacro*{cite}{%
\ifciteseen
{\iffieldundef{shorthand}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldund ef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\addspace}}
{\printnames{labelname}%
\setunit{\nameyeardelim}}%
\usebibmacro{cite:labelyear+extrayear}}
{\usebibmacro{cite:shorthand}}}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldund ef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\addspace}}
{\printnames{labelname}%
\setunit{\nameyeardelim}}%
\usebibmacro{cite:labelyear+extrayear}
\usebibmacro{shorthandintro}}}

\renewbibmacro*{textcite}{%
\ifciteseen
{\ifnameundef{labelname}
{\iffieldundef{shorthand}
{\usebibmacro{cite:label}%
\setunit{\global\booltrue{cbx:parens}\addspace\bib openparen}%
\ifnumequal{\value{citecount}}{1}{\usebibmacro{pre note}}{}%
\usebibmacro{cite:labelyear+extrayear}}
{\usebibmacro{cite:shorthand}}}
{\iffieldundef{shorthand}
{\printnames{labelname}%
\setunit{\global\booltrue{cbx:parens}\addspace\bib openparen}%
\ifnumequal{\value{citecount}}{1}{\usebibmacro{pre note}}{}%
\usebibmacro{citeyear}}}
{\usebibmacro{cite:shorthand}%
\setunit{\global\booltrue{cbx:parens}\addspace\bib openparen}%
\ifnumequal{\value{citecount}}{1}{\usebibmacro{pre note}}{}%
\printtext[mkbibparens]{\printfield{prenote}}%\usebibmacro{citeyear}
}}
{\ifnameundef{labelname}
{\iffieldundef{shorthand}
{\usebibmacro{cite:label}%
\setunit{\global\booltrue{cbx:parens}\addspace\bib openparen}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\usebibmacro{cite:labelyear+extrayear}}
{\usebibmacro{cite:shorthand}}}
{\printnames{labelname}%
\setunit{%
\global\booltrue{cbx:parens}%
\addspace\bibopenparen}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
%\usebibmacro{citeyear}}
\printtext{\printfield{year}}}
\usebibmacro{shorthandintro}}}

\begin{document}

textcite: \textcite[3]{beispiel}

textcite: \textcite[3]{beispiel2}


cite: \cite[3]{beispiel}

textcite: \textcite[3]{beispiel}

parencite: \parencite[3]{beispiel}


cite: \cite[3]{beispiel2}

textcite: \textcite[3]{beispiel2}

parencite: \parencite[3]{beispiel2}

\printshorthands

\printbibliography

\end{document}

voss
01-12-2010, 08:52
\documentclass[ngerman]{scrartcl}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@TECHREPORT{beispiel,
title = {Beispiel 1},
author = {Autor1, Vorname1},
shorthand = {Eins},
institution = {Verlag1},
year = {2010},
type = {Norm},
}

@TECHREPORT{beispiel2,
title = {Beispiel 2},
author = {Autor1, Vorname1},
institution = {Verlag2},
year = {2010},
type = {Norm},
}
\end{filecontents}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{babel}

\usepackage[style=authoryear-comp,citetracker,backend=biber]{biblatex}
\bibliography{\jobname}

\renewbibmacro*{cite}{%
\ifciteseen
{\iffieldundef{shorthand}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldund ef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\addspace}}
{\printnames{labelname}%
\setunit{\nameyeardelim}}%
\usebibmacro{cite:labelyear+extrayear}}
{\usebibmacro{cite:shorthand}}}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldund ef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\addspace}}
{\printnames{labelname}%
\setunit{\nameyeardelim}}%
\usebibmacro{cite:labelyear+extrayear}
\usebibmacro{shorthandintro}}}

\renewbibmacro*{textcite}{%
\ifciteseen
{\ifnameundef{labelname}
{\iffieldundef{shorthand}
{\usebibmacro{cite:label}%
\setunit{\global\booltrue{cbx:parens}\addspace\bib openparen}%
\ifnumequal{\value{citecount}}{1}{\usebibmacro{pre note}}{}%
\usebibmacro{cite:labelyear+extrayear}}
{\usebibmacro{cite:shorthand}}}
{\iffieldundef{shorthand}
{\printnames{labelname}%
\setunit{\global\booltrue{cbx:parens}\addspace\bib openparen}%
\ifnumequal{\value{citecount}}{1}{\usebibmacro{pre note}}{}%
\usebibmacro{citeyear}}}
{\usebibmacro{cite:shorthand}%
\setunit{\global\booltrue{cbx:parens}\addspace\bib openparen}%
\ifnumequal{\value{citecount}}{1}{\usebibmacro{pre note}}{}%
\printtext[mkbibparens]{\printfield{prenote}}%\usebibmacro{citeyear}
}}
{\ifnameundef{labelname}
{\iffieldundef{shorthand}
{\usebibmacro{cite:label}%
\setunit{\global\booltrue{cbx:parens}\addspace\bib openparen}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\usebibmacro{cite:labelyear+extrayear}}
{\usebibmacro{cite:shorthand}}}
{\printnames{labelname}%
\setunit{%
\global\booltrue{cbx:parens}%
\addspace\bibopenparen}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
%\usebibmacro{citeyear}}
%\printtext{\printfield{year}}
\usebibmacro{cite:labelyear+extrayear}}
\usebibmacro{shorthandintro}}}

\begin{document}

textcite: \textcite[3]{beispiel}

textcite: \textcite[3]{beispiel2}


cite: \cite[3]{beispiel}

textcite: \textcite[3]{beispiel}

parencite: \parencite[3]{beispiel}


cite: \cite[3]{beispiel2}

textcite: \textcite[3]{beispiel2}

parencite: \parencite[3]{beispiel2}

\printshorthands

\printbibliography

\end{document}

ah gut, das Beispiel hätte ich auch selbst zaubern können, aber wenn man alles zwischen Tür und Angel macht, sieht man oft nicht das Problem. Ersetze oben das in ROT eingetragene.

Herbert

slowfox
01-12-2010, 11:05
Nochmals Danke Herbert! Jetzt scheiont alles so zu sein wie ich mir das wünsche. Danke!

slowfox
06-12-2010, 09:34
Eine ergänzende Frage hat sich gerade ergeben. Beim ersten Aufruf einer durch ein Shorthand verfügbar gemachten Literaturstelle wird der Zusatz "im Folgenden zit. als" ergänzt. An dieser Stelle möchte ich gerne eine andere Überleitung einfügen. Verantwortlich hierfür ist der BibliographyString citedas. Für diesen ist in der lbx-Datei von vornherein eine Lang- und eine Kurzfassung vorgesehen:

citedas = {{im Folgenden zitiert als}{im Folgenden zit\adddotspace als}}

Ein erster Schritt wäre es schon, wenn ich die Langfassung verwenden könnte. Noch lieber würde ich dem BibString einen anderen Text zuweisen. Der hierfür vorgesehene Befehl \DeclareBibliographyStrings{} ist jedoch nur in der lbx-Datei verfügbar. Muss ich jetzt die ngerman.lbx lokal überarbeiten, um citedas zu ändern, oder kann ich das doch irgendwie in der Dokumentenpreambel? (Der Umweg über das eintragsspezifische Feld shorthandintro kommt eher nicht in Frage, da ich in diesem Fall jhedem mit shorthand versehenen eintrag damit explizit das gewünschte citedas zuweisen müsse. Änderungen wären dann sehr aufwändig.)

Für Hinweise bin ich immer dankbar!

voss
06-12-2010, 09:52
Eine ergänzende Frage hat sich gerade ergeben. Beim ersten Aufruf einer durch ein Shorthand verfügbar gemachten Literaturstelle wird der Zusatz "im Folgenden zit. als" ergänzt. An dieser Stelle möchte ich gerne eine andere Überleitung einfügen. Verantwortlich hierfür ist der BibliographyString citedas. Für diesen ist in der lbx-Datei von vornherein eine Lang- und eine Kurzfassung vorgesehen:

citedas = {{im Folgenden zitiert als}{im Folgenden zit\adddotspace als}}

Ein erster Schritt wäre es schon, wenn ich die Langfassung verwenden könnte. Noch lieber würde ich dem BibString einen anderen Text zuweisen. Der hierfür vorgesehene Befehl \DeclareBibliographyStrings{} ist jedoch nur in der lbx-Datei verfügbar. Muss ich jetzt die ngerman.lbx lokal überarbeiten, um citedas zu ändern, oder kann ich das doch irgendwie in der Dokumentenpreambel? (Der Umweg über das eintragsspezifische Feld shorthandintro kommt eher nicht in Frage, da ich in diesem Fall jhedem mit shorthand versehenen eintrag damit explizit das gewünschte citedas zuweisen müsse. Änderungen wären dann sehr aufwändig.)

Für Hinweise bin ich immer dankbar!


\DefineBibliographyStrings{ngerman}{%
citedas = {Was auch immer \ldots\adddotspace}}


Herbert

domwass
06-12-2010, 10:13
Noch lieber würde ich dem BibString einen anderen Text zuweisen. Der hierfür vorgesehene Befehl \DeclareBibliographyStrings{} ist jedoch nur in der lbx-Datei verfügbar. Muss ich jetzt die ngerman.lbx lokal überarbeiten, um citedas zu ändern, oder kann ich das doch irgendwie in der Dokumentenpreambel?
Dafür gibt es den Befehl \DefineBibliographyStrings (siehe biblatex-Anleitung).

Gruß,
Dominik.-

slowfox
06-12-2010, 11:00
Danke Leute! Wer lesen kann ist klar im Vorteil. Ich habe die ganze Zeit "declare" und "define" verwechselt und wunderte mich über die Fehlermeldung. Das war dämlich von mir.