我想创建一个自定义的 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}