考虑一下这个MWE:
\documentclass{article}
\usepackage{filecontents} % tlmgr install filecontents
\begin{filecontents*}{btest.bib}
@BOOK{Mittelbach2005,
author = {Frank Mittelbach},
edition = {2. ed.},
publisher = {Addison-Wesley},
title = {The LATEX companion},
year = 2005
}
\end{filecontents*}
\ifx\ubl\undefined %
\def\tubl{bibtex}
\else %
\usepackage[%
style=ieee,
isbn=true,
doi=false,
url=true,
backend=biber
]{biblatex}
\bibliography{btest}
\def\tubl{bibLAtex}
\fi
\begin{document}
Citing... HERE: \cite{Mittelbach2005} (\tubl)
\ifx\ubl\undefined %
\bibliographystyle{IEEEtranS} %
\bibliography{btest} %
\else %
\printbibliography[resetnumbers] %
\fi
\end{document}
您可以使用以下bash
一行程序快速编译它:
for ib in {b,bl}; do \
if [ "$ib" = "b" ]; then \
TCMD='-jobname=testA "\input{test.tex}"'; \
pdflatex $TCMD; bibtex testA; pdflatex $TCMD; pdflatex $TCMD; \
else \
TCMD='-jobname=testB "\def\ubl{1}\input{test.tex}"'; \
pdflatex $TCMD; biber testB; pdflatex $TCMD; \
fi; \
done
TestB.pdf 使用biblatex
+biber
如下所示:
... 使用的 TestA.pdfbibtex
如下所示:
请注意,一个bibtex
显示“第 2 版”,而biblatex
+biber
一个显示“第 2. 版”。Biblatex 定制 - LaTeX 中的论文 [khirevich.com],有人可能会认为这可以用作biblatex
序数后缀:
\DeclareFieldFormat{edition}%
{\ifinteger{#1}%
{\mkbibordedition{#1}\addthinspace{}ed.}%
{#1\isdot}}
...然而,那是仅有的对于纯数值字段 - 请注意,这里的字段是:
edition = {2. ed.},
...也就是说 - 它是字母数字;并且bibtex
似乎被解析成它,并用“2nd”替换“2。”并附加其余部分!
那么,如何才能biblatex
说服自己从同一领域产生与bibtex
“第二版”相同的输出呢?
(顺便说一下,附带一个问题:您还可以注意到间距不同;我怎样才能获得与 相同的间距biblatex
?bibtex
)
答案1
在我们开始之前,我想引用一下biblatex
文献中关于该edition
领域的描述
edition
字段(整数或文字)印刷出版物的版本。这必须是整数,而不是序数。不要说edition={First}
或edition={1st}
但是edition={1}
。书目样式会将其转换为语言相关的序数。也可以将版本作为文字字符串给出,例如“第三版,修订版和扩充版”。
因此,您能做的最好的事情就是确保您的.bib
文件遵循此做法,并且写入edition = {2}
而不是edition = {2. ed.}
。
但是,我们可以让 Biber 完成部分工作。在本例中,我们使用形式为 的 RegEx ^(\d+)\.\s+(ed.|edition)$
,它将匹配数字后跟一个句号、一个空格和单词“ed.”或“edition”。更自由的 RegEX 可能是 ^(\d+).*
匹配所有数字,无论它们后面跟的是什么。无论如何,我们将第一组复制到字段中edition
。
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=edition,
match=\regexp{^(\d+)\.\s+(ed.|edition)$},
replace=\regexp{$1}]
}
}
}
平均能量损失
\documentclass{article}
\usepackage{filecontents} % tlmgr install filecontents
\begin{filecontents*}{\jobname.bib}
@BOOK{Mittelbach2005,
author = {Frank Mittelbach},
edition = {2. ed.},
publisher = {Addison-Wesley},
title = {The LATEX companion},
year = 2005
}
\end{filecontents*}
\usepackage[%
style=ieee,
isbn=true,
doi=false,
url=true,
backend=biber
]{biblatex}
\addbibresource{\jobname.bib}
\DeclareFieldFormat{edition}{%
\ifinteger{#1}
{\mkbibordedition{#1}\addnbthinspace\bibstring{edition}}
{#1\isdot}}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=edition,
match=\regexp{^(\d+)\.\s+(ed.|edition)$},
replace=\regexp{$1}]
}
}
}
\begin{document}
Citing... HERE: \cite{Mittelbach2005}
\printbibliography[resetnumbers] %
\end{document}