Diferenciar entre todos los tipos de entrada en biblatex (por ejemplo, matemáticas frente a tesis doctoral)

Diferenciar entre todos los tipos de entrada en biblatex (por ejemplo, matemáticas frente a tesis doctoral)

Recientemente me cambié a biblatex, que hasta ahora es fantástico, pero no tan fácil como bibtex. Me encontré con un problema que no pude resolver hasta ahora:

Mi bibliografía contiene reports, techreports, mastersthesisy phdthesis,además algunos articlesy books. Como está escrito en el documento biblatex, los dos primeros están mapeados con @reportsy el tercero y el cuarto están mapeados con @thesis. La razón detrás de esto no parece clara y como tengo diferentes opciones de formato para las cuatro entradas, no es posible combinarlas. La combinación parece estar dispuesta a biblatex.defcontinuación. \DeclareDriverSourceMap Mientras trabajaba en la definición de un *.bbxarchivo propio para un estilo de bibliografía personalizado, también definí diferentes apariencias para las cuatro entradas.

\DeclareBibliographyDriver{report}{ ...
...
\DeclareBibliographyDriver{phdthesis}{...

Pero aún así biblatex se refiere a biblatex.defe ignora mis entradas. ¿Cómo puedo suprimir o renovar los comandos de la \DeclareDriverSourceMapsección? La opción preferida sería agregar algún código en el *.bbxarchivo; si no es posible, también se incluiría el preámbulo. Pero con mi MWE no parece posible una nueva declaración en el preámbulo.


Aquí está el MWE:

\begin{filecontents*}{Beispielbibliographie.bib}
@PHDTHESIS{Mus15,
  Title                    = {Doktorarbeit ABC},
  Author                   = {Wax Mustermann},
  School                   = {XY Universität},
  Year                     = {2015},
  Note                     = {ISBN unbekannt},
}
@MASTERSTHESIS{Mus10,
  Title                    = {Bachelorarbeit DEF},
  Author                   = {Martina Musterfrau},
  School                   = {XY Universität},
  Year                     = {2010},
  Note                     = {Max Mustermann},
  Type                     = {unveröffentlichte Bachelorarbeit},
}
@ARTICLE{Gan11,
  Title                    = {GHI},
  Author                   = {T. Gantenbein},
  Journal                  = {Journal für Beispiele},
  Year                     = {2011},
  Number                   = {8},
  Pages                    = {1001-1010},
  Volume                   = {43},
}
\end{filecontents*}

\begin{filecontents}{Beispiel.bbx}
\ProvidesFile{Beispiel.bbx}

\RequireBibliographyStyle{standard}
\ExecuteBibliographyOptions{labelalpha,sorting=anyt}

\DeclareFieldFormat{labelalphawidth}{\mkbibbrackets{#1}}
\DeclareFieldFormat{shorthandwidth}{\mkbibbrackets{#1}}

\defbibenvironment{bibliography}
  {\list
     {\printtext[labelalphawidth]{%
        \printfield{prefixnumber}%
    \printfield{labelalpha}%
        \printfield{extraalpha}}}
     {\setlength{\labelwidth}{\labelalphawidth}%
      \setlength{\leftmargin}{\labelwidth}%
      \setlength{\labelsep}{\biblabelsep}%
      \addtolength{\leftmargin}{\labelsep}%
      \setlength{\itemsep}{\bibitemsep}%
      \setlength{\parsep}{\bibparsep}}%
      \renewcommand*{\makelabel}[1]{##1\hss}}
  {\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]{##1\hss}}}
  {\endlist}
  {\item}

\renewcommand*{\labelnamepunct}{\addcolon\addspace}
\renewcommand{\mkbibnamefamily}[1]{\textsc{#1}}
\DeclareFieldFormat[article,inbook,incollection,inproceedings,patent,thesis,unpublished]{title}{#1\isdot}

\DeclareBibliographyDriver{mastersthesis}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{title}%
  \newunit\newblock
  \printfield{school}%
  \newunit\newblock
  \printfield{type}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \printfield{year}%
  \newunit\newblock
  {}%
}

\DeclareBibliographyDriver{phdthesis}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{title}%
  \newunit\newblock
  \printfield{school}%
  \newunit\newblock
  \printfield{year}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  {}%
}
\endinput
\end{filecontents}


\documentclass[12pt,halfparskip,BCOR0pt,DIV12]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[german]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{lipsum}

\DeclareDriverSourcemap[datatype=bibtex]{
  \map{
    \step[fieldset=day, null]
  }
}

\usepackage[backend=bibtex, bibstyle=Beispiel, citestyle=alphabetic, firstinits=true, isbn=false, doi=false, url=false, maxbibnames=99]{biblatex}
\bibliography{Beispielbibliographie.bib}


\begin{document}

\lipsum[1] \cite{Gan11,Mus10,Mus15}
\lipsum[2]

\printbibliography[title=Literaturverzeichnis]

\end{document}

Respuesta1

Descubrirá que @techreports se asigna @reportcon type = {techreport}, while @phdthesisy @mastersthesisambos se asignan @thesiscon type = {phdthesis}y type = {mastersthesis}respectivamente. Entonces, hay una manera de diferenciar los tipos, pero no a través del tipo de entrada, sino del typecampo.

Habría pensado que el resultado para los tipos es lo suficientemente similar como para que sería suficiente tener un controlador para cada uno (¿cuál es exactamente la diferencia entre el resultado esperado @mastersthesisy @phdtehsisexcepto la cadena que ya indica automáticamente si tenemos un MA o ¿Tesis doctoral?), por supuesto, eso depende del resultado exacto que busque, pero puede comparar el tipo con \iffieldequalstr{type}{techreport}{Ohh, a @techreport}{just a normal @report}.

Por ejemplo

\DeclareBibliographyDriver{report}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author}%
  \setunit{\printdelim{nametitledelim}}\newblock
  \usebibmacro{title}%
  \newunit\newblock
  \printtext{\iffieldequalstr{type}{techreport}{Ohh, a @techreport}{just a normal @report}}
  \newunit\newblock
  \usebibmacro{finentry}}

Si es absolutamente necesario suprimir la reasignación, biblatex.defpuede aprovechar el hecho de que biblatexsolo puede aceptar una directiva de asignación de origen de cualquier tipo. Entonces si agregas

\DeclareDriverSourcemap[datatype=bibtex]{
  \map{
    \step[fieldset=day, null]
  }
}

al preámbulo de su documento, se ignoran las asignaciones predeterminadas.

información relacionada