Campos excessivos no biblatex não poderiam ser removidos usando \fullcite

Campos excessivos no biblatex não poderiam ser removidos usando \fullcite

A combinação de biblatex-chicagoZotero e Zotero produz muitos campos excessivos na bibliografia. Este problema poderia ser resolvido adicionando advertências ao preâmbulo como estas:

\AtEveryBibitem{%
\ifentrytype{online}
{}
{\clearfield{urlyear}\clearfield{urlmonth}\clearfield{urlday}}}

(Descrito em detalhes na resposta à minha pergunta anterior:Campos excessivos no estilo biblatex chicago autor-data.)

Esta solução funcionou bem para mim, mas agora tenho que produzir um plano de estudos usando \fullciteo comando. Infelizmente, esta solução não resolve o problema de entradas bibliográficas completas fora da própria bibliografia.

Aqui está o código com a bibliografia dentro (para obter o nome e o sobrenome do autor na ordem certa, uso a seguinte solução:Biblatex-chicago: \fullcite muda nome e sobrenome):

\begin{filecontents*}{database.bib}
    @book{dalton_apartisan_2012,
        title = {The Apartisan American: Dealignment and Changing Electoral Politics},
        isbn = {9781452216942},
        url = {http://books.google.com/books?id=eYkczUyX5wMC},
        shorttitle = {The Apartisan American},
        pagetotal = {241},
        publisher = {{CQ} Press},
        author = {Dalton, Russell J.},
        urldate = {2014-04-03},
        date = {2012-02-22},
        langid = {english},
        keywords = {Political Science / Political Process / Elections, Political Science / Public Policy / General}
    }
\end{filecontents*}
\documentclass[11pt]{article}
\usepackage[hmargin=3cm,vmargin=3cm]{geometry}
\usepackage[onehalfspacing]{setspace}
\usepackage{amssymb,amsmath,amsthm}
\usepackage{booktabs,graphicx}
\usepackage{paralist}
\usepackage{cancel,soul}
\usepackage{enumitem}
\usepackage[authordate,backend=biber,bibencoding=utf8,bookpages=false,doi=only,isbn=false,footmarkoff]{biblatex-chicago}
\usepackage[colorlinks, pdfstartview={XYZ null null 1.25},bookmarksopen=true,bookmarksopenlevel=\maxdimen,citecolor={blue},urlcolor={blue}]{hyperref}
\addbibresource{database.bib}
\DeclareCiteCommand{\fullcite}
{\usebibmacro{prenote}}
{\usedriver
    {}
    {\thefield{entrytype}}}
{\multicitedelim}
{\usebibmacro{postnote}}
\AtEveryBibitem{%
    \ifthenelse{\ifentrytype{article}\OR\ifentrytype{book}\OR\ifentrytype{collection}\OR\ifentrytype{incollection}\OR\ifentrytype{mvbook}\OR\ifentrytype{mvcollection}\OR\ifentrytype{mvincollection}}
    {\clearfield{month}\clearfield{url}\clearfield{doi}\clearfield{urlyear}\clearfield{urlmonth}\clearfield{urlday}}}


\begin{document}
\begin{center}
{\huge Partisanship in Old, New and Non-Democracies}\\
\end{center}

\vspace{30pt}
\noindent\textbf{Instructor: }  \hfill
\textbf{Time and Location:} TBA\\
\textbf{Contact:} 
\hfill
\hfil \textbf{Office Hours:} TBA\\

\vspace{-20pt}



\subsection*{Partisanship in the United States}


\begin{enumerate}
    \item \parencite{dalton_apartisan_2012}
    \item \fullcite{dalton_apartisan_2012}
\end{enumerate}

\printbibliography[heading=bibintoc]

\end{document} 

Aqui está a saída. Observe os campos excessivos na citação completa no texto (estão ausentes nas Referências):

insira a descrição da imagem aqui

Qualquer ajuda, especialmente soluções simples e acessíveis, seria muito apreciada.

Responder1

Se você deseja controlar a urldatebibliografia e as citações de forma independente, \AtEveryBibitemeste \AtEveryCitekeyé o caminho a seguir.

\AtEveryBibitemexecuta suas ações em cada item da bibliografia, enquanto \AtEveryCitekeyexecuta suas ações em cada item citado. (Ver páginas 228-229 dobiblatexdocumentação).

Então, para se livrar, digamos, do titleúnico nas citações, você escolheria \AtEveryCitekey{\clearfield{title}}- o titleé então ignorado nas citações, mas ainda impresso na bibliografia. Analogamente, \AtEveryBibitem{\clearfield{urlyear}\clearfield{urlmonth}\clearfield{urlday}}elimina a data da URL apenas na bibliografia, não nas citações.

Para se livrar da data do URL em todos os lugares, você pode emitir

\AtEveryBibitem{\clearfield{urlyear}\clearfield{urlmonth}\clearfield{urlday}}
\AtEveryCitekey{\clearfield{urlyear}\clearfield{urlmonth}\clearfield{urlday}}

Restrições de tipo podem ser aplicadas por \ifentrytypeconstruções ainda mais complexas como esta

\AtEveryBibitem{%
  \ifentrytype{online}
    {}
    {\clearfield{urlyear}\clearfield{urlmonth}\clearfield{urlday}}}

\AtEveryCitekey{%
  \ifboolexpr{test {\ifentrytype{article}} or test {\ifentrytype{book}}}
    {\clearfield{urlyear}\clearfield{urlmonth}\clearfield{urlday}}
    {}}

O primeiro exemplo exclui a data do URL para todas @onlineas entradas, enquanto o segundo as exclui apenas para @articlee @book.


Por razões técnicas (eu poderia pensar em uma possível criação da data do rótulo), é melhor se livrar da data do URL o mais cedo possível, se você não quiser usá-la. Aqui entra o mapeamento de origem de Biber (ver §4.5.2Modificação Dinâmica de Dados, pp. 148-156 deo documento).

Queremos nos livrar do urldatecampo do seu .bibarquivo, então apenas o configuramos como null.

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldset=urldate, null]
    }
  }
}

