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.pdf
arquivos via LaTeX usando o arquivo bibtex refs.bib
e o arquivo CSL mystyle.csl
, de source doc.tex
, que presumivelmente contém uma \thebibliography
ou 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:
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.csl
e locales-en-US.xml
do arquivoDiretório de exemplo Citeproc-lua.
O sample.tex
arquivo:
\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:
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