Управление ссылками с помощью HTML / CSS / Javascript (стиль BibTeX)

Инструменты HTML + CSS + Javascript предлагают отличный способ создания красивых презентаций (например, detect.js + MathJax). Однако обычно мне нужно добавлять цитаты в свои презентации, и я хотел бы делать это систематически (чтобы библиография была организована, а ссылки были хорошо отформатированы). Это то, что довольно легко обрабатывается в LaTeX через BibTeX.

Лучшее решение, которое я нашел до сих пор, - это библиотека под названием bibtex-js. Кажется, он хорошо справляется с рендерингом файлов BiBTeX в HTML в качестве списка библиографии, что частично является тем, что я хочу. Однако мне нужно не только отображать списки библиографии, но также мне нужно ссылаться на записи в этой библиографии по некоторому индексу и получить единообразно отформатированный ссылочный маркер. Возьмем, к примеру, то, как 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 г.) в своей новаторской книге». Более того, форматирование, в котором отображается цитата, также можно настраивать (например, «Дарвин, 1859», «(Дарвинг, 1859)», «[DWN59]», «[1]» и т. Д.).

Возникает вопрос, как решить аналогичную задачу с HTML-документом?

Спасибо всем заранее!


person GermanK    schedule 01.10.2013    source источник
comment
Для дальнейшего использования этот вопрос не по теме для StackOverflow: вопросы, просящие нас порекомендовать или найти инструмент, библиотеку или любимый сторонний ресурс, не относятся к теме для Stack Overflow, поскольку они, как правило, привлекают самоуверенные ответы и спам. Вместо этого опишите проблему и то, что было сделано на данный момент для ее решения. Однако это может быть по теме на tex.stackexchange.com, поэтому я не голосую за закрытие из-за запроса библиотеки, но скорее голосование за переход на TeX.SE.   -  person Joshua Taylor    schedule 01.10.2013
comment
Привет, Джошуа. Я подумал о том, чтобы разместить его на tex.stackexchange.com, но на самом деле это совершенно не по теме. На самом деле это не имеет ничего общего с TeX. Если бы таких систем, как LaTeX, не существовало бы, мой вопрос все равно был бы актуален, поскольку мои требования достаточно общие. Тот факт, что LaTeX обычно выполняет эту функцию, дает мне возможность идеально ее определить с большей точностью. Но повторяю, к TeX это не имеет никакого отношения. Что касается того, что вопрос не по теме в том, как он сформулирован, я перефразирую его соответственно, чтобы выполнить рекомендации. Спасибо за вашу заботу.   -  person GermanK    schedule 01.10.2013


Ответы (2)


Да, есть расширение emacs, называемое org-mode, которое представляет собой обработку текста с синтаксисом, подобным уценке. Это можно экспортировать в раскрытие-js через это: https://github.com/yjwen/org-reveal Или в моем случае я использую расширение spacemacs: https://github.com/syl20bnr/spacemacs/tree/master/layers/%2Bemacs/org#revealjs-support

Итак, режим org - это промежуточный формат, который компилируется во все, что вы хотите, например, в manifest-js, html или даже в latex. Сюда входит система управления ссылками: https://github.com/jkitchin/org-ref

Я недоволен этим для detect.js, если мы используем это с show.js, мы получим, что вся цитата будет представлена ​​как ссылка (все, что мы набираем после cite:), а цитаты в полном формате сгруппированы на любом слайде, который вы разместите их (так что, если у вас их больше 3, вы не сможете их правильно прочитать, хотя я предполагаю, что это в HTML). Мне нужны либо числа, которые я получаю в латексных ссылках, либо цитаты на основе сносок, потому что в случае слайдов сноски работают плохо.

Это, конечно, будет работать только для HTML-страниц, однако вы, вероятно, захотите иметь такие презентации, как я. Я искал решение этой проблемы, когда наткнулся на этот вопрос без ответа, так что я думаю, вот ваш ответ.

person Jappie Kerk    schedule 14.06.2017
comment
Спасибо! Думаю, это первый раз, когда я могу даже пожалеть о том, что выбрал vim вместо emacs в качестве своего де-факто редактора давным-давно. Однако, как вы говорите, вы тоже не очень довольны этим решением из-за рендеринга org-ref для раскрытия, верно? Тем не менее, это очень близко к тому, что я искал 4 года назад, и что я был бы рад открыть для себя даже сейчас. - person GermanK; 15.06.2017
comment
@GermanK: ну, я тоже использую vim для быстрого редактирования (и до того, как я обнаружил emacs), spacemacs - это дистрибутив emacs, специально предназначенный для пользователей vim (я использую его как ex full vim-er). Вы должны попробовать это один раз. Режим org - это то, что убедило меня серьезно задуматься над ним, теперь я занимаюсь большей частью обработки текста, потому что это очень мощный и, тем не менее, простой текст. - person Jappie Kerk; 16.06.2017

Я сделал проект, который, кстати, также называется bibtex-js. Доступно в npm.

Я сделал это, потому что большинство парсеров BibTeX значительно сокращают время синтаксического анализа. Этот документ полностью соответствует авторитетному документу о BibTeX, Tame the BeaST < / em>, и поэтому очень хорошо работает с точки зрения ссылок и синтаксического анализа имен авторов, что, кажется, именно то, что вам нужно.

Я бы сказал, основываясь на каком-то библиографическом стандарте, создайте собственную встроенную функцию цитирования:

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., если у вас несколько авторов.

person Maarten    schedule 20.10.2017