我如何使用引用样式语言(CSL)在 LaTeX 书目中?这看起来很棒,目前有 2,803 种引用样式Zotero 样式库。
引文样式语言 (CSL) 是一种 XML 格式,用于描述文内引文、注释和参考书目的格式。CSL 提供:
- 任何应用程序都可以使用的开放格式
- 能够编写紧凑而强大的样式
- 广泛支持风格要求
- 自动风格定位
- 轻松分发和更新样式
- 快速增长的库,拥有数千种免费样式
答案1
事实上,有一个在编译 LaTeX 文档时使用 CSL 的工具。潘多克接受一个--csl=<csl file>
参数,它将使用提供的 CSL 样式来格式化您的参考书目。
例如:
pandoc --bibliography=refs.bib --csl=mystyle.csl -o out.pdf doc.tex
将很乐意out.pdf
使用 bibtex 文件refs.bib
和 CSL 文件mystyle.csl
从源代码通过 LaTeX 生成文件,该文件可能在某处doc.tex
有一个或一些引用。\thebibliography
答案2
一句话概括:不。
CSL 的原创者 Bruce D'Arcus 曾多次表示,他希望看到 CSL 为 LaTeX 实现(更准确地说:他经常谈论 LuaLaTeX),而且从理论上讲,实现这一点并不难(参见这以及以下帖子),但到目前为止,还没有人对此感兴趣(我链接到的帖子可以追溯到 2008 年!)。
我认为,CSL for LaTeX 非常有用。CSL 越来越受到关注(目前大约有 6 种实现),尽管它不如那么强大biblatex
(但什么才是呢?),但它非常灵活,而且最重要的是,真正与系统无关。
它将是第一个提供适用于 LaTeX 和各种文字处理器的参考书目样式的解决方案,并且真正能够处理复杂的样式。
答案3
编辑:
西替普罗现在包含自己的 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
如果您通过 RMarkdown 编写 LaTeX 文档,则可以在文件头(即 YAML 头)中设置 csl 参数。这非常方便直接,以下是 RMarkdown 的一个示例 YAML 头:
---
output:
pdf_document
title: 'Title of document'
author:
name: "My Name"
bibliography: references.bib
csl: biblio_style.csl
---
Text [@reference].
# References