我正在准备一份 LaTeX 出版物清单,其中我想使用自定义键来区分论文类型。例如,如果我最初有:
- [1] 期刊出版物 1
- [2] 期刊出版物 2
- [3] 会议出版物 1
- [4] 会议出版物 2
- [5] 研讨会出版物 1
我想把它变成类似这样的东西:
- [J1] 期刊出版物 1
- [J2] 期刊出版物 2
- [C3] 会议出版物 1
- [C4] 会议出版物 2
- [W5] 研讨会出版物 1
当然,相同的键会出现在参考文献列表和正文中。
我找不到使用 LaTeX/BibTeX 实现此目的的简单方法。您有什么建议吗?
答案1
这是一个使用的解决方案biblatex
(可能有更优雅的方式来定义新的\typeprefix
宏。)
\documentclass{article}
\usepackage{biblatex}
\newcommand*{\typeprefix}{%
\ifentrytype{article}{%
A%
}{%
\ifentrytype{book}{%
B%
}{%
O% "other"
}%
}%
}
\DeclareFieldFormat{labelnumber}{\typeprefix #1}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{A01,
author = {Author, A.},
year = {2001},
title = {Alpha},
journaltitle ={Journal Title},
}
@book{B02,
author = {Buthor, B.},
year = {2002},
title = {Bravo},
publisher = {Publisher},
location = {Location},
}
@misc{C03,
author = {Cuthor, C.},
year = {2003},
title = {Charlie},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
Some text \autocite{A01,B02,C03}.
\printbibliography
\end{document}
答案2
以下是使用 biber 0.9.9 (beta)+biblatex1.7 执行类似操作的方法。将来(biblatex 2.x),您将能够定义自己的标签模板,因此这将很容易,但现在,您可以使用 biber 配置文件选项sourcemap
在 biber 读取条目时更改它们:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<sourcemap>
<maps datatype="bibtex" map_overwrite="1">
<map>
<map_step map_field_set="LABEL" map_origentrytype="1"/>
<map_step map_field_source="LABEL" map_match="\A(.).+" map_replace="\u$1"/>
</map>
</maps>
</sourcemap>
</config>
这将(假设 biblatex 选项style=alphabetic
和labelalpha=true
)将标签的 alpha 部分变成 entrytype 的第一个字母。显然,使用 match/replace 可以让您更好地控制格式。您可以从 SourceForge 获取 biber 0.9.9(测试版)(有一个小错误导致此示例无法在 0.9.8 中使用)。