使用 phys 样式时,以 =!1 开始的引用计数器不适用于多重引用

使用 phys 样式时,以 =!1 开始的引用计数器不适用于多重引用

我正在使用答案中给出的解决方案这里将我的参考计数器从 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}

[0]//[1]//[0, 1]

相关内容