¿Cómo puedo utilizarIdioma de estilo de cita(CSL) en la bibliografía LaTeX? Parece fantástico, hay 2.803 estilos de citas en este momento enRepositorio de estilo Zotero.
El Citation Style Language (CSL) es un formato XML para describir el formato de citas, notas y bibliografías en el texto. CSL ofrece:
- Un formato abierto que puede ser utilizado por cualquier aplicación.
- La capacidad de escribir estilos compactos y robustos.
- Amplio soporte para requisitos de estilo.
- Localización automática de estilos
- Fácil distribución y actualización de estilos.
- Una biblioteca de rápido crecimiento con miles de estilos disponibles gratuitamente
Respuesta1
De hecho, existe una herramienta para utilizar CSL al compilar documentos LaTeX.Pandocacepta un --csl=<csl file>
argumento y utilizará el estilo CSL proporcionado para formatear su bibliografía.
Por ejemplo:
pandoc --bibliography=refs.bib --csl=mystyle.csl -o out.pdf doc.tex
Felizmente generará out.pdf
un archivo a través de LaTeX usando el archivo bibtex refs.bib
y el archivo CSL mystyle.csl
, desde la fuente doc.tex
, que presumiblemente tiene una \thebibliography
o algunas citas en alguna parte.
Respuesta2
En una palabra: no.
Bruce D'Arcus, el creador original de CSL, ha dicho repetidamente que le gustaría ver una implementación de CSL para LaTeX (para ser más precisos: hablaba a menudo de LuaLaTeX) y que tal cosa no sería demasiado difícil de lograr. lograr en teoría (verestey las siguientes publicaciones, por ejemplo), pero hasta ahora nadie ha estado interesado en hacerlo (¡la publicación a la que enlacé data de 2008!).
En mi opinión, CSL para LaTeX sería extremadamente útil. CSL está ganando cada vez más tracción (hay alrededor de media docena de implementaciones ATM) y, aunque no es tan poderoso como biblatex
(¿pero qué lo es?), es muy versátil y, lo más importante, verdaderamente independiente del sistema.
Sería la primera solución en ofrecer estilos de bibliografía que funcionan igualmente para LaTeX y una variedad de procesadores de texto y es realmente capaz de manejar estilos complejos.
Respuesta3
Editar:
citeproc-luaahora contiene su propio paquete LaTeX, agregó soporte para archivos BibTeX y usa los comandos normales de citas de LaTeX. Está disponible enCTAN, para que puedas instalarlo usando tlmgr
.
Ver también elinstrucciones sobre cómo ejecutar el ejemplo:
\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:
Respuesta original:
Ahora hay un completoVersión lua de Citeproc. Aún no contiene la interfaz TeX, pero el paquete simple para LuaLaTeX que la usa puede verse así 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
No admite archivos BibTeX, necesita JSON por el momento. Para ejecutar el siguiente ejemplo, descargue bib.json
, simple.csl
y locales-en-US.xml
desde elDirectorio de ejemplo de Citeproc-lua.
El sample.tex
archivo:
\documentclass{article}
\usepackage{citeproc}
\cslstyle{simple.csl}
\csljson{bib.json}
\begin{document}
hello world \cslcite{ITEM-1,ITEM-2}
\cslbibliography
\end{document}
Puedes compilarlo usando LuaLaTeX. Este es el resultado:
Respuesta4
Si escribe su documento LaTeX a través de RMarkdown, tiene la capacidad de establecer un parámetro csl en el encabezado de su archivo (es decir, el encabezado YAML). Es convenientemente sencillo, aquí hay un encabezado YAML de ejemplo para un RMarkdown:
---
output:
pdf_document
title: 'Title of document'
author:
name: "My Name"
bibliography: references.bib
csl: biblio_style.csl
---
Text [@reference].
# References