Probleme mit modifiziertem Biblatex-Stil

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Probleme mit modifiziertem Biblatex-Stil

Danke!

von Victor » Fr 8. Jul 2016, 13:52

Super, vielen Dank, es lag an \printlist und jetzt läufts! :D

von DADABBI » Fr 8. Jul 2016, 13:46

Sorry. Ich hatte vor dem Abschickten nicht bemerkt, dass da schon eine entsprechende Antwort war. Immerhin kann ich sagen: Ich habe das Beispiel mit \printlist statt \printfield getestet und es funktioniert dann. :wink:

von DADABBI » Fr 8. Jul 2016, 13:44

Falscher Datentyp. location und publisher sind keine einfachen Felder, sondern Listen. Du musst also \printlist{location} und \printlist{publisher} verwenden.

BTW: Ich empfehle unbedingt den Umstieg von bibtex8 auf biber, das bibtex8 nicht mit UTF8 umgehen kann und biblatex zunehmend auf Features von biber setzt.

von Gast » Fr 8. Jul 2016, 13:39

Dein Beispiel habe ich jetzt noch nicht getestet, aber ein paar Kommentare kann ich trotzdem schon mal loswerden.

Bei biblatex gibt es verschieden Datentypen: Felder (fields), Listen (lists) und Namenslisten (names). title ist ein Feld und wird daher mit \printfield{title} ausgegeben, location und publisher sind beides Listen und werden daher mit \printlist{location} bzw. \printlist{publisher} ausgegeben.

Das Problem mit inputenc könnte daraufhindeuten, dass Du Deine Datei mit BOM gespeichert hast, was TeX ein bisschen verwirrt. Es kann aber auch sein, dass irgendwelche UTF8-Zeichen in der .bib-Datei Probleme machen.

Beachte, dass Du mit BibTeX(8) nur noch die eingeschränkte Funktionalität von biblatex nutzen kannst; wenn möglich, solltest Du auf Biber umsteigen.

Eine allgemeine Anmerkung noch: Je nach dem wie umfangreich Deine Anpassungen sind, kann es sinnvoll sein, nicht gleich eigene .bbxen und .cbxen zu schreiben, sondern den Code in der Präambel zu parken, oder modular auf andere .bbx-, .cbx-Dateien aufzubauen. Es scheint mir so als hättest Du die ganzen Dateien kopiert und dann angepasst, das führt auch zum Ziel, kann aber der Übersichtlichkeit abträglich sein.

von Victor » Fr 8. Jul 2016, 12:48

Vielen Dank für die schnelle Antwort, Dadabbi!

Natürlich hast du vollkommen Recht, die .bbx-Datei heißt eigentlich Mein-Stil-Kopie und ich hatte vergessen, das auch im \ProvidesFile zu ändern.

Die korrespondierende .cbx-Datei ist folgende:
\ProvidesFile{Mein-Stil-Kopie.cbx}
[\abx@cbxid]

\ExecuteBibliographyOptions{labelnumber,sortcites,autocite=inline}

\renewcommand*{\multicitedelim}{\addcomma\space}
\renewcommand*{\iffinalcitedelim}{%
  \ifnumequal{\value{textcitecount}}{\value{textcitetotal}-1}}

\providebool{bbx:subentry}
\newbool{cbx:parens}

\newcounter{cbx@tempcnta}
\newcounter{cbx@tempcntb}

