Linguagem de estilo de citação (CSL)

Linguagem de estilo de citação (CSL)

Como posso usarLinguagem de estilo de citação(CSL) na bibliografia LaTeX? Parece fantástico, há 2.803 Citation Style agora emRepositório de estilo Zotero.

A Citation Style Language (CSL) é um formato XML para descrever a formatação de citações, notas e bibliografias no texto. A CSL oferece:

  • Um formato aberto que pode ser usado por qualquer aplicativo
  • A capacidade de escrever estilos compactos e robustos
  • Amplo suporte para requisitos de estilo
  • Localização automática de estilo
  • Fácil distribuição e atualização de estilos
  • Uma biblioteca em rápido crescimento com milhares de estilos disponíveis gratuitamente

Responder1

Na verdade, existe uma ferramenta para usar CSL ao compilar documentos LaTeX.Pandocaceita um --csl=<csl file>argumento e usará o estilo CSL fornecido para formatar sua bibliografia.

Por exemplo:

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

Felizmente, geraremos out.pdfarquivos via LaTeX usando o arquivo bibtex refs.bibe o arquivo CSL mystyle.csl, de source doc.tex, que presumivelmente contém uma \thebibliographyou algumas citações em algum lugar.

Responder2

Em uma palavra: não.

Bruce D'Arcus, o criador original do CSL, disse repetidamente que gostaria de ver uma implementação do CSL para LaTeX (para ser mais preciso: ele falava muitas vezes sobre LuaLaTeX) e que tal coisa não seria muito difícil de implementar. alcançar em teoria (veressee os posts a seguir, por exemplo), mas até agora ninguém se interessou em fazer isso (o post ao qual coloquei um link data de 2008!).

Na minha opinião, CSL para LaTeX seria extremamente útil. A CSL está ganhando cada vez mais força (há cerca de meia dúzia de implementações ATM) e, embora não seja tão poderosa quanto biblatex(mas o que é?), é muito versátil e, o mais importante, verdadeiramente independente do sistema.

Seria a primeira solução a oferecer estilos de bibliografia que funcionassem igualmente para LaTeX e uma variedade de processadores de texto e fossem realmente capazes de lidar com estilos complexos.

Responder3

Editar:

citeproc-luaagora contém seu próprio pacote LaTeX, adicionou suporte para arquivos BibTeX e usa os comandos normais de citação do LaTeX. Está disponível emCTAN, então você pode instalá-lo usando tlmgr.

Veja também oinstruções sobre como executar o exemplo:

\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}

Resultado:

insira a descrição da imagem aqui


Resposta original:

Existe agora um completoVersão Lua do Citeproc. Ele ainda não contém a interface TeX, mas um pacote simples para LuaLaTeX que a utiliza pode ser assim 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

Não suporta arquivos BibTeX, precisa de JSON no momento. Para executar o exemplo a seguir, baixe bib.json, simple.csle locales-en-US.xmldo arquivoDiretório de exemplo Citeproc-lua.

O sample.texarquivo:

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

\cslbibliography
\end{document}

Você pode compilá-lo usando LuaLaTeX. Este é o resultado:

insira a descrição da imagem aqui

Responder4

Se você escrever seu documento LaTeX através do RMarkdown, você poderá definir um parâmetro csl no cabeçalho do seu arquivo (ou seja, o cabeçalho YAML). É convenientemente simples, aqui está um exemplo de cabeçalho YAML para um RMarkdown:

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

---

Text [@reference].
# References

informação relacionada