Я использую biber и biblatex и хочу распечатать все диссертации до 2013 года. Когда я использую
year = {2010}
запись в файле .bib, каждая мысль работает нормально. Однако, если я использую
date = {2010-11-25}
Вместо года моя запись игнорируется. Я ведь соблюдаю формат даты, верно? Так в чем же проблема? Вот MWE.
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@THESIS{a,
AUTHOR = {Myself},
TITLE = {Me, myself and I},
Institution = {My University},
type = {Ph.D. thesis},
year = {2010}
} % date = {2010-11-25}
\end{filecontents*}
\usepackage[backend=biber,defernumbers=true,sorting=ydnt]{biblatex}
\addbibresource{\jobname.bib}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite=true]{
\step[fieldsource=year, match=\regexp{199([7-9])|200([0-9])|201([0-2])},final]
\step[fieldset=keywords, fieldvalue={,}, append]
\step[fieldset=keywords, fieldvalue={before2013}, append]
}}}
\begin{document}
Hello world.
\nocite{*}
\printbibliography[type=thesis,keyword=before2013,title=Thesis,resetnumbers=true]
\end{document}
решение1
Вместо исходного сопоставления Бибера вы можете сравнить year
поле с biblatex
в документе. (Мы можем использовать year
здесь независимо от того, использовали ли вы year
или , date
поскольку date
поле всегда разделяется на свои компоненты, когда оно записывается в .bbl
.)
Мы определяем чек
\defbibcheck{before2013}{%
\iffieldint{year}
{\ifnumless{\thefield{year}}{2013}
{}
{\skipentry}}
{\skipentry}}
и используйте эту проверку вместо ключевого слова
\printbibliography[type=thesis,check=before2013,title=Thesis,resetnumbers=true]
решение2
Вы \maps
устанавливаете только keyword=before2013
если year
это 1997 до 2012, но не если date
это 1997-01-01 до 2012-12-31. Индекс печатается только если keyword=before2013
. Таким образом, запись не будет печататься, если date
вместо year
используется .
Вы можете добавить похожую карту для , date
как у вас есть для year
:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@THESIS{a,
AUTHOR = {Myself},
TITLE = {Me, myself and I},
Institution = {My University},
type = {Ph.D. thesis},
year = {2010}
}
@THESIS{b,
AUTHOR = {Another},
TITLE = {Another, one and nobody},
Institution = {My University},
type = {Ph.D. thesis},
date = {2010-11-25}
}
@THESIS{c,
AUTHOR= {Never},
TITLE = {I'm to late},
Institution = {My University},
type = {Ph.D. thesis},
date = {2017-01-01}
}
\end{filecontents*}
\usepackage[backend=biber,defernumbers=true,sorting=ydnt]{biblatex}
\addbibresource{\jobname.bib}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite=true]{
\step[fieldsource=year, match=\regexp{199([7-9])|200([0-9])|201([0-2])},final]
\step[fieldset=keywords, fieldvalue={,}, append]
\step[fieldset=keywords, fieldvalue={before2013}, append]
}
\map[overwrite=true]{
\step[fieldsource=date, match=\regexp{199([7-9])|200([0-9])|201([0-2])},final]
\step[fieldset=keywords, fieldvalue={,}, append]
\step[fieldset=keywords, fieldvalue={before2013}, append]
}
}
}
\begin{document}
Hello world.
\nocite{*}
\printbibliography[type=thesis,keyword=before2013,title=Thesis,resetnumbers=true]
\end{document}
Другим решением было бы использование проверки, поскольку проверки выполняются, когда дата уже разделена:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@THESIS{a,
AUTHOR = {Myself},
TITLE = {Me, myself and I},
Institution = {My University},
type = {Ph.D. thesis},
year = {2010}
}
@THESIS{b,
AUTHOR = {Another},
TITLE = {Another, one and nobody},
Institution = {My University},
type = {Ph.D. thesis},
date = {2010-11-25}
}
@THESIS{c,
AUTHOR= {Never},
TITLE = {I'm to late},
Institution = {My University},
type = {Ph.D. thesis},
date = {2017-01-01}
}
\end{filecontents*}
\usepackage[backend=biber,defernumbers=true,sorting=ydnt]{biblatex}
\addbibresource{\jobname.bib}
\defbibcheck{before2013}{%
\iffieldint{year}% If an interger field year exists
{
\ifnumless{\thefield{year}}{2013}% and the field value is less than 2013
{}% do nothing
{\skipentry}% otherwise skip the entry
}
{\skipentry}% skip the entrie also if there isn't an integer field year
}
\begin{document}
Hello world.
\nocite{*}
\printbibliography[type=thesis,check=before2013,title=Thesis,resetnumbers=true]
\end{document}
Результат тот же.