![Diferenciar entre todos los tipos de entrada en biblatex (por ejemplo, matemáticas frente a tesis doctoral)](https://rvso.com/image/335494/Diferenciar%20entre%20todos%20los%20tipos%20de%20entrada%20en%20biblatex%20(por%20ejemplo%2C%20matem%C3%A1ticas%20frente%20a%20tesis%20doctoral).png)
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, mastersthesis
y phdthesis,
además algunos articles
y books
. Como está escrito en el documento biblatex, los dos primeros están mapeados con @reports
y 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.def
continuación. \DeclareDriverSourceMap
Mientras trabajaba en la definición de un *.bbx
archivo 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.def
e ignora mis entradas. ¿Cómo puedo suprimir o renovar los comandos de la \DeclareDriverSourceMap
sección? La opción preferida sería agregar algún código en el *.bbx
archivo; 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 @techreport
s se asigna @report
con type = {techreport}
, while @phdthesis
y @mastersthesis
ambos se asignan @thesis
con 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 type
campo.
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 @mastersthesis
y @phdtehsis
excepto 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.def
puede aprovechar el hecho de que biblatex
solo 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.