我該如何使用引文風格語言LaTeX 參考書目中的 (CSL)?看起來棒極了,現在有 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 文件透過 LaTeXmystyle.csl
從原始碼產生文件doc.tex
,該文件可能\thebibliography
在某處有一個或一些引用。
答案2
一言以蔽之:不。
CSL 的最初創作者 Bruce D'Arcus 曾多次表示,他希望看到 CSL 在 LaTeX 上的實現(更準確地說:他經常談論 LuaLaTeX),而這樣的事情對於 LaTeX 來說並不是太難。上實現(參見這以及以下帖子),但到目前為止,沒有人有興趣這樣做(我鏈接到的帖子可以追溯到 2008 年!)。
在我看來,CSL for LaTeX 將非常有用。 CSL 越來越受到關注(大約有六種實現 ATM),雖然它不如 ATM 強大biblatex
(但它是什麼?),但它非常通用,最重要的是,真正與系統無關。
它將是第一個提供參考書目樣式的解決方案,這些樣式同樣適用於 LaTeX 和各種文字處理器,並且確實能夠處理複雜的樣式。
答案3
編輯:
citeproc-lua現在包含它自己的 LaTeX 包,它添加了對 BibTeX 文件的支持,並使用正常的 LaTeX 引用命令。它可用於CTAN,因此您可以使用安裝它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}
結果:
原答案:
現在已經有一個完整的Citeproc 的 Lua 版本。它也不包含 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