Quais modificações devem ser feitas para usar \textcite para citar padrões inline

Quais modificações devem ser feitas para usar \textcite para citar padrões inline

Estou tentando citar um padrão no texto do meu documento. Em relação a este tópicoComo citar um padrão (ISO, etc.) no BibLaTeX?Criei um labelalpha e uma entrada bibliográfica adequada às minhas necessidades, mas não consegui modificar o comando textcite.

Aqui um 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}

insira a descrição da imagem aqui

Quero modificar o comando textcite apenas para o padrão entrytype. Eu descobri que o comando textcite primeiro verifica o campo labelname e se estiver vazio ele usará o campo labeltitle. É por isso que o título completo será impresso usando o comando textcite. O campo labeltitle analisa alguns campos de título em uma determinada ordem. Como tenho um grande número de padrões, definir um título curto no arquivo .bib não é uma boa opção. É possível criar um título curto definido pelo usuário instantaneamente para que o comando textcite o use em vez do título completo?

O resultado deverá ficar assim: ASI 1234 [ASI1234:1999, S. 10-12]

Responder1

Parece um trabalho para \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}

insira a descrição da imagem aqui

Responder2

Se você está procurando uma solução verdadeiramente dinâmica, defina

\makeatletter
\newcommand*{\redeflabeltitle}[1]{\AtNextCitekey{\csdef{abx@field@labeltitle}{#1}}}
\makeatother

em seu preâmbulo e então use-o como

\redeflabeltitle{Eine tolle Norm}\textcite{ASI1234_1}

no documento.

Mas na verdade seria muito, muito mais limpo dar um shorttitleno .bibarquivo, então as coisas são realmente consistentes.

Responder3

Hack rápido:

\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}

informação relacionada