Biber 的“常量”包错误

Biber 的“常量”包错误

当我尝试运行biber(版本 2.10;使用 Texmaker)时发生此错误:

INFO - This is Biber 2.10 INFO - Logfile is 'provabib.blg' ERROR - provabib.bcf is malformed, last biblatex run probably failed. Deleted provabib.bbl INFO - ERRORS: 1

经过几次尝试,我发现问题出在包上constants,我用它来自动编号我定义的常量;删除它,一切正常。我绝对不是专家,我不知道如何解决这个问题,但我猜是因为这个包constants有点过时了。你现在有什么办法可以避免这个问题吗?也欢迎使用类似的包来完成同样的工作。

这是一个最小的工作示例:

\documentclass[a4paper,11pt]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel} 
\usepackage[autostyle]{csquotes}
\usepackage[style=alphabetic,backend=biber]{biblatex}
%%\usepackage{constants}        %%<--- this one produces the error
   %% \newconstantfamily{K}{symbol=K}       %% An example
\begin{filecontents*}{\jobname.bib}
   @book{rudin,
   author  = "Rudin, Walter",
   title   = "Real and Complex Analysis",
   year    = "1966",
   publisher = "McGraw-Hill"
 }
\end{filecontents*}
\addbibresource{\jobname.bib}

\begin{document}
   This is a citation: \cite{rudin}. \\
   %% This, instead, an example of use of the ``constants'' package:
   %% \[\Cl[K]{nameconstant}=e^\pi;\]
   %% now here's a new constant of the same family: $\C[K]$, while here I am referring to the first constant defined: $\Cr{nameconstant}$.
   \printbibliography
\end{document}

答案1

常量包插入结束编译的\AtEndDocument命令\deadcycles\z@\@@end,从而阻碍 biblatex 完成bcf文件。

我不知道为什么该软件包会这样做——它看起来像是内核中原始代码的错误副本——但这意味着该软件包可能会完全破坏其他软件包,因此不应该使用。

答案2

事实证明,问题第一个答案中描述的简单技巧自动编号常量完全符合我的要求,并且避免了由 引起的错误constants

就我而言,我需要几个“epsilon”,数量越来越多,并且能够引用旧的。

在序言中添加了以下计数器(请注意hyperref需要):

\usepackage{hyperref}    
\newcounter{epscnt}                     %% Defines the counter for epsilon
\newcommand{\neweps}{                   %% Used to introduce a new epsilon
    \refstepcounter{epscnt}             %%    with the right subscript
    \ensuremath{\epsilon_\theepscnt}
    }
\newcommand{\oldeps}[1]{\ensuremath{\epsilon_{\ref*{#1}}}}  %% Used to refer to old constants

下面是如何使用它的(工作)示例(可能需要一些改进,以防需要其他常量):

\documentclass[a4paper,11pt]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel} 
\usepackage[autostyle]{csquotes}
\usepackage[style=alphabetic,backend=biber]{biblatex}
\usepackage{hyperref}
\begin{filecontents*}{\jobname.bib}
     @book{rudin,
     author  = "Rudin, Walter",
     title   = "Real and Complex Analysis",
     year    = "1966",
     publisher = "McGraw-Hill"
     }
     \end{filecontents*}
 \addbibresource{\jobname.bib}

 \newcounter{epscnt}            %% epsilon
 \newcommand{\neweps}{
    \refstepcounter{epscnt}
    \ensuremath{\epsilon_\theepscnt}
    }
 \newcommand{\oldeps}[1]{\ensuremath{\epsilon_{\ref*{#1}}}}

 \newcounter{uckcnt}            %% uppercase K
 \newcommand{\newuck}{
    \refstepcounter{uckcnt}
    \ensuremath{K_\theuckcnt}
    }
 \newcommand{\olduck}[1]{\ensuremath{K_{\ref*{#1}}}}


 \begin{document}
   Here are some numbered constants: $\neweps$, $\neweps$, $\neweps\label{tre}$; now a citation: \cite[99]{rudin}. Finally, new epsilons, old ones and other constants: $\neweps$, $\oldeps{tre}$, $\newuck\label{uno}$, $\newuck$, $\olduck{uno}$.
   \printbibliography
 \end{document}

输出

在我看来这很好;如果您对如何改进它有任何建议,我很乐意听取。

相关内容