Wie kann ichZitierstil Sprache(CSL) in LaTeX Bibliographie? Es scheint fantastisch, es gibt derzeit 2.803 Zitierstile inZotero-Stil-Repository.
Die Citation Style Language (CSL) ist ein XML-Format zur Beschreibung der Formatierung von Zitaten im Text, Anmerkungen und Bibliographien. CSL bietet:
- Ein offenes Format, das von jeder Anwendung verwendet werden kann
- Die Fähigkeit, kompakte und robuste Stile zu schreiben
- Umfassende Unterstützung von Stilanforderungen
- Automatische Stillokalisierung
- Einfache Verteilung und Aktualisierung von Stilen
- Eine schnell wachsende Bibliothek mit Tausenden von frei verfügbaren Stilen
Antwort1
Es gibt tatsächlich ein Tool zur Verwendung von CSL beim Kompilieren von LaTeX-Dokumenten.Pandocakzeptiert ein --csl=<csl file>
Argument und verwendet den bereitgestellten CSL-Stil zum Formatieren Ihrer Bibliografie.
Zum Beispiel:
pandoc --bibliography=refs.bib --csl=mystyle.csl -o out.pdf doc.tex
Erstellt problemlos out.pdf
eine Datei über LaTeX unter Verwendung der Bibtex-Datei refs.bib
und der CSL-Datei mystyle.csl
aus der Quelle doc.tex
, die vermutlich \thebibliography
irgendwo ein oder mehrere Zitate enthält.
Antwort2
Mit einem Wort: Nein.
Bruce D'Arcus, der ursprüngliche Entwickler von CSL, hat wiederholt erklärt, dass er gerne eine Implementierung von CSL für LaTeX sehen würde (genauer gesagt: er sprach oft über LuaLaTeX) und dass so etwas theoretisch nicht allzu schwer zu erreichen wäre (sieheDasund die folgenden Beiträge zum Beispiel), aber bisher hatte niemand Interesse daran (der Beitrag, auf den ich verlinkt habe, stammt aus dem Jahr 2008!).
Meiner Meinung nach wäre CSL für LaTeX äußerst nützlich. CSL wird immer beliebter (es gibt derzeit etwa ein halbes Dutzend Implementierungen) und obwohl es nicht ganz so leistungsstark ist biblatex
(aber was ist das schon?), ist es sehr vielseitig und, was am wichtigsten ist, wirklich systemunabhängig.
Es wäre die erste Lösung, die Bibliografiestile anbietet, die sowohl mit LaTeX als auch mit einer Vielzahl von Textverarbeitungsprogrammen gleichermaßen funktionieren und wirklich mit komplexen Stilen umgehen können.
Antwort3
Bearbeiten:
citeproc-luaenthält jetzt ein eigenes LaTeX-Paket, hat Unterstützung für BibTeX-Dateien hinzugefügt und verwendet die normalen LaTeX-Zitationsbefehle. Es ist verfügbar aufCTAN, Sie können es also mit installieren tlmgr
.
Siehe auch dieAnweisungen zum Ausführen des Beispiels:
\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}
Ergebnis:
Ursprüngliche Antwort:
Es gibt nun eine vollständigeLua-Version von Citeproc. Es enthält noch keine TeX-Schnittstelle, aber ein einfaches Paket für LuaLaTeX, das es verwendet, kann so aussehen 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
Es unterstützt keine BibTeX-Dateien, es benötigt derzeit JSON. Um das folgende Beispiel auszuführen, laden Sie bib.json
, simple.csl
, und locales-en-US.xml
von derCiteproc-lua-Beispielverzeichnis.
Die sample.tex
Datei:
\documentclass{article}
\usepackage{citeproc}
\cslstyle{simple.csl}
\csljson{bib.json}
\begin{document}
hello world \cslcite{ITEM-1,ITEM-2}
\cslbibliography
\end{document}
Sie können es mit LuaLaTeX kompilieren. Dies ist das Ergebnis:
Antwort4
Wenn Sie Ihr LaTeX-Dokument über RMarkdown schreiben, können Sie einen csl-Parameter im Header Ihrer Datei (also im YAML-Header) festlegen. Das ist ganz einfach, hier ist ein Beispiel für einen YAML-Header für ein RMarkdown:
---
output:
pdf_document
title: 'Title of document'
author:
name: "My Name"
bibliography: references.bib
csl: biblio_style.csl
---
Text [@reference].
# References