2013-10-01 15 views
6

Công cụ Javascript + CSS + Javascript cung cấp cách tuyệt vời để tạo bản trình bày đẹp mắt (ví dụ: reveal.js + MathJax). Tuy nhiên, tôi thường cần thêm trích dẫn vào bản trình bày của mình và tôi muốn thực hiện điều đó một cách có hệ thống (vì vậy thư mục được tổ chức và tham chiếu được định dạng tốt). Đây là thứ được xử lý khá dễ dàng trong LaTeX thông qua BibTeX.Quản lý tham chiếu bằng HTML/CSS/Javascript (kiểu BibTeX)

Giải pháp tốt nhất mà tôi đã tìm thấy cho đến nay xuất phát từ thư viện có tên là bibtex-js. Dường như làm một công việc tốt để hiển thị các tệp BiBTeX trong HTML dưới dạng danh sách thư mục, đó là một phần những gì tôi muốn. Tuy nhiên, tôi không chỉ cần hiển thị danh sách thư mục, mà còn cần phải tham khảo các mục trong thư mục đó bởi một số chỉ mục và nhận được một dấu tham chiếu được định dạng thống nhất. Lấy ví dụ, làm thế nào LaTeX thường xử lý vấn đề này:

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

Đoạn mã trên sẽ được trả lại như một cái gì đó như "Như Darwin (1859) duy trì trong cuốn sách mang tính đột phá của mình". Hơn nữa, định dạng trong đó trích dẫn được hiển thị cũng có thể được tùy chỉnh (ví dụ: "Darwin, 1859", "(Darwing, 1859)", "[DWN59]", "[1]", v.v ...).

Vì vậy, câu hỏi đặt ra là, làm cách nào để bạn xử lý một tác vụ tương tự trên tài liệu HTML?

Cảm ơn tất cả mọi người trước!

+1

Để tham khảo trong tương lai, câu hỏi này không có chủ đề cho StackOverflow: "Các câu hỏi yêu cầu chúng tôi đề xuất hoặc tìm công cụ, thư viện hoặc tài nguyên ngoài trang web yêu thích không có chủ đề cho Stack Overflow vì chúng có xu hướng thu hút câu trả lời và spam Thay vào đó, mô tả vấn đề và những gì đã được thực hiện cho đến nay để giải quyết nó. " Tuy nhiên, điều này có thể là chủ đề tại http://tex.stackexchange.com, vì vậy tôi không bỏ phiếu để đóng vì yêu cầu thư viện, mà là bỏ phiếu để di chuyển sang TeX.SE. –

+2

Xin chào Joshua. Tôi đã xem xét đặt nó trên tex.stackexchange.com, nhưng nó là, như một vấn đề của thực tế, hoàn toàn off-topic ở đó. Nó thực sự không liên quan gì đến TeX. Nếu các hệ thống như LaTeX không tồn tại, câu hỏi của tôi sẽ vẫn hợp lệ, vì yêu cầu của tôi là đủ chung. Thực tế là LaTeX thường hoàn thành chức năng này mang lại cho tôi phương tiện để xác định chính xác nó với độ chính xác cao hơn. Nhưng tôi nhắc lại, nó không liên quan gì đến TeX. Đối với vấn đề mà câu hỏi là không chính xác theo cách nó được đặt ra, tôi sẽ thuật lại nó cho phù hợp để hoàn thành các hướng dẫn. Cảm ơn bạn đã quan tâm. – GermanK

Trả lời

0

Có, có phần mở rộng emacs được gọi là chế độ org, là xử lý văn bản có cú pháp giống như đánh dấu. này có thể xuất để lộ-js trough này: https://github.com/yjwen/org-reveal Hoặc trong trường hợp của tôi, tôi sử dụng phần mở rộng spacemacs: https://github.com/syl20bnr/spacemacs/tree/master/layers/%2Bemacs/org#revealjs-support

chế độ Vì vậy, org là một định dạng trung gian biên dịch để bất cứ điều gì bạn muốn, tức là tiết lộ-js, html, hoặc ngay cả latex. này bao gồm một hệ thống quản lý tài liệu tham khảo: https://github.com/jkitchin/org-ref

Tôi không hài lòng với điều này cho reveal.js, nếu chúng ta sử dụng điều này với reveal.js chúng tôi kết thúc có tất cả các trích dẫn được trình bày như là các liên kết (bất cứ điều gì chúng ta gõ sau cite:) và các trích dẫn định dạng đầy đủ được nhóm lại trên bất kỳ trang trình bày nào bạn đặt chúng (vì vậy nếu bạn có nhiều hơn 3 bạn không thể đọc chính xác, mặc dù tôi đoán nó trong HTML). Những gì tôi muốn là một trong những con số tôi nhận được trong trích dẫn dựa trên latex hoặc chú thích cuối trang, bởi vì trong trường hợp các chú thích trang trình bày hoạt động tốt.

Điều này tất nhiên sẽ chỉ hoạt động cho các trang HTML, tuy nhiên bạn có thể muốn có các bản trình bày như tôi. Tôi đã tìm kiếm một giải pháp cho điều này khi tôi vấp phải câu hỏi chưa được trả lời này vì vậy tôi đoán đây là câu trả lời của bạn.

+1

Cảm ơn! Tôi đoán đây là lần đầu tiên tôi thậm chí có thể hối hận vì đã chọn vim trên emacs như biên tập viên defacto của tôi một thời gian dài trước đây. Tuy nhiên, như bạn nói, bạn cũng không hài lòng với giải pháp này, bởi vì kết xuất của org-ref tiết lộ, đúng không? Tuy nhiên, điều này thực sự gần với những gì tôi đã nhìn lại sau đó 4 năm trước và tôi vẫn sẽ vui mừng khám phá ngay cả bây giờ. – GermanK

+1

@GermanK tốt, tôi cũng sử dụng vim để chỉnh sửa nhanh (và trước khi tôi phát hiện ra emacs), spacemacs là một bản phân phối emacs dành riêng cho người dùng vim (tôi sử dụng nó cũng là một vim-er cũ). Bạn nên thử một lần. chế độ org là thứ đã thuyết phục tôi xem xét nghiêm túc, bây giờ tôi thực hiện hầu hết quá trình xử lý văn bản trong đó bởi vì văn bản mạnh mẽ nhưng vẫn trơn tru của nó. –

1

Tôi đã thực hiện một dự án, tình cờ cũng được gọi là bibtex-js. Có sẵn on npm.

Tôi đã làm vì hầu hết các trình phân tích cú pháp BibTeX đều có các phím tắt đáng kể trong phân tích cú pháp. Điều này phù hợp chặt chẽ với các tài liệu có thẩm quyền trên BibTeX, Tame the BeaST và vì vậy hoạt động khá tốt về mặt tài liệu tham khảo và phân tích cú pháp tên tác giả, có vẻ như bạn đang làm gì.

Tôi xin nói, dựa trên một số tiêu chuẩn thư mục, cuộn chức năng inline trích dẫn của riêng bạn:

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) 

Bạn có thể làm điều gì đó phức tạp với et al. nếu bạn có nhiều tác giả.

Các vấn đề liên quan