Com o mapeamento de origem, restrições de tipo podem ser impostas da \pertypemesma forma

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \pertype{article}
      \pertype{book}
      \step[fieldset=urldate, null]
    }
  }
}

Este mapa agora se aplica apenas a @articles e @books. Infelizmente, como \pertypenão é possível usar negações como fizemos acima (como em "aplicar isso apenas a entradas que não são @online"), talvez valha a pena solicitar um recurso (- valeu a pena enosso desejo foi concedido).

Como o campo de data é um pouco especial na forma como é tratado por biblatex. No documento ele está disponível como três campos yeare month( daypara que se possa usar \AtEveryCitekey{\clearfield{month}}sem problemas), para fins de mapeamento de origem (lembre-se, o mapeamento de origem é um dos primeiros passos que Biber dá com um arquivo, até o momento nada foi feito interpretado ou lido do arquivo) muitas vezes a data é inserida como date = {YYYY-MM-DD}, é por isso que apenas excluir o monthcampo no mapeamento de origem só ajudará aqueles que inserirem a data como year = {2014}, month = {03}, day={04}(o que é possível, mas um pouco menos confortável). O que podemos fazer é tornar a data apenas anual com RegEx

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldset=month, null]
      \step[fieldsource=date,
            match=\regexp{([0-9]{4})-[0-9]{2}(-[0-9]{2})*},
            replace=\regexp{$1}]
    }
  }
}

Procuramos uma string no formato "AAAA-MM-DD" ou possivelmente apenas "AAAA-MM-DD" e retemos apenas a parte "AAAA", retendo assim apenas o ano. Também definimos o mês nullpara quem prefere inserir a data de forma mais detalhada.

MWE

\documentclass{article}
\usepackage[style=authoryear,backend=biber,mergedate=false]{biblatex}
\addbibresource{biblatex-examples.bib}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \pertype{online}
      \step[fieldset=urldate, null]
    }
    \map{
      \step[fieldset=month, null]
      \step[fieldsource=date,
            match=\regexp{([0-9]{4})-[0-9]{2}(-[0-9]{2})*},
            replace=\regexp{$1}]
    }
  }
}

\begin{document}
\cite{baez/online,itzhaki,markey}

\printbibliography
\end{document}

insira a descrição da imagem aqui

Abaixo está a saída sem qualquer mapeamento de origem para comparação

insira a descrição da imagem aqui

Responder2

A segunda solução do @moewe funcionou para mim (até para \fullcite), mas descobriaquiuma solução mais curta:

\AtEveryCitekey{\UseBibitemHook}

informação relacionada