Umstieg von bibtex auf biblatex

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


lennnox1
Forum-Anfänger
Forum-Anfänger
Beiträge: 14
Registriert: Mi 8. Mär 2017, 17:22

Umstieg von bibtex auf biblatex

Beitrag von lennnox1 »

Hallo,

ich schreibe gerade meine Masterarbeit und möchte das Literaturverzeichnis mit biblatex gestalten.
Mein Problem hängt mit den Label zusammen. Ich habe es geschafft, dass ich im Label verschiedene Trennzeichen nutze als im Text darunter. Also bei Quellen mit einem Autor soll das Label [Name] bei zwei Autoren [Name1 und Name2] und bei mehr als 2 Autoren [Name1 et. al]. Im Beispiel funktioniert das eigentlich alles, nur manche Labels starten mit einem Leerzeichen. Also [Name et. al] und bei den anderen beiden [ Name] und [ Name1 und Name2].
Ich hoffe ich habe mein Problem genau genug beschrieben :). Bin ein ziemlicher Anfänger, habe jedoch versucht die einzelnen Befehle durch Kommentare zu erklären.
Vielen Dank schon mal im Voraus!
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[backend=biber,citestyle=iso-authoryear,bibstyle=authortitle,sorting=nty,dashed=false,%
    maxcitenames=2,maxnames=2,natbib=true,maxbibnames=99,uniquelist=false, uniquename=false]{biblatex}
\usepackage{filecontents}		
	%Autoren Namen in Kapitälchen
