我有一篇研究文章已被接受(有标题、期刊和 doi,但尚无日期或发行日期)。预印本可用。我希望我的 biblatex 书目中有一项可以反映这一点。我目前使用的是标准数字样式。我会想到类似
Bubaya. “Some smart paper.” To appear in: Exclusive journal. DOI: ... Preprint: arXiv:...,
但我很灵活。我想你明白了。到目前为止,我不喜欢的是弄乱相关文章,但也许我做得不对。
我怎样才能实现这样的目标?
已经有人问过类似的问题(biblatex 和参考文献:未发表的 eprint 格式),但没有给出令人满意的答案。
编辑:投票反对的人介意解释一下是什么让他们感到不安吗,这样我就可以改变我的问题了?可以说,下面的内容看起来真的很糟糕:
\documentclass{article}
\usepackage{biblatex,hyperref}
\begin{filecontents}[overwrite]{bib.bib}
@article{entry,
author = "W. Crawley-Boevey",
title = "Decomposition of pointwise finite-dimensional persistence modules",
journal = "Journal of Algebra and Its Applications",
volumne = "14",
number = "5",
year = "2015",
pubstate = "forthcoming",
doi = "10.1142/S0219498815500668",
eprint = "1210.0819",
eprinttype = "arxiv",
}
\end{filecontents}
\addbibresource{bib.bib}
\nocite{*}
\begin{document}
\printbibliography
\end{document}
答案1
您可以修改打印涉及字段的宏,如下所示,测试pubstate
:
\documentclass{article}
\usepackage{biblatex,hyperref}
\begin{filecontents}[overwrite]{bib.bib}
@article{entry,
author = "W. Crawley-Boevey",
title = "Decomposition of pointwise finite-dimensional persistence modules",
journal = "Journal of Algebra and Its Applications",
volume = "14",
number = "5",
year = "2015",
pubstate = "forthcoming",
doi = "10.1142/S0219498815500668",
eprint = "1210.0819",
eprinttype = "arxiv",
}
@article{arta,
author = "A. Author",
title = "An ordinary article",
journal = "An ordinary journal",
volume = "15",
number = "1",
year = "2016",
pubstate = "published",
doi = "10.1234/S0219498815501234",
eprint = "1234.1234",
eprinttype = "arxiv",
}
@article{artb,
author = "B. Buthor",
title = "A second article",
journal = "A second journal",
volume = "16",
number = "3",
year = "2020",
doi = "10.7777/S0219498815501234",
eprint = "1234.7777",
eprinttype = "arxiv",
}
@article{artc,
author = "C. Cuthor",
title = "A submitted article",
journal = "A third journal",
year = "2023",
pubstate = "submittedto",
doi = "10.7777/S0219498815501234",
eprint = "1234.7777",
eprinttype = "arxiv",
}
\end{filecontents}
\addbibresource{bib.bib}
% from https://tex.stackexchange.com/a/408041/101651
\NewBibliographyString{toappearin}
\NewBibliographyString{submittedto}
\NewBibliographyString{preprint}
\DefineBibliographyStrings{english}{%
toappearin = {to appear in},
submittedto = {submitted to},
preprint = {preprint},
}
\renewbibmacro*{in:}{%
\ifboolexpr{not test {\iffieldundef{pubstate}}
and (test {\iffieldequalstr{pubstate}{toappearin}}
or test{\iffieldequalstr{pubstate}{submittedto}}
or test{\iffieldequalstr{pubstate}{forthcoming}}
)}
{\printtext{\bibstring{toappearin}\intitlepunct}}%
{\printtext{\bibstring{in}\intitlepunct}}%
}
% from https://tex.stackexchange.com/q/295080/101651
\makeatletter
\DeclareFieldFormat*{eprint:arxiv}{{% Note the extra brace
\ifboolexpr{not test {\iffieldundef{pubstate}}
and (test {\iffieldequalstr{pubstate}{toappearin}}
or test{\iffieldequalstr{pubstate}{submittedto}}
or test{\iffieldequalstr{pubstate}{forthcoming}}
)}
{\printtext{\bibstring{preprint}\addcolon\addspace arXiv}}%
{arXiv}%ù
\addcolon\space
\ifhyperref
{\href{http://arxiv.org/\abx@arxivpath/#1}{%
\nolinkurl{#1}%
\iffieldundef{eprintclass}
{}
{\addspace\texttt{\mkbibbrackets{\thefield{eprintclass}}}}}}
{\nolinkurl{#1}
\iffieldundef{eprintclass}
{}
{\addspace\texttt{\mkbibbrackets{\thefield{eprintclass}}}}}}}
\makeatother
\renewbibmacro*{addendum+pubstate}{%
\printfield{addendum}}
\nocite{*}
\begin{document}
\printbibliography
\end{document}