和 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
引用的每个条目执行其操作。(参见biblatex
文档)。
因此,要删除title
引文中的唯一内容,您可以使用\AtEveryCitekey{\clearfield{title}}
-title
然后在引文中忽略该内容,但仍会打印在参考书目中。类似地,\AtEveryBibitem{\clearfield{urlyear}\clearfield{urlmonth}\clearfield{urlday}}
删除参考书目中的 URL 日期,而不删除引文中的 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
,而第二个例子仅删除@article
和 的URL 日期@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 和@book
s。遗憾的是,由于\pertype
不能像上面那样使用否定(如“仅将其应用于不是@online
”的条目),也许这值得提出功能请求(- 值得一试)我们的愿望已经实现)。
由于日期字段的处理方式有些特殊biblatex
。在文档中,它有三个字段year
,month
和day
(因此可以\AtEveryCitekey{\clearfield{month}}
毫无问题地使用),出于源映射目的(请记住,源映射是 Biber 对文件采取的第一步,此时尚未解释或读取文件中的任何内容),日期通常输入为date = {YYYY-MM-DD}
,这就是为什么month
在源映射中删除字段只会帮助那些将日期输入为的人 year = {2014}, month = {03}, day={04}
(这是可能的,但稍微不太舒服)。但是我们可以做的是,我们可以使用 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}]
}
}
}
我们寻找“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 的第二个解决方案对我来说是有效的(甚至适用于\fullcite
),但我发现这里一个更短的解决方案:
\AtEveryCitekey{\UseBibitemHook}