Пользовательское поле в BibLaTeX

Пользовательское поле в BibLaTeX

Я хотел бы разрешить необязательное пользовательское поле в моих записях .bib. Мне не нужно, чтобы эти поля были частью библиографии, но я хотел бы иметь доступ к ним через

\citefield{<entry-key>}{<custom-field-name>}

Ответ, вероятно, можно найти где-то в ссылках, перечисленных ниже, но мои первые попытки адаптировать их так \DeclareSourcemapи \DeclareFieldFormatне увенчались успехом.

Использованная литература:

Код:

\begin{filecontents}{mybib.bib}
@book{knuth1984texbook,
  title={The texbook},
  author={Knuth, D.E. and Knuth, A.D. and Bibby, D. and American Mathematical Society and Addison-Wesley Publishing Company and Addison-Wesley},
  isbn={9780201134483},
  lccn={85030845},
  series={Computers \& typesetting},
  url={https://books.google.com/books?id=hEYuAQAAIAAJ},
  year={1984},
  publisher={Addison-Wesley},
  myFieldA={Useful Book},
  myFieldB={on Shelf 4},
}
@book{goossens1994latex,
  title={The LaTeX Companion},
  author={Goossens, M. and Mittelbach, F. and Samarin, A.},
  isbn={9780201541991},
  lccn={lc93023150},
  series={Addison-Wesley series on tools and techniques for computer typesetting},
  url={https://books.google.com/books?id=54A3MuBzIrEC},
  year={1994},
  publisher={Addison-Wesley},
  myFieldA={Also Useful Book},
  myFieldB={on Shelf 5},
}
\end{filecontents}

%% -----------------

\documentclass{article}
\usepackage{biblatex}
\addbibresource{mybib.bib}

\begin{document}
    This should print ``Also Useful Book'':
    \citefield{goossens1994latex}{myFieldA}
\end{document}

решение1

Если вам нужно всего несколько полей и вы готовы немного пожертвовать семантикой разметки (для ссылок), вы можете обойтись без «пользовательских полей» biblatex(стандартные стили их не используют, но если вы используете нестандартный, вам, возможно, придется проверить, действительно ли он «свободен»).

Учитывая, что вы упомянули в комментариях, что вы хотели бы иметь пользовательское имя для вашего поля, это можно сделать, используя SourceMap для копирования значения из вашего пользовательского поля в одно из доступных в biblatexмодели данных. Это означает, что вы можете иметь свое пользовательское имя в своем .bibфайле, но при фактическом создании цитаты вам все равно придется использовать поле biblatex«знает».

Это может выглядеть примерно так:

\begin{filecontents}[overwrite]{mybib.bib}
@book{knuth1984texbook,
  title={The texbook},
  author={Knuth, D.E. and Knuth, A.D. and Bibby, D. and American Mathematical Society and Addison-Wesley Publishing Company and Addison-Wesley},
  isbn={9780201134483},
  lccn={85030845},
  series={Computers \& typesetting},
  url={https://books.google.com/books?id=hEYuAQAAIAAJ},
  year={1984},
  publisher={Addison-Wesley},
  myFieldA={Useful Book},
  myFieldB={on Shelf 4},
}
@book{goossens1994latex,
  title={The LaTeX Companion},
  author={Goossens, M. and Mittelbach, F. and Samarin, A.},
  isbn={9780201541991},
  lccn={lc93023150},
  series={Addison-Wesley series on tools and techniques for computer typesetting},
  url={https://books.google.com/books?id=54A3MuBzIrEC},
  year={1994},
  publisher={Addison-Wesley},
  myFieldA={Also Useful Book},
  myFieldB={on Shelf 5},
}
\end{filecontents}

%% -----------------

\documentclass{article}
\usepackage{biblatex}
\addbibresource{mybib.bib}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=myFieldA]
      \step[fieldset=usera, origfieldval]
      \step[fieldsource=myFieldB]
      \step[fieldset=userb, origfieldval]
    }
  }
}

\begin{document}
This should print ``Also Useful Book'':
\citefield{goossens1994latex}{usera}

This should print ``on Shelf 5'':
\citefield{goossens1994latex}{userb}
\end{document}

введите описание изображения здесь

Преимущество этого подхода в том, что вам не нужно расширять модель данных, поэтому он проще. Но если вам действительно нужно использовать имя вашего пользовательского поля с обеих сторон, то, насколько я могу судить, единственный способ — расширить модель данных, включив в нее ваше поле. В этом случае канонический ответ — это ответ @moewe по адресу:Как создать совершенно новые типы данных с помощью BibLaTeX/Biber?.

Связанный контент