自定义 bibtex 条目和引用格式

自定义 bibtex 条目和引用格式

我想创建一个自定义的 BibTeX(类似)条目,比如说@businesscard包含姓名、电话号码和年龄。我想象它看起来像这样

@buisinesscard{Mister_Boss_Sir,
name = {Boss Sir},
phonenumber = {1234567890},
age = {61}}

@buisinesscard{Mrs_Boss_lady,
name = {Boss Lady},
phonenumber = {0987654321},
age = {35}}

然后,当我引用名片(或以某种方式引用它)时,我希望在文档中显示名片

所以下面的代码

\begin{document}
first text
\cite(Mr_Boss_Sir)

second text
\end{document}

将产生以下结果:

在此处输入图片描述

有什么办法吗?其实并不需要 bibtex 或 cite,只要能将信息打包,然后格式化成包就好了!

答案1

这可以通过来完成biblatex,但需要一些机器。

Ulrike Fischer 写道biblatex一篇关于使用“非标准”应用程序的TUGBoat 文章,她在其中做了类似的事情。 在使用 BibLaTeX 进行 D&D我展示了一个在 D&D 中使用角色数据的示例biblatex。从那里到名片只有一小步。

创建新条目类型和使用它的详细信息在如何使用 BibLaTeX/Biber 创建全新的数据类型?。借助该答案,应该可以理解以下代码中发生的情况。

粗略地说,您需要定义一个具有新字段的新条目类型,并通过数据模型(.dbx)文件让 Biber 知道它们。

然后只需以合适的格式打印可用数据即可。具体来说,我们定义了一个新的引用命令,用于打印带有tcolorbox名片详细信息的引用。

\begin{filecontents}{businesscard.dbx}
\DeclareDatamodelEntrytypes{businesscard}
\DeclareDatamodelFields[type=field,datatype=literal]{
  phonenumber,
}
\DeclareDatamodelFields[type=list, datatype=name]{
  name,
}
\DeclareDatamodelFields[type=field, datatype=integer]{
  age,
}
\DeclareDatamodelEntryfields[businesscard]{
  name,
  phonenumber,
  age,
}
\end{filecontents}
\documentclass[english]{article}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[datamodel=businesscard, backend=biber]{biblatex}
\usepackage{tcolorbox}

\usepackage{hyperref}

\NewBibliographyString{name,phonenumber,age}
\DefineBibliographyStrings{english}{
  name        = {name},
  phonenumber = {phonenumber},
  age         = {age},
}

\DeclareCiteCommand{\businesscite}
  {}
  {\usebibmacro{businesscite}}
  {}
  {}

\DeclareFieldFormat{businesscard}{%
  \begin{tcolorbox}
  #1
  \end{tcolorbox}} 

\DeclareNameWrapperFormat{name}{\bibstring{name}\addcolon\space#1}
\DeclareFieldFormat{age}{\bibstring{age}\addcolon\space#1}
\DeclareFieldFormat{phonenumber}{\bibstring{phonenumber}\addcolon\space#1}

\newbibmacro{businesscite}{%
  \printtext[businesscard]{%
    \printnames{name}%
    \setunit{\par}%
    \printfield{phonenumber}%
    \setunit{\par}%
    \printfield{age}%
  }%
}

\begin{filecontents*}{\jobname.bib}
@businesscard{Mister_Boss_Sir,
  name        = {Boss Sir},
  phonenumber = {1234567890},
  age         = {61},
}
@businesscard{Mrs_Boss_lady,
  name        = {Boss Lady},
  phonenumber = {0987654321},
  age         = {35},
}
\end{filecontents*}
\addbibresource{\jobname.bib}

\begin{document}
\businesscite{Mister_Boss_Sir}

\businesscite{Mrs_Boss_lady}
\end{document}

两张名片。

相关内容