![Welche Änderungen müssen vorgenommen werden, um \textcite zum Inline-Zitieren von Standards zu verwenden?](https://rvso.com/image/370327/Welche%20%C3%84nderungen%20m%C3%BCssen%20vorgenommen%20werden%2C%20um%20%5Ctextcite%20zum%20Inline-Zitieren%20von%20Standards%20zu%20verwenden%3F.png)
Ich versuche, einen Standard innerhalb meines Dokumenttextes zu zitieren. Zu diesem ThemaWie zitiert man einen Standard (ISO usw.) in BibLaTeX?Ich habe ein Labelalpha und einen Bibliografieeintrag erstellt, der meinen Anforderungen entspricht, habe es jedoch versäumt, den Textcite-Befehl zu ändern.
Hier ein MWE:
\documentclass{article}
\begin{filecontents}{Biblio.bib}
@standard{ASI1234_1,
year = {1999},
title = {somethings special in the world, that has to be defined},
urldate = {2012-09-10},
number = {1234-1},
date = {1999-04},
type = {ASI},
version = {1999-04},
organization = {{ASI}}
}
\end{filecontents}
%%Definition einer Normenklasse für Biblatex
\begin{filecontents}{standards.dbx}
%Modifikation für Normen in Biblatex
\DeclareDatamodelEntryfields[standard]{number,type}
\end{filecontents}
%Pakete für das Literaturverzeichnis mit BibLatex und Einstellung
\usepackage[
style=alphabetic,
% style=draft,
backend=biber,
datamodel=standards]{biblatex}
\addbibresource{Biblio.bib}
\DefineBibliographyStrings{ngerman}{andothers={et\addabbrvspace al\adddot}} %et al. statt u.a.
%\DefineBibliographyStrings{ngerman}{and={\&}} % und zu & machen
\renewcommand*{\labelalphaothers}{} %Zeichen für mehrere Authoren in Abkürzung löschen
%Label für Standard
\DeclareLabelalphaTemplate[standard]{
\labelelement{ %
\field{type} %
} %
\labelelement{ %
\field{number} %
} %
\labelelement{ %
\literal{:} %
} %
\labelelement{ %
\field{year} %
} %
} %
%Eintrag Bibliographie
\DeclareBibliographyDriver{standard}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\printfield{type}%
\setunit{\addspace}\newblock%
\printfield{number}%
\setunit{\addcolon}\newblock%
\printfield{year}%
\iffieldundef{month}{%
\setunit{\addspace}\newblock}%
{\setunit{\addperiod}}%
\printfield{month} %
\setunit*{\addspace}\newblock %
\usebibmacro{title}%
\usebibmacro{finentry}}
\begin{document}
Blablablabba \textcite[10-12]{ASI1234_1} Balbabab
\printbibliography
\end{document}
Ich möchte den Textcite-Befehl nur für den Entrytype-Standard ändern. Ich habe herausgefunden, dass der Textcite-Befehl zuerst das Labelname-Feld überprüft und, wenn dieses leer ist, das Labeltitle-Feld verwendet. Aus diesem Grund wird der vollständige Titel mit dem Textcite-Befehl gedruckt. Das Labeltitle-Feld analysiert mehrere Titelfelder in einer bestimmten Reihenfolge. Da ich eine große Anzahl von Standards habe, ist die Definition eines Kurztitels in der .bib-Datei keine gute Option. Ist es möglich, spontan einen benutzerdefinierten Kurztitel zu erstellen, sodass der Textcite-Befehl diesen anstelle des vollständigen Titels verwendet?
Das Ergebnis sollte wie folgt aussehen: ASI 1234 [ASI1234:1999, S. 10-12]
Antwort1
Es sieht aus wie ein Job für \DeclareSourcemap
:
\documentclass{article}
\begin{filecontents}{Biblio.bib}
@standard{ASI1234_1,
year = {1999},
title = {somethings special in the world, that has to be defined},
urldate = {2012-09-10},
number = {1234-1},
date = {1999-04},
type = {ASI},
version = {1999-04},
organization = {{ASI}}
}
\end{filecontents}
%%Definition einer Normenklasse für Biblatex
\begin{filecontents}{standards.dbx}
%Modifikation für Normen in Biblatex
\DeclareDatamodelEntryfields[standard]{number,type}
\end{filecontents}
%Pakete für das Literaturverzeichnis mit BibLatex und Einstellung
\usepackage[
style=alphabetic,
% style=draft,
backend=biber,
datamodel=standards]{biblatex}
\addbibresource{Biblio.bib}
\DefineBibliographyStrings{ngerman}{andothers={et\addabbrvspace al\adddot}} %et al. statt u.a.
%\DefineBibliographyStrings{ngerman}{and={\&}} % und zu & machen
\renewcommand*{\labelalphaothers}{} %Zeichen für mehrere Authoren in Abkürzung löschen
%Label für Standard
\DeclareLabelalphaTemplate[standard]{
\labelelement{ %
\field{type} %
} %
\labelelement{ %
\field{number} %
} %
\labelelement{ %
\literal{:} %
} %
\labelelement{ %
\field{year} %
} %
} %
%Eintrag Bibliographie
\DeclareBibliographyDriver{standard}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\printfield{type}%
\setunit{\addspace}\newblock%
\printfield{number}%
\setunit{\addcolon}\newblock%
\printfield{year}%
\iffieldundef{month}{%
\setunit{\addspace}\newblock}%
{\setunit{\addperiod}}%
\printfield{month} %
\setunit*{\addspace}\newblock %
\usebibmacro{title}%
\usebibmacro{finentry}}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\pertype{standard}
\step[fieldsource=type, fieldset=shorttitle, origfieldval]
\step[fieldset=shorttitle,fieldvalue={\addspace}, append]
\step[fieldsource=number, fieldset=shorttitle, origfieldval, append]
}
}
}
\begin{document}
Blablablabba \textcite[10-12]{ASI1234_1} Balbabab
\printbibliography
\end{document}
Antwort2
Wenn Sie nach einer wirklich spontanen Lösung suchen, definieren Sie
\makeatletter
\newcommand*{\redeflabeltitle}[1]{\AtNextCitekey{\csdef{abx@field@labeltitle}{#1}}}
\makeatother
in Ihrer Präambel und verwenden Sie es dann als
\redeflabeltitle{Eine tolle Norm}\textcite{ASI1234_1}
im Dokument.
shorttitle
Aber eigentlich wäre es viel, viel übersichtlicher, ein in die Datei einzugeben .bib
, damit die Dinge tatsächlich konsistent sind.
Antwort3
Schneller Hack:
\documentclass{article}
\begin{filecontents}{Biblio.bib}
@standard{ASI1234_1,
year = {1999},
title = {somethings special in the world, that has to be defined},
urldate = {2012-09-10},
number = {1234-1},
date = {1999-04},
type = {ASI},
version = {1999-04},
organization = {{ASI}}
}
\end{filecontents}
%%Definition einer Normenklasse für Biblatex
\begin{filecontents}{standards.dbx}
%Modifikation für Normen in Biblatex
\DeclareDatamodelEntryfields[standard]{number,type}
\end{filecontents}
%Pakete für das Literaturverzeichnis mit BibLatex und Einstellung
\usepackage[
style=alphabetic,
% style=draft,
backend=biber,
datamodel=standards]{biblatex}
\addbibresource{Biblio.bib}
\DefineBibliographyStrings{ngerman}{andothers={et\addabbrvspace al\adddot}} %et al. statt u.a.
%\DefineBibliographyStrings{ngerman}{and={\&}} % und zu & machen
\renewcommand*{\labelalphaothers}{} %Zeichen für mehrere Authoren in Abkürzung löschen
%Label für Standard
\DeclareLabelalphaTemplate[standard]{
\labelelement{ %
\field{type} %
} %
\labelelement{ %
\field{number} %
} %
\labelelement{ %
\literal{:} %
} %
\labelelement{ %
\field{year} %
} %
} %
%Eintrag Bibliographie
\DeclareBibliographyDriver{standard}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\printfield{type}%
\setunit{\addspace}\newblock%
\printfield{number}%
\setunit{\addcolon}\newblock%
\printfield{year}%
\iffieldundef{month}{%
\setunit{\addspace}\newblock}%
{\setunit{\addperiod}}%
\printfield{month} %
\setunit*{\addspace}\newblock %
\usebibmacro{title}%
\usebibmacro{finentry}}
\makeatletter
\renewbibmacro*{textcite}{%
\iffieldequals{namehash}{\cbx@lasthash}
{\setunit{\multicitedelim}}
{\ifentrytype{standard}{}{\ifnameundef{labelname}
{\printfield[citetitle]{labeltitle}}
{\printnames{labelname}}%
\setunit{%
\global\booltrue{cbx:parens}%
\printdelim{namelabeldelim}\bibopenbracket}%
\stepcounter{textcitecount}%
\savefield{namehash}{\cbx@lasthash}}}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\ifentrytype{standard}{\printfield{type}\printfield{number}}{\usebibmacro{cite}}%
\setunit{%
\ifbool{cbx:parens}
{\bibclosebracket\global\boolfalse{cbx:parens}}
{}%
\textcitedelim}}
\makeatother
\begin{document}
Blablablabba \textcite{ASI1234_1} Balbabab
\printbibliography
\end{document}