自动验证和格式化 ISBN

自动验证和格式化 ISBN

有没有办法让 Biblatex 自动验证和格式化 ISBN?也就是说,我希望能够输入如下字段

isbn = {9789549090666},

在我的 .bib 文件中 — 不必担心连字符的存在或正确位置 — 并让 Biblatex 在我用 打印参考书目时将其呈现为“ISBN 978-954-90906-6-6” \printbibliography。如果 Biblatex 可以首先验证 ISBN,如果它是较旧的 ISBN-10,则将其转换为 ISBN-13,这也很有用。

如果在 Biblatex 中没有简单的方法可以做到这一点,那么是否有一个外部程序可以运行在我的 .bib 文件上来进行验证和格式化?到目前为止,我发现的都是在线工具,其中一些工具对 ISBN 的数字分组不正确。(对于那些不知道的人来说,虽然 ISBN 有固定的数字,但连字符分隔组的长度是可变的。)

答案1

请尝试 biber 2.2(以及 biblatex 3.1)。该--validate-datamodel选项将报告无效的 ISBN。新选项--isbn10将强制 ISBN 为 10 位数字格式和--isbn1313 位数字格式。--isbn-normalise将在正确的位置使用连字符进行格式化。

Biber 中执行此操作的模块有一个 ISBN 号码数据库,该数据库会随着模块的新版本而更新。

答案2

重新创建连字符的主要问题是 ISBN 本身。

它由 13 位数字组成:

ISBN:前缀 - 国家 - 出版商 - 书籍 - 校验号

例如:978 - 3 - 86680 - 192 - 7。前缀有 3 位数字,支票号 1,国家号 1,总计 5。出版商和书籍加起来有 8 位数字。

因此我们现在重新创建:978-3-86680192-7。

问题是,你必须知道全部出版商编号用于重新创建出版商和书籍之间的连字符。有些出版商的编号为 7 位数字,而书籍编号只有一个数字(该出版商最多只能出版 10 本书),其他出版商的编号为 3 位数字,而书籍编号为 5 位数字。

这就是我不会尝试使用 LaTeX 重新创建丢失的连字符。最好使用评论中列出的网站之一来找回丢失的连字符并将其添加到 bib 条目中。

然后你可以使用问题中的方法计算校验和(参见@egreg 的评论)。

要验证 ISBN,您需要知道出版商和书号是否有效(当前出版商还是不再运营的出版商?该书是否可用?)以及支票号码是否有效。

只需在前面添加 978,即可将较旧的 ISBN 号(10 位数字)构建为当前的 13 位 ISBN 号。现在您必须重新计算最后一个校验号并使用它。例如,请参阅 LaTeX 配套软件的两个 ISBN:ISBN-10:3827316898 和 ISBN-13: 978-3827316899. 粗体部分相等。加上连字符后,ISBN 为:978-3-8273-1689-9,其中 3 表示德语,8273 表示 Pearson Studium,1689 表示书籍“Der LaTeX-Begleiter”。

答案3

假设 ISBN-13 以 978 开头,则以下纯 TeX 代码将生成正确的校验位(在此示例中,用零替换 978 后面的九位数字):

\newcount\isbncount
\newcount\scratchcount
\def\isbncalc#1#2#3#4#5#6#7#8#9{%
    \isbncount=38%total yielded by initial 978
%       i.e. 1x9 plus 3x7 plus 1x8
    \scratchcount=#1 \multiply \scratchcount by 3
    \advance \isbncount by \scratchcount
    \advance \isbncount by #2
    \scratchcount=#3 \multiply \scratchcount by 3
    \advance \isbncount by \scratchcount
    \advance \isbncount by #4
    \scratchcount=#5 \multiply \scratchcount by 3
    \advance \isbncount by \scratchcount
    \advance \isbncount by #6
    \scratchcount=#7 \multiply \scratchcount by 3
    \advance \isbncount by \scratchcount
    \advance \isbncount by #8
    \scratchcount=#9 \multiply \scratchcount by 3
    \advance \isbncount by \scratchcount
    \the \isbncount}
\isbncalc{0}{0}{0}{0}{0}{0}{0}{0}{0}
\bye

至少,当应用模数 10 时,这将产生一个数字,该数字将给出校验位(例如,如果生成 187,则校验位为 3,这是舍入到下一个 10 的倍数所需的数字)。聪明的人可能能够进一步处理这个问题,以便生成实际的校验位。

为了正确生成连字符,我建议https://www.loc.gov/publish/pcn/isbncnvt_pcn.html(这也将在 ISBN-10 和 ISBN-13 之间进行转换)。978 后面的数字几乎总是零,由连字符包围,校验位前面有一个连字符,但另一个连字符的位置不是 (AFIK) 通过数学运算自动生成的。

相关内容