2013-10-01 10 views
6

HTML + CSS + Javascript-Tools bieten eine großartige Möglichkeit, schöne Präsentationen zu erstellen (z. B. reveal.js + MathJax). Meistens muss ich meinen Präsentationen jedoch Zitate hinzufügen, und das möchte ich systematisch tun (so ist die Bibliografie organisiert und die Verweise sind gut formatiert). Dies ist etwas, das in LaTeX durch BibTeX relativ einfach gehandhabt werden kann.Referenzverwaltung mit HTML/CSS/Javascript (BibTeX-Stil)

Die beste Lösung, die ich bisher gefunden habe, kommt aus einer Bibliothek namens bibtex-js. Es scheint eine gute Arbeit zu leisten, BiBTeX-Dateien in HTML als Bibliographie-Listing zu rendern, was ich teilweise möchte. Ich muss jedoch nicht nur Bibliographie-Listings auflisten, sondern muss auch auf Einträge in dieser Bibliografie durch einen Index verweisen und eine einheitlich formatierte Referenzmarkierung erhalten. Nehmen wir zum Beispiel, wie LaTeX in der Regel dieses Problem behandelt:

%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... 

Der vorherige Code als würde etwas gemacht werden wie „Wie Darwin (1859) trägt in seinem bahnbrechenden Buch“. Darüber hinaus könnte die Formatierung, in der das Zitat wiedergegeben wird, auch anpassbar sein (z. B. "Darwin, 1859", "(Darwing, 1859)", "[DWN59]", "[1]" usw.).

Die Frage ist also, wie behandeln Sie eine ähnliche Aufgabe auf einem HTML-Dokument?

Vielen Dank im Voraus!

+1

Diese Frage ist für StackOverflow off-topic: "Fragen, die uns bitten, ein Tool, eine Bibliothek oder eine bevorzugte Offsite-Ressource zu empfehlen oder zu finden, sind off-topic für Stack Overflow, da sie eher zu eigensinnigen Antworten und Spam neigen Beschreiben Sie stattdessen das Problem und was bisher unternommen wurde, um es zu lösen. " Dies kann jedoch unter http://tex.stackexchange.com geschehen. Daher stimme ich nicht zu, wegen der Bibliotheksanfrage zu schließen, sondern stimme lieber für die Migration zu TeX.SE zu. –

+2

Hallo Joshua. Ich habe darüber nachgedacht, es auf tex.stackexchange.com zu setzen, aber es ist in der Tat völlig außer Thema. Es hat eigentlich nichts mit TeX zu tun. Wenn Systeme wie LaTeX nicht existieren würden, wäre meine Frage immer noch gültig, da meine Anforderung generisch genug ist. Die bloße Tatsache, dass LaTeX diese Funktionalität normalerweise erfüllt, gibt mir die Möglichkeit, es genauer zu definieren. Aber ich wiederhole, es hat nichts mit TeX zu tun. Zum Thema, dass die Frage in der Art und Weise, wie sie gestellt wird, off-topic ist, werde ich sie entsprechend umformulieren, um die Richtlinien zu erfüllen. Dank für Ihr Interesse. – GermanK

Antwort

0

Ja, es gibt eine Emacs-Erweiterung namens org-mode, die Textverarbeitung mit einer Markdown-ähnlichen Syntax ist. Dies kann dies exportieren offenbaren-js Trog: https://github.com/yjwen/org-reveal Oder in meinem Fall verwende ich die spacemacs Erweiterung: https://github.com/syl20bnr/spacemacs/tree/master/layers/%2Bemacs/org#revealjs-support

So org-Modus ist ein Zwischenformat, das kompiliert, was Sie wollen, also offenbaren-js, html, oder sogar Latex. Dazu gehört ein Referenz-Management-System: https://github.com/jkitchin/org-ref

ich mit diesem für reveal.js unglücklich bin, wenn wir dies mit reveal.js verwenden wir alle das Zitat am Ende mit als Link dargestellt werden (was auch immer wir geben nach cite:) und die vollständigen Formatzitate werden auf jeder Folie gruppiert, auf der Sie sie platzieren (wenn Sie also mehr als 3 Seiten haben, können Sie sie nicht korrekt lesen, obwohl ich es im HTML vermute). Was ich will, sind entweder die Zahlen, die ich in Latex- oder Fußnoten-Zitaten bekomme, denn im Falle von Dias funktionieren Fußnoten gut.

Dies funktioniert natürlich nur für HTML-Seiten, aber Sie möchten wahrscheinlich Präsentationen wie mich haben. Ich suchte nach einer Lösung dafür, als ich auf diese unbeantwortete Frage stieß, also denke ich, hier ist deine Antwort.

+1

Danke! Ich denke, das ist das erste Mal, dass ich es bereue, dass ich vim über Emacs als meinen Defacto-Redakteur vor langer Zeit gewählt habe. Wie Sie jedoch sagen, sind Sie mit dieser Lösung auch nicht sehr zufrieden, weil die Darstellung von org-ref aufgedeckt wird, oder? Dennoch kommt es dem, was ich damals vor 4 Jahren gesehen habe, sehr nahe und ich wäre immer noch froh, es jetzt zu entdecken. – GermanK

+1

@GermanK Nun, ich benutze vim auch für schnelle Bearbeitungen (und bevor ich emacs entdeckte), ist spacemacs eine Emacs-Distribution, die speziell auf vim-Benutzer abzielt (ich benutze das auch, um ein Ex-Voll-Vim-er zu sein). Sie sollten es einmal ausprobieren. Der Org-Modus ist die Sache, die mich überzeugt hat, ernsthaft darüber nachzudenken, jetzt mache ich die meiste Textverarbeitung, weil es so mächtig und doch immer noch Text ist. –

1

Ich habe ein Projekt, übrigens auch bibtex-js genannt. Verfügbar on npm.

Ich habe es gemacht, weil die meisten BibTeX-Parser da draußen beträchtliche Abkürzungen beim Parsen nehmen. Dieser stimmt sehr gut mit dem maßgeblichen Dokument auf BibTeX, Tame the BeaST, überein und funktioniert so ziemlich gut in Bezug auf Referenzen und Parsing-Autorennamen, was anscheinend das ist, wonach Sie suchen.

Ich würde sagen, basierend auf einigen bibliographischen Standard, Ihre eigene Inline-Zitat Funktion rollen:

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) 

Sie etwas mit et al. kompliziert tun können, wenn Sie mehrere Autoren haben.