\AtBeginBibliography{% 
\renewcommand*{\mkbibnamefamily}[1]{\textsc{#1}}}
%Sortierung der Namen
\DeclareNameAlias{sortname}{last-first}
%Trennzeichen zwischen den Namen
\renewcommand*{\multinamedelim}{\addsemicolon\space}
\renewcommand*{\finalnamedelim}{\addsemicolon\space}
%Einschub
\makeatletter
\defbibenvironment{bibliography}
{\list{\printtext[labelnumberwidth]{%
    \printfield{prefixnumber}%
    \printfield{labelnumber}}}
{\setlength{\bibhang}{0pt}%
\setlength{\leftmargin}{\bibhang}%
\setlength{\itemindent}{-\leftmargin}%
\setlength{\itemsep}{\bibitemsep}%
\setlength{\parsep}{\bibparsep}}}
{\endlist}
{\item}
\makeatother

\newcounter{maxlabelnames}
\setcounter{maxlabelnames}{2}

\DeclareNameFormat{biblabel}{%
  \ifthenelse{\value{listtotal}>\themaxlabelnames}
    {\ifthenelse{\value{listcount}=1}
      {\namepartfamily \addspace \bibstring{andothers}}
      {}%
    }
    {
      \ifthenelse{\value{listcount}=1}
        {\namepartfamily}
        {\ifthenelse{\value{listcount}<\value{listtotal}}
          {\multinamedelim \namepartfamily}
          {\bibstring{and}\addspace\namepartfamily }%
        }%
    }%
}

\renewbibmacro{begentry}{%
\textbf{[\printnames[biblabel]{labelname}~%
           \printfield{labelyear}%
           \printfield{extrayear}]}\\}


\DefineBibliographyStrings{ngerman}{andothers={et\ al\adddot}}

\begin{filecontents}{biblatextest.bib}
@misc{A01,
  author = {Schmidt, A. and Schneider, B.},
  year = {2001},
  title = {Alpha},
}
@misc{A02,
  author = {Meier, A. and Mueller, B. and J, Kurt},
  year = {2001},
  title = {Alpha},
}
@misc{A03,
  author = {Lens,Markus},
  year = {2001},
  title = {Alpha},
}
\end{filecontents}

\addbibresource{biblatextest.bib}

\begin{document}
\nocite{*}

\printbibliography[title=Literaturverzeichnis]

\end{document}

Gast

Beitrag von Gast »

Ich habe das ganze mal etwas umgebaut. Einige Ansätze erschienen mir etwas merkwürdig. Insbesondere hast Du von iso-authoryear nichts benutzt, daher bin ich zu citestyle=authoryear gewechselt.
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{csquotes}
\usepackage[backend=biber,citestyle=authoryear,bibstyle=authortitle,sorting=nty,dashed=false,%
    maxcitenames=2,maxbibnames=99,uniquelist=false, uniquename=false, natbib=true]{biblatex}
\usepackage{filecontents}      
\AtBeginBibliography{\renewcommand*{\mkbibnamefamily}[1]{\textsc{#1}}}
\DeclareNameAlias{sortname}{family-given}

\setlength{\bibhang}{0pt}% wirklich nur wenns denn sein muss

\AtBeginBibliography{%
  \renewcommand*{\multinamedelim}{\addsemicolon\space}%
  \renewcommand*{\finalnamedelim}{\multinamedelim}}

% Siehe http://tex.stackexchange.com/q/11827/35864, plus ein paar Modifikationen
\newcounter{mymaxcitenames}
\AtBeginDocument{%
  \setcounter{mymaxcitenames}{\value{maxnames}}%
}

\makeatletter
\renewbibmacro*{begentry}{%
  \printtext[brackets]{\printtext[bold]{%
    \begingroup
    \renewcommand*{\multinamedelim}{\addcomma\space}%
    \renewcommand*{\finalnamedelim}{%
      \ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
      \addspace\bibstring{and}\space}%
    \csuse{blx@hook@cite}%
    \csuse{blx@hook@citekey}%
    \citetrackerfalse\pagetrackerfalse\backtrackerfalse
    \defcounter{maxnames}{\value{mymaxcitenames}}%
    \usebibmacro{cite}%
    \endgroup
    }}%
  \newline
}
\makeatother

\DefineBibliographyStrings{ngerman}{andothers={et\addabbrvspace al\adddot}}

\begin{filecontents}{\jobname.bib}
@misc{A01,
  author = {Schmidt, A. and Schneider, B.},
  year = {2001},
  title = {Alpha},
}
@misc{A02,
  author = {Meier, A. and Mueller, B. and J, Kurt},
  year = {2001},
  title = {Alpha},
}
@misc{A03,
  author = {Lens,Markus},
  year = {2001},
  title = {Alpha},
}
\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}
\cite{A01,A02,A03}

\printbibliography[title=Literaturverzeichnis]
\end{document}

lennnox1
Forum-Anfänger
Forum-Anfänger
Beiträge: 14
Registriert: Mi 8. Mär 2017, 17:22

Beitrag von lennnox1 »

Vielen Dank deine Lösung läuft perfekt! :D
Ich habe noch eine Frage und zwar wie kann ich den Platz zwischen zwei Einträgen erhöhen?

MfG

Gast

Beitrag von Gast »

\setlength{\bibitemsep}{\itemsep}
Natürlich kannst Du das auch vergrößern: \setlength{\bibitemsep}{2\itemsep} oder irgendetwas anderes eingeben: \setlength{\bibitemsep}{0.2cm}

lennnox1
Forum-Anfänger
Forum-Anfänger
Beiträge: 14
Registriert: Mi 8. Mär 2017, 17:22

Beitrag von lennnox1 »

Danke auch das hat super geklappt. Ich versuche mich gerade daran den String bei Url und Urldate zu ändern. Die Vorgabe von meinem Professor ist wie folgt:

[Wenz 1998]

WENZ, Karin: Formen der Mündlichkeit und Schriftlichkeit in digitalen Medien. In: Linguistik Online, 1. April 2000 [Zugriff am: 25. Mai 2000]. Verfügbar unter: http://viadrina.euv-frankfurt-o.de/~wjournal/wenz.htm


Mein Ist-Zustand ist jedoch, dass das Zugriffsdatum am Ende kommt und die Strings passen nicht.

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag von Bartman »

Gib bitte den Quelltext für Deinen Literatureintrag an, damit man nicht raten muss, was wozu gehört.

Gast

Beitrag von Gast »

Probier es mal mit
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{csquotes}
\usepackage[backend=biber,citestyle=authoryear,bibstyle=authortitle,sorting=nty,dashed=false,%
    maxcitenames=2,maxbibnames=99,uniquelist=false, uniquename=false, natbib=true, urldate=comp]{biblatex}
\usepackage{filecontents}      
\AtBeginBibliography{\renewcommand*{\mkbibnamefamily}[1]{\textsc{#1}}}
\DeclareNameAlias{sortname}{family-given}

\setlength{\bibhang}{0pt}% wirklich nur wenns denn sein muss

\AtBeginBibliography{%
  \renewcommand*{\multinamedelim}{\addsemicolon\space}%
  \renewcommand*{\finalnamedelim}{\multinamedelim}}

% Siehe http://tex.stackexchange.com/q/11827/35864, plus ein paar Modifikationen
\newcounter{mymaxcitenames}
\AtBeginDocument{%
  \setcounter{mymaxcitenames}{\value{maxnames}}%
}

\makeatletter
\renewbibmacro*{begentry}{%
  \printtext[brackets]{\printtext[bold]{%
    \begingroup
    \renewcommand*{\multinamedelim}{\addcomma\space}%
    \renewcommand*{\finalnamedelim}{%
      \ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
      \addspace\bibstring{and}\space}%
    \csuse{blx@hook@cite}%
    \csuse{blx@hook@citekey}%
    \citetrackerfalse\pagetrackerfalse\backtrackerfalse
    \defcounter{maxnames}{\value{mymaxcitenames}}%
    \usebibmacro{cite}%
    \endgroup
    }}%
  \newline
}
\makeatother

\DefineBibliographyStrings{ngerman}{%
  andothers = {et\addabbrvspace al\adddot},
  urlseen = {Zugriff am},
  urlfrom = {verfügbar unter},
}

\renewbibmacro*{issue+date}{%
  \setunit{\addcomma\space}%
  \printfield{issue}%
  \setunit*{\addspace}%
  \usebibmacro{date}%
  \newunit}

\DeclareFieldFormat{urldate}{\mkbibbrackets{\bibstring{urlseen}\addcolon\space#1}}
\renewbibmacro*{date}{%
  \printdate
  \setunit{\addspace}%
  \usebibmacro{urldate}}

\DeclareFieldFormat{url}{\bibstring{urlfrom}\addcolon\space\url{#1}}
\renewbibmacro*{url+urldate}{%
  \usebibmacro{url}%
  \iffieldundef{urlyear}}

\begin{filecontents}{\jobname.bib}
@misc{A01,
  author = {Schmidt, A. and Schneider, B.},
  year = {2001},
  title = {Alpha},
}
@misc{A02,
  author = {Meier, A. and Mueller, B. and J, Kurt},
  year = {2001},
  title = {Alpha},
}
@misc{A03,
  author = {Lens,Markus},
  year = {2001},
  title = {Alpha},
}
@article{wenz,
  author  = {Karin Wenz},
  title   = {Formen der Mündlichkeit und Schriftlichkeit in digitalen Medien},
  journal = {Linguistik Online},  
  volume  = {1},
  number  = {1},
  date    = {1998-11-19},
%  issn    = {1615-3014},
  url     = {https://bop.unibe.ch/linguistik-online/article/view/1085},
  urldate = {2017-03-09},
%  doi     = {10.13092/lo.1.10850},
}
\end{filecontents}


\addbibresource{\jobname.bib}

\begin{document}
\cite{A01,A02,A03,wenz}

\printbibliography[title=Literaturverzeichnis]
\end{document}

lennnox1
Forum-Anfänger
Forum-Anfänger
Beiträge: 14
Registriert: Mi 8. Mär 2017, 17:22

Beitrag von lennnox1 »

Vielen Dank für eure Hilfe das klappt wunderbar:)

lennnox1
Forum-Anfänger
Forum-Anfänger
Beiträge: 14
Registriert: Mi 8. Mär 2017, 17:22

Beitrag von lennnox1 »

Ich habe noch eine Frage und zwar ob man das Labelfeld, für Normen wie in dem unten aufgeführten Beispiel anpassen kann? Also sowas wie wenn Type=standard soll das Label so aussehen [DIN66001:83].

Vielen Dank schon mal für eure Hilfe!
\begin{filecontents}{standards.bib}
@standard{DIN66001, 
  TITLE = {Informationsverarbeitung; Sinnbilder und ihre Anwendung},
  year = {1983},
  month = {Dezember},
  author = {DIN},
  institution = {DIN},
  type={Norm},
  number = {66001},
}
@Richtlinie{DIN66001, 
  TITLE = {Informationsverarbeitung; Sinnbilder und ihre Anwendung},
  year = {1983},
  month = {},
  author = {DIN},
  institution = {DIN},
  type={Richtlinie},
  number = {66001},
}
\end{filecontents}
\begin{filecontents}{standards.dbx}
\DeclareDatamodelEntrytypes{standard}
\DeclareDatamodelFields[type=field, datatype=literal]{institution}
\DeclareDatamodelEntryfields[standard]{institution,number,type}
\end{filecontents}
\begin{filecontents}{Richtlinie.dbx}
\DeclareDatamodelEntrytypes{Richtlinie}
\DeclareDatamodelFields[type=field, datatype=literal]{institution}
\DeclareDatamodelEntryfields[Richtlinie]{institution,number,type}
\end{filecontents}
\documentclass[ngerman]{scrartcl}
\usepackage[autostyle]{csquotes}
\usepackage[backend=biber, datamodel=standards, datamodel=Richtlinie,style=alphabetic]{biblatex}
    \DeclareLabelalphaTemplate[standard]{
     \labelelement{
      \field{institution}
      }
      \labelelement{
        \field{number}
      }
      \labelelement{
        \literal{:}
      }
      \labelelement{
        \field[strwidth=2,strside=right]{year}
      }
    }
		  \DeclareLabelalphaTemplate[Richtlinie]{
     \labelelement{
      \field{institution}
      }
      \labelelement{
        \field{number}
      }
      \labelelement{
        \literal{:}
      }
      \labelelement{
        \field[strwidth=2,strside=right]{year}
      }
    }
		
    \DeclareBibliographyDriver{standard}{%
      \usebibmacro{bibindex}%
      \usebibmacro{begentry}%
      \printfield{type}\setunit{\addspace}\newblock\printfield{institution}%
      \setunit{\addspace}\newblock
      \printfield{author}%
      \setunit{\addspace}\newblock
      \printfield{number}%
      \setunit{\addspace}\newblock
      \printfield{month}%
      \setunit{\addspace}
      \printfield{year}%
      \newunit\newblock
      \usebibmacro{title}%
   \usebibmacro{finentry}}
	
 \DeclareBibliographyDriver{Richtlinie}{%
      \usebibmacro{bibindex}%
      \usebibmacro{begentry}%
      \printfield{type}\setunit{\addspace}\newblock\printfield{institution}%
      \setunit{\addspace}\newblock
      \printfield{author}%
      \setunit{\addspace}\newblock
      \printfield{number}%
      \setunit{\addspace}\newblock
      \printfield{month}%
      \setunit{\addspace}
      \printfield{year}%
      \newunit\newblock
      \usebibmacro{title}%
   \usebibmacro{finentry}}
\addbibresource{standards.bib}
\usepackage[ngerman]{babel}
\begin{document} 
%\autocite{DIN66001} 
%\autocite{DIN66001}
\printbibliography 
\end{document}

Gast

Beitrag von Gast »

Was hältst Du von
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{csquotes}
\usepackage{filecontents} 
\usepackage[backend=biber,citestyle=authoryear,bibstyle=authortitle, sorting=nty,dashed=false,%
    maxcitenames=2,maxbibnames=99,uniquelist=false, uniquename=false, natbib=true, urldate=comp]{biblatex}
     
\AtBeginBibliography{\renewcommand*{\mkbibnamefamily}[1]{\textsc{#1}}}
\DeclareNameAlias{sortname}{family-given}

\setlength{\bibhang}{0pt}% wirklich nur wenns denn sein muss

\AtBeginBibliography{%
  \renewcommand*{\multinamedelim}{\addsemicolon\space}%
  \renewcommand*{\finalnamedelim}{\multinamedelim}}

% Siehe http://tex.stackexchange.com/q/11827/35864, plus ein paar Modifikationen
\newcounter{mymaxcitenames}
\AtBeginDocument{%
  \setcounter{mymaxcitenames}{\value{maxnames}}%
}

\makeatletter
\renewbibmacro*{begentry}{%
  \printtext[brackets]{\printtext[bold]{%
    \begingroup
    \renewcommand*{\multinamedelim}{\addcomma\space}%
    \renewcommand*{\finalnamedelim}{%
      \ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
      \addspace\bibstring{and}\space}%
    \csuse{blx@hook@cite}%
    \csuse{blx@hook@citekey}%
    \citetrackerfalse\pagetrackerfalse\backtrackerfalse
    \defcounter{maxnames}{\value{mymaxcitenames}}%
    \usebibmacro{cite}%
    \endgroup
    }}%
  \newline
}
\makeatother

\DefineBibliographyStrings{ngerman}{%
  andothers = {et\addabbrvspace al\adddot},
  urlseen = {Zugriff am},
  urlfrom = {verfügbar unter},
}

\renewbibmacro*{issue+date}{%
  \setunit{\addcomma\space}%
  \printfield{issue}%
  \setunit*{\addspace}%
  \usebibmacro{date}%
  \newunit}

\DeclareFieldFormat{urldate}{\mkbibbrackets{\bibstring{urlseen}\addcolon\space#1}}
\renewbibmacro*{date}{%
  \printdate
  \setunit{\addspace}%
  \usebibmacro{urldate}}

\DeclareFieldFormat{url}{\bibstring{urlfrom}\addcolon\space\url{#1}}
\renewbibmacro*{url+urldate}{%
  \usebibmacro{url}%
  \iffieldundef{urlyear}}

\begin{filecontents}{\jobname.bib}
@misc{A01,
  author = {Schmidt, A. and Schneider, B.},
  year = {2001},
  title = {Alpha},
}
@misc{A02,
  author = {Meier, A. and Mueller, B. and J, Kurt},
  year = {2001},
  title = {Alpha},
}
@misc{A03,
  author = {Lens,Markus},
  year = {2001},
  title = {Alpha},
}
@article{wenz,
  author  = {Karin Wenz},
  title   = {Formen der Mündlichkeit und Schriftlichkeit in digitalen Medien},
  journal = {Linguistik Online},  
  volume  = {1},
  number  = {1},
  date    = {1998-11-19},
%  issn    = {1615-3014},
  url     = {https://bop.unibe.ch/linguistik-online/article/view/1085},
  urldate = {2017-03-09},
%  doi     = {10.13092/lo.1.10850},
}
@standard{DIN66001,
  title = {Informationsverarbeitung; Sinnbilder und ihre Anwendung},
  date = {1983-12},
  institution = {DIN},
  type={Norm},
  number = {66001},
}
\end{filecontents}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map[overwrite=true]{
      \pertype{standard}
      \step[fieldsource=institution, final]
      \step[fieldset=shorthand, origfieldval]
      \step[fieldsource=number, final]
      \step[fieldset=shorthand, origfieldval, append]
      \step[fieldset=shorthand, fieldvalue={:}, append]
      \step[fieldsource=date, match=\regexp{\A[0-9]{2}([0-9]{2})}]
      \step[fieldset=shorthand, fieldvalue={$1}, append]
    }
  }
}

\DeclareBibliographyDriver{standard}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \printfield{type}%
  \setunit{\addspace}\newblock
  \printlist{institution}%
  \setunit{\addspace}
  \printfield{number}%
  \setunit{\addspace}\newblock
  \printfield{month}%
  \setunit{\addspace}
  \printfield{year}%
  \newunit\newblock
  \usebibmacro{title}%
  \usebibmacro{finentry}}

\addbibresource{\jobname.bib}

\begin{document}
\cite{A01,A02,A03,wenz,DIN66001}

\printbibliography[title=Literaturverzeichnis]
\end{document}

Antworten