引用スタイル言語 (CSL)

引用スタイル言語 (CSL)

どのように使用すればいいですか引用スタイル言語(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.pdfbibtex ファイルrefs.bibと CSL ファイルを使用して LaTeX 経由でファイルを生成します。おそらく、そのソースには またはいくつかの引用がどこかに含まれているはずです。mystyle.csldoc.tex\thebibliography

答え2

一言で言えば、いいえ。

CSLのオリジナルの作者であるブルース・ダーカスは、LaTeX用のCSLの実装を見たいと繰り返し述べており(より正確に言うと、彼はLuaLaTeXについてよく話していました)、理論的にはそのようなことを実現するのはそれほど難しくないだろうとも述べています(これそして、次の投稿もその例です) が、今のところ、誰もそれに興味を示していません (私がリンクした投稿は 2008 年のものです)。

私の意見では、LaTeX 用の CSL は非常に便利です。CSL はますます注目を集めており (現在、実装は 6 つほどあります)、それほど強力ではありませんが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.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

関連情報