当我尝试运行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}
在我看来这很好;如果您对如何改进它有任何建议,我很乐意听取。