\DeclareFieldFormat{entrysetcount}{\mknumalph{#1}}

\newbibmacro*{cite:init}{%
  \global\boolfalse{cbx:parens}%
  \global\undef\cbx@lasthash
  \global\undef\cbx@lastnumber
  \global\undef\cbx@lastprefix
  \setcounter{cbx@tempcnta}{0}%
  \setcounter{cbx@tempcntb}{-2}}

\newbibmacro*{cite:comp}{%
  \addtocounter{cbx@tempcntb}{1}%
  \iffieldundef{shorthand}
    {\ifbool{bbx:subentry}
       {\iffieldundef{entrysetcount}
          {\usebibmacro{cite:comp:comp}}
          {\usebibmacro{cite:comp:inset}}}
       {\usebibmacro{cite:comp:comp}}}
    {\usebibmacro{cite:comp:shand}}}

\newbibmacro*{cite:comp:comp}{%
  \ifboolexpr{
    ( test {\iffieldundef{prefixnumber}} and test {\ifundef\cbx@lastprefix} )
    or
    test {\iffieldequals{prefixnumber}{\cbx@lastprefix}}
  }
    {\ifnumequal{\thefield{labelnumber}}{\value{cbx@tempcntb}}
       {\savefield{entrykey}{\cbx@lastkey}%
        \savefield{labelnumber}{\cbx@lastnumber}%
        \addtocounter{cbx@tempcnta}{1}}
       {\ifnumequal{\thefield{labelnumber}}{\value{cbx@tempcntb}-1}
          {}
          {\usebibmacro{cite:dump}%
           \ifnumgreater{\value{cbx@tempcntb}}{-1}
             {\multicitedelim}
             {}%
           \printtext[bibhyperref]{%
             \printfield{prefixnumber}%
             \printfield{labelnumber}}}}}
    {\usebibmacro{cite:comp:end}}%
  \setcounter{cbx@tempcntb}{\thefield{labelnumber}}%
  \savefield{prefixnumber}{\cbx@lastprefix}}

\newbibmacro*{cite:comp:end}{%
  \usebibmacro{cite:dump}%
  \ifnumgreater{\value{cbx@tempcntb}}{-1}
    {\multicitedelim}
    {}%
  \printtext[bibhyperref]{%
    \printfield{prefixnumber}%
    \printfield{labelnumber}}}

\newbibmacro*{cite:comp:inset}{%
  \usebibmacro{cite:dump}%
  \ifnumgreater{\value{cbx@tempcntb}}{-1}
    {\multicitedelim}
    {}%
  \printtext[bibhyperref]{%
    \printfield{prefixnumber}%
    \printfield{labelnumber}%
    \printfield{entrysetcount}}%
  \setcounter{cbx@tempcntb}{-1}}

\newbibmacro*{cite:comp:shand}{%
  \usebibmacro{cite:dump}%
  \ifnumgreater{\value{cbx@tempcntb}}{-1}
    {\multicitedelim}
    {}%
  \printtext[bibhyperref]{\printfield{shorthand}}%
  \setcounter{cbx@tempcntb}{-1}}

\newbibmacro*{cite:dump}{%
  \ifnumgreater{\value{cbx@tempcnta}}{0}
    {\ifnumgreater{\value{cbx@tempcnta}}{1}
       {\bibrangedash}
       {\multicitedelim}%
     \bibhyperref[\cbx@lastkey]{%
       \ifdef\cbx@lastprefix
         {\printtext[prefixnumber]{\cbx@lastprefix}}
         {}%
       \printtext[labelnumber]{\cbx@lastnumber}}}
    {}%
  \setcounter{cbx@tempcnta}{0}%
  \global\undef\cbx@lastprefix}

\newbibmacro*{textcite}{%
  \iffieldequals{namehash}{\cbx@lasthash}
    {\usebibmacro{cite:comp}}
    {\usebibmacro{cite:dump}%
     \ifbool{cbx:parens}
       {\bibclosebracket\global\boolfalse{cbx:parens}}
       {}%
     \iffirstcitekey
       {}
       {\textcitedelim}%
     \usebibmacro{cite:init}%
     \ifnameundef{labelname}
       {\printfield[citetitle]{labeltitle}}
       {\printnames{labelname}}%
     \global\booltrue{cbx:parens}%
     \addspace\bibopenbracket%
     \ifnumequal{\value{citecount}}{1}
       {\usebibmacro{prenote}}
       {}%
     \usebibmacro{cite:comp}%
     \stepcounter{textcitecount}%
     \savefield{namehash}{\cbx@lasthash}}}

\DeclareCiteCommand{\cite}[\mkbibbrackets]
  {\usebibmacro{cite:init}%
   \usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   \usebibmacro{cite:comp}}
  {}
  {\usebibmacro{cite:dump}%
   \usebibmacro{postnote}}

\DeclareCiteCommand{\parencite}[\mkbibbrackets]
  {\usebibmacro{cite:init}%
   \usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   \usebibmacro{cite:comp}}
  {}
  {\usebibmacro{cite:dump}%
   \usebibmacro{postnote}}

\DeclareCiteCommand{\footcite}[\mkbibfootnote]
  {\usebibmacro{cite:init}%
   \usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   \usebibmacro{cite:comp}}
  {}
  {\usebibmacro{cite:dump}%
   \usebibmacro{postnote}}

\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
  {\usebibmacro{cite:init}%
   \usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   \usebibmacro{cite:comp}}
  {}
  {\usebibmacro{cite:dump}%
   \usebibmacro{postnote}}

\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibbrackets\mkbibfootnote]
  {\usebibmacro{cite:init}%
   \usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   \usebibmacro{cite:comp}}
  {}
  {\usebibmacro{cite:dump}%
   \usebibmacro{postnote}}

\DeclareCiteCommand{\supercite}[\mkbibsuperscript]
  {\usebibmacro{cite:init}%
   \let\multicitedelim=\supercitedelim
   \iffieldundef{prenote}
     {}
     {\BibliographyWarning{Ignoring prenote argument}}%
   \iffieldundef{postnote}
     {}
     {\BibliographyWarning{Ignoring postnote argument}}}
  {\usebibmacro{citeindex}%
   \usebibmacro{cite:comp}}
  {}
  {\usebibmacro{cite:dump}}

\DeclareCiteCommand{\cbx@textcite}
  {\usebibmacro{cite:init}}
  {\usebibmacro{citeindex}%
   \usebibmacro{textcite}}
  {}
  {\usebibmacro{cite:dump}%
   \usebibmacro{postnote}%
   \ifbool{cbx:parens}
     {\bibclosebracket\global\boolfalse{cbx:parens}}
     {}}

\DeclareCiteCommand{\textcite}[\cbx@textcite@init\cbx@textcite]
  {\gdef\cbx@savedkeys{}%
   \citetrackerfalse%
   \pagetrackerfalse%
   \DeferNextCitekeyHook%
   \usebibmacro{cite:init}}
  {\ifthenelse{\iffirstcitekey\AND\value{multicitetotal}>0}
     {\protected@xappto\cbx@savedcites{()(\thefield{multipostnote})}%
      \global\clearfield{multipostnote}}
     {}%
   \xappto\cbx@savedkeys{\thefield{entrykey},}%
   \iffieldequals{namehash}{\cbx@lasthash}
     {}
     {\stepcounter{textcitetotal}%
      \savefield{namehash}{\cbx@lasthash}}}
  {}
  {\protected@xappto\cbx@savedcites{%
     [\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}}}

\newrobustcmd{\cbx@textcite@init}[2]{%
  \setcounter{textcitetotal}{0}%
  \setcounter{textcitecount}{0}%
  \def\cbx@savedcites{#1}#2\cbx@savedcites\empty}

\DeclareMultiCiteCommand{\cbx@textcites}{\cbx@textcite}{}
\DeclareMultiCiteCommand{\textcites}[\cbx@textcites@init\cbx@textcites]{\textcite}{}

\let\cbx@textcites@init\cbx@textcite@init
\pretocmd{\cbx@textcites@init}{\UseNextMultiCiteHook}{}{}

\DeclareMultiCiteCommand{\cites}[\mkbibbrackets]{\cite}{\multicitedelim}
\DeclareMultiCiteCommand{\parencites}[\mkbibbrackets]{\parencite}{\multicitedelim}
\DeclareMultiCiteCommand{\smartcites}[\iffootnote\mkbibbrackets\mkbibfootnote]
  {\smartcite}{\multicitedelim}

\endinput

Leider habe ich bei .bbx und .cbx keine Ahnung, wieviel vom Code ich löschen kann, damit es ein gutes Minimalbeispiel wird. Die .bbx habe ich schon ein bisschen kürzen können und hoffe, damit die Analysierbarkeit verbessert zu haben. Eine .dbx-Datei habe ich meines Wissens nicht.

von DADABBI » Fr 8. Jul 2016, 12:34

Mir fallen da nur ein paar Ungereimtheiten auf: Du verwendest style=Mein-Stil-Kopie lieferst aber nur eine Datei Mein-Stil.bbx (gemäß \ProvidesFile). Eigentlich bräuchten wir Mein-Stil-Kopie.bbx und Mein-Stil-Kopie.cbx und ggf. auch noch Mein-Stil-Kopie.dbx. Letztere definiert u. a. welche Felder verwendet werden. Aktuell ist das Beispiel also leider nicht vollständig und deshalb zumindest für mich das Problem nicht reproduzierbar.

Vielleicht schaust du dir noch einmal an, wie man ein Minimalbeispiel erstellt und überprüft, dass es vollständig ist.

Probleme mit modifiziertem Biblatex-Stil

von Victor » Fr 8. Jul 2016, 12:19

Hallo zusammen!

Bisher habe ich all meine Latex-Probleme per Google ganz gut lösen können, doch hier komme ich nicht weiter und bitte um Hilfe:

Ich habe mir nach der Anleitung von Dominik Wassenhoven einen eigenen Biblatex-Stil nach einer Vorlage gebaut. Bei dem Typ "article" hat alles gut geklappt, aber bei "book" stoße ich jetzt an meine Grenzen: trotz \printfield{publisher} und \printfield{location} werden die beiden nicht im Literaturverzeichnis ausgegeben. Obendrein erhalte ich einen Fehler, den ich nicht nachvollziehen kann: "Package inputenc error: unicode char \u8: ï>>¿ not set up for use with Latex" - dabei verwende ich weder "ï" noch "¿".

Hier mein Latex-Code:
\documentclass[a4paper, 12pt, oneside, ngerman, headings=small, openany,
listof=totoc, bibliography=totoc, parskip=half]{scrbook}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[style=Mein-Stil-Kopie, backend=bibtex8, sorting=nyt, maxcitenames=99,maxbibnames=99, firstinits=true, terseinits=true, url=false, doi=false, isbn=false]{biblatex}
\usepackage[plainpages=false,pdfpagelabels]{hyperref}
\addbibresource{biblatex-examples.bib}
%
\begin{document}
%
\mainmatter 
%
\chapter{Kapitel}
%
Beispieltext\cite{aristotle:physics}.
%
\defbibheading{Bibheading}[Literaturverzeichnis]{\chapter{Literaturverzeichnis}}
%
\printbibliography[heading=Bibheading] 
%
\end{document}
Und hier der Code von meiner bbx-Datei:
\ProvidesFile{Mein-Stil.bbx}
[\abx@bbxid]

\renewcommand*{\labelnamepunct}{\addcolon\addspace} %%% von mir

\DeclareNameAlias{default}{last-first}  %%% von mir

\renewcommand*{\finalnamedelim}{\addcomma\addspace} %%%% von mir

\DeclareFieldFormat[article]{citetitle}{#1\midsentence}%%% von mir
\DeclareFieldFormat[article]{title}{#1\midsentence} %%% von mir

\DeclareFieldFormat[book]{citetitle}{#1\midsentence}%%% von mir
\DeclareFieldFormat[book]{title}{#1\midsentence} %%% von mir

\AtEveryBibitem{%%% von mir
  \clearlist{language}%%% von mir
}%%% von mir

\AtEveryBibitem{%%% von mir pers.
	\clearfield{issue}%%% von mir pers.
	}%%% von mir pers.

\newtoggle{bbx:isbn}
\newtoggle{bbx:url}
\newtoggle{bbx:doi}
\newtoggle{bbx:eprint}
\newtoggle{bbx:related}

\DeclareBibliographyOption{isbn}[false]{%%% von mir auf false
  \settoggle{bbx:isbn}{#1}}
\DeclareBibliographyOption{url}[false]{%%% von mir auf false
  \settoggle{bbx:url}{#1}}
\DeclareBibliographyOption{doi}[false]{%%% von mir auf false
  \settoggle{bbx:doi}{#1}}
\DeclareBibliographyOption{eprint}[false]{%%% von mir auf false
  \settoggle{bbx:eprint}{#1}}
\DeclareBibliographyOption{related}[false]{%%% von mir auf false
  \settoggle{bbx:related}{#1}}

\ExecuteBibliographyOptions{% von mir geändert
isbn=false,
url=false,
doi=false,
eprint=false,
related=false
}

\newbibmacro*{begentry}{}
\newbibmacro*{finentry}{\finentry}

\DeclareBibliographyDriver{book}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/editor+others/translator+others}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{maintitle+title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \printfield{publisher}%
  \newunit\newblock
  \printfield{location}%
  \newunit\newblock 
  \printfield{pages}%
  \newunit\newblock 
  \printfield{year}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}}

\newbibmacro*{maintitle+title}{%
  \iffieldsequal{maintitle}{title}
    {\clearfield{maintitle}%
     \clearfield{mainsubtitle}%
     \clearfield{maintitleaddon}}
    {\iffieldundef{maintitle}
       {}
       {\usebibmacro{maintitle}%
	\newunit\newblock
	\iffieldundef{volume}
	  {}
	  {\printfield{volume}%
           \printfield{part}%
           \setunit{\addcolon\space}}}}%
  \usebibmacro{title}%
  \newunit}

\DeclareBibliographyAlias{mvbook}{book}
\DeclareBibliographyAlias{bookinbook}{inbook}
\DeclareBibliographyAlias{suppbook}{inbook}
\DeclareBibliographyAlias{mvcollection}{collection}
\DeclareBibliographyAlias{suppcollection}{incollection}
\DeclareBibliographyAlias{mvproceedings}{proceedings}
\DeclareBibliographyAlias{reference}{collection}
\DeclareBibliographyAlias{mvreference}{reference}
\DeclareBibliographyAlias{inreference}{incollection}
\DeclareBibliographyAlias{suppperiodical}{article}
\DeclareBibliographyAlias{review}{article}
\DeclareBibliographyAlias{*}{misc}


		
\ExecuteBibliographyOptions{labelnumber}

\providebool{bbx:subentry}

\DeclareBibliographyOption{subentry}[true]{%
  \setbool{bbx:subentry}{#1}}

\DeclareNameAlias{author}{default}
\DeclareNameAlias{editor}{default}
\DeclareNameAlias{translator}{default}

\DeclareFieldFormat{bibentrysetcount}{\mkbibparens{\mknumalph{#1}}}
\DeclareFieldFormat{labelnumberwidth}{\mkbibbrackets{#1}}
\DeclareFieldFormat{shorthandwidth}{\mkbibbrackets{#1}}

\defbibenvironment{bibliography}
  {\list
     {\printtext[labelnumberwidth]{%
	\printfield{prefixnumber}%
	\printfield{labelnumber}}}
     {\setlength{\labelwidth}{\labelnumberwidth}%
      \setlength{\leftmargin}{\labelwidth}%
      \setlength{\labelsep}{\biblabelsep}%
      \addtolength{\leftmargin}{\labelsep}%
      \setlength{\itemsep}{\bibitemsep}%
      \setlength{\parsep}{\bibparsep}}%
      \renewcommand*{\makelabel}[1]{\hss##1}}
  {\endlist}
  {\item}

\defbibenvironment{shorthand}
  {\list
     {\printfield[shorthandwidth]{shorthand}}
     {\setlength{\labelwidth}{\shorthandwidth}%
      \setlength{\leftmargin}{\labelwidth}%
      \setlength{\labelsep}{\biblabelsep}%
      \addtolength{\leftmargin}{\labelsep}%
      \setlength{\itemsep}{\bibitemsep}%
      \setlength{\parsep}{\bibparsep}%
      \renewcommand*{\makelabel}[1]{\hss##1}}}
  {\endlist}
  {\item}

\DeclareBibliographyDriver{set}{%
  \entryset
    {\ifbool{bbx:subentry}
       {\printfield[bibentrysetcount]{entrysetcount}%
	\printunit*{\addnbspace}}
       {}}
    {}%
  \newunit\newblock
  \usebibmacro{setpageref}%
  \finentry}

\endinput
Die entsprechenden Einträge in der .bib-Datei enthalten natürlich einen Inhalt in den Feldern {publisher} und {location}.

Vielen Dank schon im Voraus für euren Aufwand!
Victor

Nach oben