
вкратце: Как сослаться на рабочий документ, который не имеет/не должен иметь institution
?
Theтип записи библатексаreport
следует использовать для:
Технический отчет, исследовательский отчет или официальный документ, опубликованный университетом или другим учреждением.
Обязательными полями для a report
являются author
, title
, type
, institution
, year
/ date
.
В соответствии сэта рекомендацияОбычно я использую этот report
тип для рабочих документов. Однако для некоторых серий рабочих документов добавление учреждения кажется излишним и приводит к ненужно загроможденным библиографическим записям. Это касается всех серий рабочих документов, где название учреждения является частью названия серии. Например, "Рабочие документы NBER" (очевидно) публикуются NBER.
Чтобы проиллюстрировать эту проблему, рассмотрим следующий пример:
\documentclass{scrartcl}
\usepackage[backend=biber,bibstyle=authoryear,dashed=false]{biblatex}
\addbibresource{mwe.bib}
\begin{filecontents}{mwe.bib}
@Report{Example1,
author = {Author, Sample},
date = {2020},
title = {A Report},
type = {The Institution's Working Paper Series},
number = {42}
}
@Report{Example2,
author = {Author, Sample},
date = {2020},
title = {A Report with Redundant Institution},
type = {The Institution's Working Paper Series},
number = {42},
institution = {The Institution}
}
\end{filecontents}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
- Проблема: Я предпочитаю пример 1 (без указания учреждения), но
institution
поле обязательно для заполнения. - Обходные пути / Что я пробовал:
- Просто проигнорируйте то, что
institution
обязательно, и оставьте пустым. Это работает (см. выше), но нарушает спецификацию модели данных. Но: Это генерирует множество раздражающих предупреждений при проверке модели данных, и, более того, я не уверен, что будущие версии biber/biblatex останутся такими же снисходительными к отсутствию обязательных полей. - Предоставлятьнекоторыйзаполнитель учреждение, а затем очистить поле по линиям,
\AtEveryBibitem{\ifentrytype{report}{\clearfield{institution}…
но так как я не хочу очищатьinstitution
длявсеотчеты, мне нужен какой-то постоянный «волшебный заполнитель» (или ключевое слово) и очисткаinstitution
только при условии соблюдения этого волшебного заполнителя, который… беспорядочен, подвержен ошибкам и загромождает мой файл BIB. - Просто используйте другой тип записи, который не требует учреждения. Естественным кандидатом может быть
misc
– но у него нетnumber
поля. В качестве альтернативы я мог бы (ab-) использоватьmanual
, но это печатаетnumber
передtype
, тогда как мне нужен обратный порядок:Автор, Образец (2020c). Отчет с избыточным учреждением. 42. Серия рабочих документов учреждения.
- Просто используйте другой тип записи, не требующий учреждения,снова: Использую
manual
тип withseries={The Institution's Working Paper Series}
, но мне не нравится использовать неправильный тип записи (manual
), и использованиеseries
wheretype
более уместно (на мой взгляд).
- Просто проигнорируйте то, что
- Вопрос: Как сослаться на рабочий документ, который не имеет / не должен иметь
institution
? Я не уверен, какой из моих подходов выше является наиболее многообещающим, но я бы определенно предпочел решение с допустимой моделью данных (в отличие от (1)), разумной семантикой (в отличие от (4)) и минимумом вещей, которые могут пойти не так (в отличие от (2)). Так что, возможно, (3) и изменение порядкаtype
иnumber
formisc
было бы лучшим вариантом… но я открыт и благодарен за любые предложения.
решение1
вкратцеВыберите вариант 1. Если предупреждение о проверке модели данных вас так сильно беспокоит, определите новую модель данных, которая не требует institution
(см. ниже).
Различие между «обязательными» и «необязательными» полями biblatex
немного менее строгое, чем может показаться на первый взгляд.
За исключением кода проверки модели данных, в коде нет ничего biblatex
, что знало бы об обязательных или необязательных полях.Документацияbiblatex
говорит
Обратите внимание, что «обязательные» поля не являются строго обязательными во всех случаях, см. §2.3.2 для получения подробной информации. Поля, отмеченные как «необязательные», являются необязательными в техническом смысле. Правила библиографического форматирования обычно требуют больше, чем просто «обязательные» поля.
о «обязательных» и «необязательных» полях. А §2.3.2 далее объясняет
§2.3.2Отсутствующие и упущенные данные
Поля, отмеченные как «обязательные» в §2.1.1, не являются строго обязательными во всех случаях. Стили библиографии, которые поставляются с этим пакетом, могут обойтись всего лишь одним
title
полем для большинства типов записей. Книга, опубликованная анонимно, периодическое издание без явного редактора или руководство по программному обеспечению без явного автора не должны представлять проблемы в том, что касается библиографии. Однако стили цитирования могут иметь разные требования. Например, схема цитирования «автор-год», очевидно, требует /author
иeditor
поляyear
.
Для меня «обязательные» и «необязательные» поля — это скорее намек разработчикам стилей на то, чего они могут ожидать, чем жесткое требование для пользователей и их .bib
баз данных. В общем, я бы сказал, что если в ваших записях есть все поля, перечисленные в документации как «обязательные», вы можете ожидать, что вывод будет выглядеть разумно. Если у вас нет всех обязательных полей, вывод все равно может быть в порядке (и во многих случаях так и будет), но если вы будете жаловаться, если вы недовольны результатом, у вас может не быть опоры. Ваша библиография не будет автоматически плохой, если у вас нет всех обязательных полей, но нет подразумеваемой гарантии, что она будет выглядеть хорошо.
Я думаю, что важно помнить советbtxdoc
- Тринадцать типов записей стандартного стиля достаточно хорошо справляются с форматированием большинства записей, но ни одна схема с тринадцатью форматами не может сделать все идеально. Таким образом, вы можете свободно проявлять творческий подход к использованию этих типов записей (но если вам приходится проявлять излишнюю креативность, есть большая вероятность, что вы используете неправильный тип записи).
- Не относитесь к названиям полей слишком серьезно. Иногда, например, вам может потребоваться включить адрес издателя вместе с названием издателя в поле
publisher
, а не вводить его вaddress
поле. Или иногда сложные записи работают лучше, когда вы разумно используете полеnote
.- Не воспринимайте предупреждения слишком серьезно. Иногда, например, год появляется в названии, как вВсемирный альманах Гнуса 1966 года. В этом случае лучше пропустить поле
year
и проигнорировать предупреждающее сообщение BibTeX.
Я не думаю, что я полностью согласен с примером в последнем пункте, но общая идея — это то, с чем я определенно согласен. В любом случае, суть в следующем: не берите модель данныхслишкомсерьезно. В конце концов, скорее всего, именно результат печати вас больше всего и интересует.
Я не могу сказать точно, но, похоже, некоторые обязательные/необязательные поля взяты напрямую изДокументация BibTeXbtxdoc
. Так что в данном случае institution
это, вероятно, «обязательное» поле по историческим, а не по техническим причинам.
Что самое худшее, что может произойти, если вы не включите «обязательное» поле? Грубо говоря, я бы сказал, что самое худшее, что может произойти, это то, что ваш стиль ожидает, что поле будет присутствовать, и помещает что-то в institution
поле или вокруг него, что выглядит неуместно, если поле отсутствует.
Давайте посмотрим на это с более технической точки зрения. Как упоминалось выше, на самом деле есть только один фрагмент кода biblatex
, который знает о том, какие поля обязательны, а какие необязательны: объявления ограничений модели данных. Эти объявления ограничений передаются в Biber для проверки модели данных и не используются где-либо еще на стороне biblatex
. Так что с технической точки зрения biblatex
абсолютно не заботятся об ограничениях модели данных. Они используются только для выдачи подсказок/предупреждений пользователям.
Гораздо более важным аспектом всего этого «обязательного»/«необязательного» является неявные предположения, которые оно позволяет делать разработчикам стилей. Обычно от разработчиков стилей ожидается, что они будут писать свои стили таким образом, чтобы исключение необязательных полей не делало вывод плохим. Можно привести аргумент, что для обязательных полей такого ожидания нет. Если обязательные поля отсутствуют, это ответственность пользователя. Эти неявные предположения не кодифицированы, и то, насколько они хотят полагаться на эти предположения, полностью зависит от разработчиков.
Общие принципы работы стилей biblatex
и biblatex
делают чрезвычайно простым защиту от пропущенных полей в большинстве ситуаций без дополнительных усилий. Явные меры предосторожности против пропущенных полей необходимо принимать только в очень небольшом меньшинстве крайних случаев.
Я ожидаю, что в подавляющем большинстве стилей @report
записи будут выглядеть нормально, даже если нет institution
.
Давайте немного обсудим предложенные вами обходные пути.
Просто не заполняйте
institution
поле, если оно вам не нужно.Мне это кажется лучшим и самым простым способом действий. Конечно, вы не указываете поле
required
, но если вывод выглядит лучше, кто вас обвинит? Проверка модели данных должна быть включена явно, а предупреждения в любом случае носят несколько искусственный характер (как упоминалось выше), поэтому вы имеете полное право игнорировать их. Стандартныеbiblatex
стили крайне маловероятно изменятся таким образом, что записи безinstitution
этого, которые выглядят нормально сейчас, будут выглядеть хуже в будущем.Используйте (магический или какой-либо другой) заполнитель.
Это только обманет проверку модели данных. Если вы позже избавитесь от значения поля с помощью
\clearfield
, поле все равно исчезнет с точки зрения стиля. Так что если вы беспокоитесь о том, что что-то будет выглядеть плохо в выводе, вы все еще не в безопасности.(и 4.) Используйте другой тип записи
Это, конечно, возможно, но на самом деле это не намного лучше, чем другие варианты. Вы бы отказались от настоящей семантической связи ради гораздо более искусственной цели правильного заполнения требуемых полей.
Наверное, никого не удивит, что я отдаю предпочтение варианту 1.
Если вас беспокоит предупреждение, которое вы получаете при проверке модели данных, вы можете переписать ограничения модели данных, исключив их institution
из списка обязательных полей (исходные ограничения можно найти вblx-dm.def
).
\documentclass{article}
\begin{filecontents}{report-wo-institution.bib}
\ResetDatamodelConstraints
\DeclareDatamodelConstraints[
article,
book,
inbook,
bookinbook,
suppbook,
booklet,
collection,
incollection,
suppcollection,
manual,
misc,
mvbook,
mvcollection,
online,
patent,
periodical,
suppperiodical,
proceedings,
inproceedings,
reference,
inreference,
report,
set,
thesis,
unpublished]{
\constraint[type=mandatory]{
\constraintfieldsxor{
\constraintfield{date}
\constraintfield{year}
}
}
}
\DeclareDatamodelConstraints[set]{
\constraint[type=mandatory]{
\constraintfield{entryset}
}
}
\DeclareDatamodelConstraints[article]{
\constraint[type=mandatory]{
\constraintfield{author}
\constraintfield{journaltitle}
\constraintfield{title}
}
}
\DeclareDatamodelConstraints[book,mvbook,mvcollection,mvreference]{
\constraint[type=mandatory]{
\constraintfield{author}
\constraintfield{title}
}
}
\DeclareDatamodelConstraints[inbook,bookinbook,suppbook]{
\constraint[type=mandatory]{
\constraintfield{author}
\constraintfield{title}
\constraintfield{booktitle}
}
}
\DeclareDatamodelConstraints[booklet]{
\constraint[type=mandatory]{
\constraintfieldsor{
\constraintfield{author}
\constraintfield{editor}
}
\constraintfield{title}
}
}
\DeclareDatamodelConstraints[collection,reference]{
\constraint[type=mandatory]{
\constraintfield{editor}
\constraintfield{title}
}
}
\DeclareDatamodelConstraints[incollection,suppcollection,inreference]{
\constraint[type=mandatory]{
\constraintfield{author}
\constraintfield{editor}
\constraintfield{title}
\constraintfield{booktitle}
}
}
\DeclareDatamodelConstraints[dataset]{
\constraint[type=mandatory]{
\constraintfield{title}
}
}
\DeclareDatamodelConstraints[manual]{
\constraint[type=mandatory]{
\constraintfield{title}
}
}
\DeclareDatamodelConstraints[misc,software]{
\constraint[type=mandatory]{
\constraintfield{title}
}
}
\DeclareDatamodelConstraints[online]{
\constraint[type=mandatory]{
\constraintfield{title}
\constraintfieldsor{
\constraintfield{url}
\constraintfield{doi}
\constraintfield{eprint}
}
}
}
\DeclareDatamodelConstraints[patent]{
\constraint[type=mandatory]{
\constraintfield{author}
\constraintfield{title}
\constraintfield{number}
}
}
\DeclareDatamodelConstraints[periodical]{
\constraint[type=mandatory]{
\constraintfield{editor}
\constraintfield{title}
}
}
\DeclareDatamodelConstraints[proceedings,mvproceedings]{
\constraint[type=mandatory]{
\constraintfield{title}
}
}
\DeclareDatamodelConstraints[inproceedings]{
\constraint[type=mandatory]{
\constraintfield{author}
\constraintfield{title}
\constraintfield{booktitle}
}
}
\DeclareDatamodelConstraints[report]{
\constraint[type=mandatory]{
\constraintfield{author}
\constraintfield{title}
\constraintfield{type}
}
}
\DeclareDatamodelConstraints[thesis]{
\constraint[type=mandatory]{
\constraintfield{author}
\constraintfield{title}
\constraintfield{type}
\constraintfield{institution}
}
}
\DeclareDatamodelConstraints[unpublished]{
\constraint[type=mandatory]{
\constraintfield{author}
\constraintfield{title}
}
}
\DeclareDatamodelConstraints{
\constraint[type=data, datatype=isbn]{
\constraintfield{isbn}
}
\constraint[type=data, datatype=issn]{
\constraintfield{issn}
}
\constraint[type=data, datatype=ismn]{
\constraintfield{ismn}
}
\constraint[type=data, datatype=date]{
\constraintfield{date}
\constraintfield{eventdate}
\constraintfield{origdate}
\constraintfield{urldate}
}
\constraint[type=data, datatype=pattern, pattern=\regexp{(?:sf|sm|sn|pf|pm|pn|pp)}]{
\constraintfield{gender}
}
}
\end{filecontents}
\usepackage[backend=biber,bibstyle=authoryear,dashed=false]{biblatex}
\begin{filecontents}{\jobname.bib}
@Report{Example1,
author = {Author, Sample},
date = {2020},
title = {A Report},
type = {The Institution's Working Paper Series},
number = {42},
}
@Report{Example2,
author = {Author, Sample},
date = {2020},
title = {A Report with Redundant Institution},
type = {The Institution's Working Paper Series},
number = {42},
institution = {The Institution},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
Вывод документа останется прежним, но biber -V
об отсутствующих символах s не будет сообщаться institution
.
Конечно,institution
поле еще не дано. Но я думаю, все сводится к тому,если вы не хотите даватьinstitution
вам придется жить с последствиями не указания этого поля.В стандартных стилях (и я ожидаю, что в большинстве добавленных стилей) в принципе нет никаких последствий, если не указывать institution
. Если вы считаете, что возможные будущие последствия слишком рискованны, ваш единственный вариант — либо заполнить поле institution
значением (которое будет напечатано), либо выбрать другой тип записи. Если первый вариант невозможен, то ваш единственный выход — другой тип. Но другой тип семантически менее удовлетворителен и может не соответствовать всем аспектам с @report
максимально возможной точностью.