人物列表类似于参考书目

人物列表类似于参考书目

在我的文档中,我强调了提到的名字,现在我想在附录中提供有关它们的一些附加信息。目前我做了类似的事情:

\documentclass{scrartcl}
\usepackage{fontspec}
\setmainfont[Ligatures=TeX]{STIXGeneral}
\def\name#1{{\texorpdfstring{\smaller\MakeUppercase{#1}}{#1}}}
\begin{document}
    Look at the works of \name{Alexandrov} and \name{Atkinson}.
    \clearpage
    \begin{section}*{Index of People}
        \begin{itemize}
            \item \name{Alexandrov}: Па́вел Серге́евич Алекса́ндров (Pavel Sergeyevich Alexandrov), \mbox{1896-05-07} – \mbox{1982-11-16}
            \item \name{Atkinson}: Frederick Valentine Atkinson, \mbox{1916-01-25} – \mbox{2002-11-13}
        \end{itemize}
    \end{section}
\end{document}

是否可以将有关人员的信息保存在某些数据库文件中,就像对书目所做的那样,并自动格式化?是否有可用的工具或可以使用bibtex

JLDiaz 的回答似乎是一个很好的起点。更具体地说,数据文件应该如下所示:

@person{alexandrov,
    name = {Па́вел Серге́евич Алекса́ндров},
    latin = {Pavel Sergeyevich Alexandrov},
    birthdate = {1896-05-07},
    deathdate = {1982-11-16}
}

当然,可能会添加更多字段(例如职业、出生和死亡地点、国籍)。因此,无论我使用的是bibtex还是gloss包,我都必须定义自己的样式文件。这两种方法有什么区别?

至于定义自定义条目类型,我发现Biblatex 和自定义 bibtex 条目 - 可能吗?,但那里的解释似乎结构不完善/不完整,而且可能过时了。也许有人可以详细说明一下。

答案1

datatool软件包就是为此类事情而设计的。.bib如果您愿意,甚至可以将其与文件一起使用。有关更多详细信息,请参阅(非常详细的)软件包文档。我将提供一个更简单的版本。

假设你有一个namedb.csv如下文件:

"Name","Latin","Birthdate","Deathdate"
"Па́вел Серге́евич Алекса́ндров","Pavel Sergeyevich Alexandrov","1896--05--07","1982--11--16"
"Па́вел","Pavel","1896--01--01","1982--01--01" 

然后你可以做一个 itemize 环境或者(我认为更好)一个(长)表:

\documentclass{article}

\usepackage{libertineotf}% don't have your STIX font
\usepackage[margin=2cm]{geometry}
\usepackage{longtable,datatool}
\usepackage{enumitem}
\usepackage{parskip}
\parindent0pt
% ------------------------------8<------------------------------ %
\begin{document}
\DTLloaddb{namedb}{namedb.csv}%

% --- Itemize version
\begin{itemize}
\DTLforeach{namedb}{%
% "Name","Latin","Birthdate","Deathdate"
\name=Name,%
\latinname=Latin,%
\birthdate=Birthdate,%
\deathdate=Deathdate% pay attention to spacing in this command
}%
{%
 \item \name: \latinname, \birthdate\,---\,\deathdate
}
\end{itemize}

% --- Longtable version (for tables longer than one page)
\DTLdisplaylongdb[%
% caption={Index of People},%
 label={peopleindex},%
 contcaption={Index of People (continued)},% <-- if more than one page
 foot={\em Continued on next page},%
 lastfoot={},%
 ]{namedb}

\end{document}

事实上,还有很多事情可以做。但由于我不知道您的确切需求,所以我将尽量简单。

答案2

您可能希望将 biblatex 2.0 与 biber 1.0 一起用作 bibtex 替换后端。新\DeclareDatamodel功能将允许您在 .bib 文件中定义此类条目,只要您编写一些样式代码来格式化它们,然后就可以使用过滤器打印此类列表\printbibliography。这是一个可行的粗略示例 - 我没有微调字体切换等。

\begin{filecontents}{test.bib}
@PERSON{alexandrov,
  NAME      = {Па́вел Серге́евич Алекса́ндров},
  LATINNAME = {Pavel Sergeyevich Alexandrov},
  DATE      = {1896-05-07/1982-11-16},
} 
\end{filecontents}
\begin{filecontents}{person.dbx}
\DeclareDatamodelEntrytypes{person}
\DeclareDatamodelFields[type=list, datatype=name]{name, latinname}
\DeclareDatamodelEntryfields[person]{
name,
latinname,
day,
endday,
month,
endmonth,
year,
endyear}
\end{filecontents}

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T2A]{fontenc} 
\usepackage[english,russian]{babel}
\usepackage[datamodel=person,style=authoryear]{biblatex}

\DeclareLabelname{shortauthor,author,shorteditor,editor,translator,name,latinname}

\newbibmacro*{personname}{%
  \printnames{name}%
  \ifnameundef{latinname}
    {}
    {\addspace\mkbibparens{\printnames{latinname}}}}

\DeclareBibliographyDriver{person}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{personname}%
  \setunit{\labelnamepunct}\newblock
  \printdate
  \usebibmacro{finentry}}

\addbibresource{test.bib}

\begin{document}
\cite{alexandrov}
\printbibliography[title=People,type=person]
\end{document}

数据模型示例

答案3

从技术上讲,你要求的是一对列表名称定义,因此可以使用任何工具来管理词汇表。

但既然你提到了使用bibtex,我想你可能对包感兴趣光泽,存储对名称定义.bib文件中并用于bibtex提取乳胶文档中引用的名称列表。

相关内容