
Я пытаюсь использовать date
поле записи в bib
файле для другой записи. Идея в том, что я использую другой источник для датировки записи (которая сама по себе недатирована) и хочу избежать дублирования данных.
Biblatex предоставляет простой способ использования поля из другой записи в bib
файле с помощью \entrydata{entry_key}{\thefield{field}}
команды.
Хотя это хорошо работает для таких полей, как title
и хотя использование \printdate
команды также работает, если используется, например, в title
поле ( \entrydata{entry_key}{\prindate}
), использование \entrydata{entry_key}{\thefield{date}}
в date
поле не работает.
Я предполагаю, что это связано с природой поля date
, которое не является простой строкой, но после того, как я эмпирически перепробовал все команды, которые только мог придумать в руководстве по biblatex, ничего не работает.
Кроме того, date
поле, которое я хочу использовать, будет иметь следующий YYYY-MM-DD
вид: Я хочу, чтобы полная дата сохранялась для сортировки, но печатался только год.
Любая помощь приветствуется.
МВЭ:
\documentclass{article}
\usepackage{biblatex}
\usepackage{filecontents}
\begin{filecontents}{sources.bib}
@article{testart1,
title = {First Article Title},
journaltitle = {Something Times},
date = {1964-02-01},
}
@article{testart2,
title = {\entrydata{testart1}{\thefield{title}}},% using the title of testart1 entry, working
journaltitle = {Another Times},
date = {1975-05-10},
}
@video{testvid,
title = {A Film Title},
editor = {Doe, John},
date = {},% should use date field from testart1 entry, not working with \thefield{date}
}
\end{filecontents}
\addbibresource{sources.bib}
\begin{document}
Lorem.
\nocite{*}
\printbibliography
\end{document}
решение1
Нашел простое решение:
Чтобы использовать date
поле другой записи нагрудного номера, нужно просто добавить crossref
поле к целевой записи, содержащее ключ другой записи (исходной записи).
Использование crossref
имеет побочный эффект: оно заполняет запись назначения ненужными полями из исходной записи, если эти поля еще не определены (обычная ситуация, если исходная и целевая записи имеют разные типы). Это легко предотвратить, используя \DeclareDataInheritance
. Например:
\DeclareDataInheritance{article}{music}{% source entry type / destination entry type
\inherit{date}{date}% field we want to use
\noinherit{entrysubtype}% fields we don't want to use
\noinherit{author}
\noinherit{title}
\noinherit{subtitle}
\noinherit{journaltitle}
\noinherit{pages}
}