我正在使用答案中给出的解决方案这里将我的参考计数器从 0 而不是 1 启动。但是,当使用 phys 样式时,我遇到了以下问题:
此代码:
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[style=phys]{biblatex}
\DeclareFieldFormat{labelnumber}{%
\ifinteger{#1}
{\number\numexpr#1-1\relax}
{#1}}
\addbibresource{ref.bib}
\begin{document}
\cite{a}\cite{b}
\cite{a,b}
\end{document}
输出
代替[0][1][0,1]
答案1
添加\expanded
似乎可以解决问题。
\begin{filecontents*}{\jobname.bib}
@article{a,
author={A. Uthor},
title={Title},
journal={Journal},
year={2020},
}
@article{b,
author={W. Riter},
title={Title},
journal={Journal},
year={2020},
}
\end{filecontents*}
\documentclass{article}
\usepackage[style=phys]{biblatex}
\DeclareFieldFormat{labelnumber}{%
\expanded{\ifinteger{#1}
{\number\numexpr#1-1\relax}
{#1}}}
\addbibresource{\jobname.bib}
\begin{document}
\cite{a}\cite{b}
\cite{a,b}
\end{document}
答案2
对于numeric-comp
基于 - 的样式,事情会稍微复杂一些,因为可能labelname
不是原始数字,而是扩展为数字的宏。这意味着我们需要调整测试\ifinteger
以扩展其参数。
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[style=phys]{biblatex}
\makeatletter
\newrobustcmd*{\pxifinteger}[1]{%
\begingroup
\protected@edef\tempa{\endgroup%
\blx@imc@ifinteger{#1}}%
\tempa}
\DeclareFieldFormat{labelnumber}{%
\pxifinteger{#1}
{\number\numexpr#1-1\relax}
{#1}}
\makeatother
\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{sigfridsson}
\cite{worman}
\cite{sigfridsson,worman}
\end{document}