引文風格語言 (CSL)

引文風格語言 (CSL)

我該如何使用引文風格語言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.jsonsimple.csllocales-en-US.xmlCiteproc-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

相關內容