Campo personalizado no BibLaTeX

Campo personalizado no BibLaTeX

Gostaria de permitir um campo personalizado opcional em minhas entradas .bib. Não preciso que esses campos façam parte da bibliografia, mas gostaria de poder acessá-los via

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

A resposta provavelmente está em algum lugar nas referências listadas abaixo, mas minhas tentativas iniciais de adaptação \DeclareSourcemapfalharam \DeclareFieldFormat.

Referências:

Código:

\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}

Responder1

Desde que você precise apenas de alguns campos e esteja disposto a sacrificar um pouco a semântica de marcação (para as citações), você pode usar os "campos personalizados" biblatexfornecidos (os estilos padrão não os usam, mas se você está usando um não padrão, talvez seja necessário verificar se ele está realmente "vago").

Dado que você mencionou nos comentários que gostaria de um nome personalizado para o seu campo, isso pode ser conseguido usando um SourceMap para copiar o valor do seu campo personalizado para um dos disponíveis no biblatexmodelo de dados do. Isso significa que você pode ter seu nome personalizado em seu .bibarquivo, mas ao fazer a citação você ainda terá que usar um campo biblatex"sabe".

Isso poderia ser algo como:

\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}

insira a descrição da imagem aqui

A vantagem desta abordagem é que não é necessário estender o modelo de dados, por isso é mais simples. Mas se você realmente precisa usar o nome do campo personalizado em ambos os lados, pelo que sei, a única maneira é estender o modelo de dados para incluir o seu campo. Nesse caso, a resposta canônica é a de @moewe em:Como posso criar tipos de dados totalmente novos com BibLaTeX/Biber?.

informação relacionada