使用 bibtex 管理问题数据库

使用 bibtex 管理问题数据库

我正在尝试实现问题数据库http://www.math.canterbury.ac.nz/~m.hickman/LaTeX/LaTeX.shtml

在我的 Mac 上,我可以使用 pdflatex、bibtex、pdflatex、pdflatex 与默认文件 problems.sty、question.bst 和 SampleDatabase.bib 进行编译。

\documentclass{article}
\usepackage{problems}
\Database{SampleDatabase}
\begin{document}
\tutorial{S3}
\end{document}

在我的 Windows 电脑上,pdflatex 编译得很好,但当我运行 bibtex 时,我看到

Warning--entry type for "S3" isn't style-file defined
--line 149 of file SampleDatabase.bib

再运行 pdflatex 两次后,我得到的 pdf 只显示“教程 1。”并且没有问题陈述。回溯,这似乎是因为 Windows bibtex 说
The style file: biblatex.bst
而我的 Mac 说
The style file: question.bst
这似乎是因为 Windows aux 文件有
\bibstyle{biblatex}
而我的 Mac 有
\bibstyle{question}

我不完全清楚为什么会发生这种情况。problems.sty

\def\blx@auxinit@bibtex#1{%
  \blx@auxwrite\blx@auxout@bibtex
    {\def\do##1{,\blx@stripbib{##1}}}
    {\ifx\blx@auxout@bibtex\@mainaux
     \else
       \blx@msg@aux
     \fi
     \string\bibstyle{question}\blx@nl
     \string\bibdata{%
       \blx@ctrlfile@bibtex\blxauxsuffix
       \ifx#1\@empty
       \else
         \dolistloop#1%
       \fi}\blx@nl
     \string\citation{biblatex-control}}}

这看起来似乎应该做正确的事情,但显然不是。

我还发现\listfiles,我的非工作 Windows 文件比我工作的 Mac 文件更新。但我不确定哪个文件导致以前工作正常的程序被破坏。在此期间,哪些更改会破坏以前工作的程序包?

答案1

该软件包已有近五年历史,并且破解了一些 的biblatex内部命令。这些内部命令经历了相当多的变化,因此现在破解它们不再能按预期工作。您可以使用该软件包来解决有问题的破解问题比贝尔而不是 BibTeX。

\documentclass[11pt]{article}

\usepackage{graphicx,amsmath} 
\usepackage[biber]{problems}

\Database{SampleDatabase}

\Course{MATH361}
\Year{09}
\Occurence{S1}
\TutorialNumber{1}
\TutorialDate{March 24-26}

\begin{document}
\tutorial{1-1,1-2}

\problems[prefix=*]{1-3}
\end{document}

在我使用 pdfLaTeX、pdfLaTeX、Biber、pdfLaTeX 编译时,它对我有用。请参阅Biblatex 与 Biber:配置我的编辑器以避免未定义的引用以获得有关设置编辑器以使用 Biber 的帮助。


如果你坚持使用BibTeX,你将必须修改重命名副本question.bst(到question-mod.bst,比如说)使得的最后几行从FUNCTION {output:main:begin}上改为读。

FUNCTION {output:main:begin} {
  "% $ biblatex auxiliary file $"                               write$ newline$
  "% $ biblatex bbl format version " "$Revision: 3.0 $"
  #12 entry.max$ substring$ #-3 entry.max$ substring$ * " $" *  write$ newline$
  "% Do not modify the above lines!"                            write$ newline$
  "%"                                                           write$ newline$
  "% This is an auxiliary file used by the 'biblatex' package." write$ newline$
  "% This file may safely be deleted. It will be recreated as"  write$ newline$
  "% required."                                                 write$ newline$
  "%"                                                           write$ newline$
  "\begingroup"                                                 write$ newline$
  "\makeatletter"                                               write$ newline$
  "\@ifundefined{[email protected]}"                             write$ newline$
  "  {\@latex@error"                                            write$ newline$
  "     {Missing 'biblatex' package}"                           write$ newline$
  "     {The bibliography requires the 'biblatex' package.}"    write$ newline$
  "      \aftergroup\endinput}"                                 write$ newline$
  "  {}"                                                        write$ newline$
  "\endgroup"                                                   write$ newline$
  newline$
  "\datalist[entry]{none/global//global/global}"                write$
}

FUNCTION {output:main:preamble} {
  preamble$ empty$
    'skip$
    { newline$
      "\preamble{%" write$ newline$
      preamble$ write$ newline$
      "}" write$ newline$
    }
  if$
}

FUNCTION {output:main:end} {
  "\enddatalist" write$ newline$
  "\endinput"    write$ newline$
}

EXECUTE {output:main:begin}

EXECUTE {output:main:preamble}

ITERATE {call.type$}

EXECUTE {output:main:end}

% -------------------------------------------------------------------

那么你需要

\makeatletter
\def\blx@auxinit#1{%
  \blx@auxwrite\blx@aux
    {\def\do##1{,\blx@stripbib{##1}}}
    {\ifx\blx@aux\@mainaux
     \else
       \blx@msg@aux
     \fi
     \string\bibstyle{question-mod}\blx@nl%%%% <- insert the new name of question.bst here
     \string\bibdata{%
       \blx@ctrlfile\blxauxsuffix
       \ifx#1\@empty
       \else
         \dolistloop#1%
       \fi}\blx@nl
     \string\citation{biblatex-control}}}
\makeatother

无论是在文档序言中,还是直接在重命名副本problems.sty( problems-mod.sty) 代替\def\blx@auxinit@bibtex#1。然后使用 加载包\usepackage{problems-mod}。将当前日期以及您的姓名添加到每个修改文件开头的注释中,并相应地更改其标识符。


您还应该尝试联系该软件包的开发人员/维护人员,但我不确定他是否仍在致力于此。

相关内容