
Сочетание biblatex-chicago
и Zotero производит много избыточных полей в библиографии. Эту проблему можно решить, добавив в преамбулу предостережения вроде этого:
\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-229biblatex
документация).
Итак, чтобы избавиться, скажем, от 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
записей, кроме , а во втором — только для @article
и @book
.
По техническим причинам (я мог бы подумать о возможном создании даты метки) лучше избавиться от даты URL как можно раньше, если вы вообще не хотите ее использовать. Здесь вступает в дело SourceMapping Бибера (см. §4.5.2Динамическое изменение данных, стр. 148-156док).
Мы хотим избавиться от urldate
поля в вашем .bib
файле, поэтому просто устанавливаем его на null
.
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldset=urldate, null]
}
}
}
С помощью sourcemapping ограничения по типу могут быть наложены \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}}
без каких-либо проблем), для целей сопоставления источников (помните, сопоставление источников — один из первых шагов, которые Бибер предпринимает с файлом, на этом этапе ничего не было интерпретировано или прочитано из файла) часто дата вводится как 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}