Язык стилей цитирования (CSL)

Язык стилей цитирования (CSL)

Как я могу использоватьЯзык стиля цитирования(CSL) в библиографии LaTeX? Кажется фантастическим, сейчас вРепозиторий стилей Zotero.

Citation Style Language (CSL) — это XML-формат для описания форматирования внутритекстовых цитат, примечаний и библиографий. CSL предлагает:

  • Открытый формат, который может использоваться любым приложением
  • Умение писать компактные и надежные стили
  • Расширенная поддержка требований к стилю
  • Автоматическая локализация стиля
  • Простое распространение и обновление стилей
  • Быстрорастущая библиотека с тысячами свободно доступных стилей

решение1

На самом деле существует инструмент для использования CSL при компиляции документов LaTeX.Пандокпринимает --csl=<csl file>аргумент и будет использовать предоставленный стиль CSL для форматирования вашей библиографии.

Например:

pandoc --bibliography=refs.bib --csl=mystyle.csl -o out.pdf doc.tex

С радостью сгенерирую out.pdfфайл через LaTeX, используя файл bibtex refs.bibи файл CSL mystyle.cslиз источника doc.tex, в котором предположительно \thebibliographyгде-то есть одна или несколько цитат.

решение2

Одним словом: нет.

Брюс Д'Аркус, первоначальный создатель CSL, неоднократно заявлял, что хотел бы увидеть реализацию CSL для LaTeX (точнее, он часто говорил о LuaLaTeX) и что в теории это было бы не так уж и сложно осуществить (см.этоти следующие посты, например), но до сих пор никто не проявил интереса к этому (пост, на который я дал ссылку, датируется 2008 годом!).

По моему мнению, CSL для LaTeX был бы чрезвычайно полезен. CSL набирает все большую популярность (существует около полудюжины реализаций ATM), и хотя он не настолько мощный, как biblatex(но что такое?), он очень универсален и, что самое важное, действительно независим от системы.

Это было бы первое решение, предлагающее стили библиографии, которые одинаково хорошо работают как в LaTeX, так и в различных текстовых процессорах и действительно способны работать со сложными стилями.

решение3

Редактировать:

citeproc-luaтеперь содержит собственный пакет LaTeX, добавлена ​​поддержка файлов BibTeX и используются обычные команды цитирования LaTeX. Он доступен наКТАН, поэтому вы можете установить его с помощью tlmgr.

Смотрите такжеинструкции по запуску примера:

\documentclass{article}

\usepackage{citation-style-language}
\cslsetup{style = apa}
\addbibresource{example.bib}

\begin{document}

Foo \cite{ITEM-1} bar \cite{ITEM-1, ITEM-2} baz.

\printbibliography

\end{document}

Результат:

введите описание изображения здесь


Оригинальный ответ:

Теперь есть полныйLua-версия Citeproc. Он пока не содержит интерфейса TeX, но простой пакет для LuaLaTeX, который его использует, может выглядеть так citeproc.sty:

\ProvidesPackage{citeproc}
\RequirePackage{luacode}

% Basic initialization of Citeproc.lua

\begin{luacode*}
require("lualibs")

-- global object for functions defined in this 
CSL = {}

local dom = require("luaxml-domobject")
local formats = require("citeproc.citeproc-formats")

local CiteProc = require("citeproc")


local function read_file(path)
    local file = io.open(path, "r")
    if not file then return nil end
    local content = file:read("*a")
    file:close()
    return content
end


function CSL.load_style(filename)
  CSL.style = read_file(filename)
end

function CSL.load_json(filename)
  CSL.bib = CSL.bib or {}
  local items = utilities.json.tolua(read_file(filename)) 
  if not items then
    return nil, "JSON file cannot be loaded: " .. filename
  end
  for _, item in ipairs(items) do
    CSL.bib[item["id"]] = item
  end
end

function CSL.load_lang(lang)
  CSL.lang= lang
end

function CSL.load_style(style)
  CSL.style = read_file(style)
end

function make_citeproc_sys(bib)
  local bib = bib
  local citeproc_sys = {
    retrieveLocale = function (self, lang)
      local locale_name_format = CSL.locale_name_format or "locales-%s.xml"
      local filename = string.format(locale_name_format, lang)
      local content = read_file(filename)
      if content then
        return dom.parse(content)
      else
        return nil
      end
    end,
    retrieveItem = function (self, id)
      return bib[id]
    end
  }
  return citeproc_sys
end

function CSL.init()
  CSL.bib = CSL.bib or {}
  local citeproc_sys = make_citeproc_sys(CSL.bib)
  CSL.citeproc = CiteProc:new(citeproc_sys, CSL.style)
  CSL.citeproc.formatter = formats.latex
end

function CSL.cite(citation)
  local cite_items = {}
  for item in string.gmatch(citation, "([^,]+)") do 
    cite_items[#cite_items+1] = {id = item}
  end
  local result = CSL.citeproc:makeCitationCluster(cite_items)
  tex.print(result)
end

function CSL.bibliography()
    local params, result = CSL.citeproc:makeBibliography()
    tex.print("\\begin{thebibliography}{}")
    for _,bibitem in pairs(result) do
      bibitem = bibitem:gsub("bibitem%[.-%]","bibitem")
      tex.print(bibitem)
    end
    tex.print("\\end{thebibliography}")
end


\end{luacode*}

\newcommand\cslstyle[1]{%
  \luaexec{CSL.load_style("#1")}
}

\newcommand\csljson[1]{%
  \luaexec{CSL.load_json("#1")}
}

\newcommand\cslinit{%
\luaexec{CSL.init()}
}

\newcommand\cslcite[1]{%
  \luaexec{CSL.cite("\luaescapestring{#1}")}
}

\newcommand\cslbibliography{\luaexec{CSL.bibliography()}}

% initialize citeproc
\AtBeginDocument{%
  \cslinit%
}


\endinput

Он не поддерживает файлы BibTeX, ему нужен JSON на данный момент. Чтобы запустить следующий пример, загрузите bib.json, simple.csl, и locales-en-US.xmlизПример каталога Citeproc-lua.

Файл sample.tex:

\documentclass{article}
\usepackage{citeproc}
\cslstyle{simple.csl}
\csljson{bib.json}
\begin{document}
hello world \cslcite{ITEM-1,ITEM-2}

\cslbibliography
\end{document}

Вы можете скомпилировать его с помощью LuaLaTeX. Вот результат:

введите описание изображения здесь

решение4

Если вы пишете свой документ LaTeX через RMarkdown, у вас есть возможность установить параметр csl в заголовке вашего файла (т.е. заголовок YAML). Это удобно и просто, вот пример заголовка YAML для RMarkdown:

---
output: 
  pdf_document
title: 'Title of document'
author:
  name: "My Name"
bibliography: references.bib
csl: biblio_style.csl

---

Text [@reference].
# References

Связанный контент