\fullcite を使用すると、biblatex 内の余分なフィールドを削除できませんでした

\fullcite を使用すると、biblatex 内の余分なフィールドを削除できませんでした

と Zoteroを組み合わせると、biblatex-chicago参考文献に過剰なフィールドが多数生成されます。この問題は、次のような注意事項を前文に追加することで解決できます。

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

(前回の質問の回答に詳しく記載されています:Biblatex Chicago の著者日付形式のフィールドが多すぎる

この解決策は私にとってはうまくいきましたが、コマンドを使用してシラバスを作成する必要があります\fullcite。残念ながら、この解決策では、参考文献自体の外にある完全な参考文献エントリの問題は解決されません。

ここに参考文献を含むコードがあります (著者の名と姓を正しい順序で取得するために、次のソリューションを使用します)。Biblatex-chicago: \fullcite は姓と名を反転します):

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

出力は次のとおりです。本文中の完全な引用に余分なフィールドがあることに注意してください (参考文献には存在しません)。

ここに画像の説明を入力してください

どのようなご助力でも、特にシンプルでアクセスしやすい解決策があれば大変助かります。

答え1

urldate参考文献と引用文献を個別に制御したい場合は、\AtEveryBibitemこれ\AtEveryCitekeyが最適な方法です。

\AtEveryBibitemは参考文献のすべての項目でアクションを実行しますが、 は\AtEveryCitekey引用されたすべての項目でアクションを実行します。(228-229ページを参照)biblatexドキュメンテーション)。

したがって、たとえば引用文献内の のみを削除するにはtitle、 を使用します。\AtEveryCitekey{\clearfield{title}}title引用文献内では無視されますが、参考文献には引き続き印刷されます。 同様に、 は\AtEveryBibitem{\clearfield{urlyear}\clearfield{urlmonth}\clearfield{urlday}}URL の日付を参考文献内でのみ削除し、引用文献内では削除しません。

URLの日付をどこからでも削除するには、次のようにします。

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

\ifentrytype型制限は、次のように、またはさらに複雑な構造で適用できます。

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

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

最初の例では、エントリを除くすべての URL 日付が削除され@online、2 番目の例では、および の URL 日付のみが削除され@articleます@book


技術的な理由(ラベルの日付作成の可能性も考えられる)から、URLの日付をまったく使用したくない場合は、できるだけ早く削除する方がよいでしょう。ここで、Biberのソースマッピングが登場します(§4.5.2を参照)。データの動的変更、148-156ページドク)。

urldateファイル内のフィールドを削除したい.bibので、 に設定しますnull

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

\pertypeソースマッピングでは、次のようにして型制限を課すことができます。

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

@articleこのマップは、現在s とsにのみ適用されます@book。残念ながら、 では\pertype上記のように否定を使用することはできません (「 ではないエントリにのみ適用する@online」など)。これは機能リクエストの価値があるかもしれません (- 1 つだけの価値がありました)。私たちの願いは叶えられました)。

日付フィールドは、 による処理方法が少し特殊ですbiblatex。 ドキュメントではyear、 、monthの3 つのフィールドとして使用できますday(問題なく使用できます\AtEveryCitekey{\clearfield{month}})。ソース マッピングの目的で (ソース マッピングは Biber がファイルに対して行う最初の手順の 1 つであり、この時点ではファイルから何も解釈または読み込まれていないことに注意してください)、日付は として入力されることがよくありますdate = {YYYY-MM-DD}。そのため、monthソース マッピングでフィールドを削除するだけでは、日付を として入力するユーザーのみに役立ちます year = {2014}, month = {03}, day={04}(これは可能ですが、少し不便です)。ただし、正規表現を使用して日付を年のみにすることはできます。

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

「YYYY-MM-DD」または「YYYY-MM-DD」形式の文字列を検索し、「YYYY」部分のみを保持して、年のみを保持します。null日付をより詳細に入力することを好む人のために、月も設定します。

ムウェ

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

与える

ここに画像の説明を入力してください

以下は比較のためにソースマッピングなしの出力です。

ここに画像の説明を入力してください

答え2

@moeweの2番目の解決策は私にとってはうまくいきました(でも\fullcite)が、ここより短い解決策:

\AtEveryCitekey{\UseBibitemHook}

関連情報