Crie seu próprio comando de citação no biblatex

Crie seu próprio comando de citação no biblatex

Estou com o seguinte problema: preciso de uma espécie de "sistema de citação dupla" muito simples. Para literatura normal eu uso o estilo autor-ano no biblatex sem problemas. Fiz as seguintes pequenas alterações:

\renewcommand*{\mkbibnamelast}[1]{\textsc{#1}}
\renewcommand{\postnotedelim}{\addcolon\space}
\DeclareFieldFormat{postnote}{#1}

O problema é que agora quero citar livros antigos (início do período moderno) de uma maneira diferente (não como autor-ano), mais ou menos assim:

 Shortauthor, *shorttitle*, p. 124

Acho que uma solução é escrever um comando de citação próprio, algo assim, que parece funcionar bem:

\DeclareBibliographyDriver{myshort}{%
 \usebibmacro{begentry}%
  \ifboolexpr{ test{\ifnameundef{shortauthor}} 
            or test {\iffieldundef{shorttitle}}}
   {\usedriver{}{\thefield{entrytype}}}
   {\printnames{shortauthor}%
    \setunit{\addcomma\space}%
    \printfield{shorttitle}\isdot}%
    \usebibmacro{finentry}%
  }

  \DeclareCiteCommand{\mycite}[\mkbibfootnote]
   {\usebibmacro{prenote}}
   {\usedriver{}{myshort}}
   {\multicitedelim}
    {\usebibmacro{postnote}}

MAS(e esta é a minha pergunta real): existe uma maneira de:

  • desabilitar as minúsculas do autor?
  • colocar o título em letra cursiva?
  • pegue o "p." para páginas de volta?

Ou seja, uma forma de desabilitar de alguma forma para este comando concreto as opções gerais que coloquei com os comandos de renovação, etc.

Responder1

Um truque útil para situações como essa é criar um botão de alternância que é ativado quando você insere o comando e desativado ao sair do comando:

\newtoggle{mycite}

\renewcommand*{\mkbibnamelast}[1]{\iftoggle{mycite}{#1}{\textsc{#1}}}
\renewcommand{\postnotedelim}{\iftoggle{mycite}{\addcomma\addspace}{\addcolon\space}}
\DeclareFieldFormat{postnote}{#1}

e então, quando você definir seu novo comando de citação:

\DeclareCiteCommand{\mycite}[\mkbibfootnote]
   {\toggletrue{mycite}\usebibmacro{prenote}}
   {\usebibmacro{mycite}}
   {\multicitedelim}
   {\usebibmacro{postnote}\togglefalse{mycite}}

A propósito, você não pode usar \usedriver{}{\thefield{entrytype}dentro da definição de \DeclareBibliographyDriver: ele entrará em um loop infinito e o TeX reportará um erro. O que você pode fazer é definir uma nova macro bib. Por exemplo, usando sua definição como ponto de partida (e ajustada para colocar o título (abreviado) em itálico):

\newbibmacro{mycite}{
   \ifboolexpr
     {test {\ifnameundef{shortauthor}} or
      test {\iffieldundef{shorttitle}}}
     {\usedriver{}{\thefield{entrytype}}} 
     {\printnames{shortauthor}%
     \setunit{\addcomma\space}%
     \mkbibemph{\printfield{shorttitle}}}
}

informação relacionada