11

HTML+CSS+Javascript 工具提供了一种创建精美演示文稿的好方法(例如,reveal.js + MathJax)。但是,我通常需要在我的演示文稿中添加引文,并且我想以系统的方式来做到这一点(因此参考书目是有组织的并且参考文献格式正确)。这是通过 BibTeX 在 LaTeX 中很容易处理的事情。

到目前为止,我发现的最佳解决方案来自一个名为bibtex-js的库。在将 HTML 中的 BiBTeX 文件呈现为参考书目列表方面似乎做得很好,这部分是我想要的。但是,我不仅需要呈现参考书目列表,而且还需要通过某个索引来引用该参考书目中的条目,并获得一个统一格式的参考标记。举个例子,LaTeX 通常是如何处理这个问题的:

%In thebibliography.bib
@article{darwin1859origins,
  title={On the origins of species by means of natural selection},
  author={Darwin, Charles},
  journal={London: Murray},
  year={1859}
}

%In mydocument.tex
As \cite{darwin1859origins} sustains in his ground-breaking book...

之前的代码将呈现为“正如达尔文(1859)在他的开创性著作中所坚持的那样”。此外,呈现引文的格式也可以是可定制的(例如“Darwin,1859”、“(Darwing,1859)”、“[DWN59]”、“[1]”等)。

所以问题是,您如何处理 HTML 文档上的类似任务?

谢谢大家!

4

2 回答 2

2

是的,有一个名为 org-mode 的 emacs 扩展,它是使用类似 markdown 语法的文本处理。这可以通过以下方式导出到reveal-js:https ://github.com/yjwen/org-reveal 或者在我的情况下,我使用spacemacs扩展:https ://github.com/syl20bnr/spacemacs/tree/master/layers /%2Bemacs/org#revealjs-support

所以org模式是一种中间格式,可以编译成你想要的任何东西,即reveal-js、html,甚至是latex。这包括一个参考管理系统:https ://github.com/jkitchin/org-ref

我对reveal.js 不满意,如果我们将它与reveal.js 一起使用,我们最终会将所有引文作为链接呈现(无论我们在之后键入什么cite:),并且完整格式的引文会分组在您放置它们的任何幻灯片上(所以如果你有超过 3 个,你就不能正确阅读它,尽管我猜它在 HTML 中)。我想要的是我在乳胶或基于脚注的引用中得到的数字,因为在幻灯片的情况下,脚注工作得很好。

这当然只适用于 HTML 页面,但是您可能想要像我这样的演示文稿。当我偶然发现这个未回答的问题时,我正在寻找解决方案,所以我想这就是你的答案。

于 2017-06-14T14:12:45.300 回答
1

我做了一个项目,顺便也叫bibtex-js在 npm 上可用。

我之所以这样做是因为大多数 BibTeX 解析器在解析时都采取了相当多的捷径。这与 BibTeX 上的权威文档、Tame the BeaST密切相关,因此在引用和解析作者姓名方面效果很好,这似乎是您所追求的。

我想说,根据一些书目标准,推出你自己的内联引文功能:

import {parseBibFile, normalizeFieldValue} from "bibtex";

// Parse bib file
const bibFile = parseBibFile(bibtexString); // insert the darwin1859origins example as a string

// Sanity check: print all ids of entries in the bibfile
console.log(Object.keys(bibFile.entries$)); 

// Get the entry we are after
const entry = bibFile.getEntry("darwin1859origins");

// Get the relevant fields

// normalizeFieldValue turns a BibTeX string into a Javascript string
const year = normalizeFieldValue(entry.getField("year")); 
// get first author
// "author" is a special kind of BibTeX field
const author = entry.getField("author").authors$[0]; 

function inlineCite(author){
   return "("
          + (author.firstNames
                .concat(author.vons)
                .concat(author.lastNames)
                .concat(author.jrs)).join(" ")
          + "," + year
        + ")";
}

console.log(inlineCite(author)); // (Charles Darwin, 1859)

et al.如果您有多个作者,您可以做一些复杂的事情。

于 2017-10-20T10:12:47.697 回答