在 Mac 上使用 Zotero 時,透過在 CSL 樣式中加入條件分支,為編輯的多卷書籍設定不同格式。本指南適用於有編者且沒有作者的個別卷冊,並使用合成的中繼資料和完整的示範樣式。

定義哪些書籍應套用特殊格式

CSL 使用 book 表示有作者的書籍、編輯文集、完整的多卷作品和個別卷冊。其文件列出的類型中,沒有專門表示「經編輯的多卷書籍」的類型。受支援的做法是在樣式中檢查書籍的中繼資料。CSL 1.0.2 規格

本指南刻意將輸出規則訂得明確:具有 editor 和 volume、且沒有 author 的 book,會以標題優先的格式列入參考書目。其他所有紀錄則使用示範中的一般創作者優先格式。這是用來說明格式選擇的範例,並非規定的引用標準。

特殊條目依下列順序排列:斜體標題、編者姓名與角色標籤、卷號,接著是出版地、出版社和年份。例如,下方合成紀錄預期會輸出如下:

Collected Shape Exercises. Nora Vale, 編。第 2 卷。Sampletown:Example Workshop Press,2024。

卷冊與整套作品的區別很重要。CSL 的 volume 用來識別特定卷冊;number-of-volumes 則記錄總卷數。編者人數以及標題中的數字都無法確立這項區別。CSL 變數定義

輸入中繼資料明確的測試紀錄

在 Zotero 中建立一筆 Book 紀錄,並填入以下合成值。將 Nora Vale 設為角色為 Editor 的創作者,並留空作者欄位。Zotero 說明了不同的創作者角色,也區分了 Volume 和 # of Volumes。Zotero 項目類型與欄位

Zotero 欄位 合成值
Item Type Book
Title Collected Shape Exercises
創作者角色 Editor
創作者名字 Nora
創作者姓氏 Vale
Volume 2
# of Volumes 3
Place Sampletown
Publisher Example Workshop Press
Date 2024

在 Volume 欄位輸入 2,不要另外加入 vol.。標籤由樣式提供。此處 2 表示引用的卷冊,3 則描述整套作品。Zotero 建議以數字輸入卷號。Zotero 的書籍與期刊欄位

若要建立代表整套三卷作品的另一筆紀錄,請將 Volume 留空,並將 # of Volumes 保留為 3。依照本文的規則,這筆紀錄會走一般處理路徑。這可避免參考書目把整套作品誤當成某一特定編號卷冊。

在 Mac 上建立完整的示範樣式

開啟 TextEdit,並在貼上程式碼前選擇 格式 → 製作純文字。將檔案儲存為 edited-multivolume-demo.csl,並確認檔名以 .csl 結尾。Zotero 的編輯指南特別說明如何在 Mac 上使用 TextEdit 編輯純文字檔。編輯 CSL 樣式-逐步指南

以下是完整的示範樣式。其參考書目會依照上述規則處理;文內引用則只顯示標題。一般條目刻意採用精簡格式,建議先用此檔案了解並測試規則,再將其套用至已有樣式,以處理包含多種紀錄的資料庫。

<?xml version="1.0" encoding="utf-8"?>
<style xmlns="http://purl.org/net/xbiblio/csl" version="1.0"
       class="in-text" default-locale="en-US">
  <info>
    <title>Edited Multivolume Books Demo</title>
    <id>urn:uuid:6b4f5d8c-7b20-4fea-92eb-6207d10d94e3</id>
    <updated>2026-10-29T12:13:38+00:00</updated>
  </info>
  <macro name="editors">
    <names variable="editor">
      <name and="text" delimiter=", "/>
      <label form="short" prefix=", "/>
    </names>
  </macro>
  <macro name="creators">
    <choose>
      <if variable="author">
        <names variable="author">
          <name and="text" delimiter=", "/>
        </names>
      </if>
      <else>
        <text macro="editors"/>
      </else>
    </choose>
  </macro>
  <macro name="extent">
    <choose>
      <if variable="volume">
        <group delimiter=" ">
          <label variable="volume" form="short"/>
          <text variable="volume"/>
        </group>
      </if>
      <else-if variable="number-of-volumes">
        <group delimiter=" ">
          <text variable="number-of-volumes"/>
          <label variable="number-of-volumes" form="short"/>
        </group>
      </else-if>
    </choose>
  </macro>
  <macro name="imprint">
    <group delimiter=", ">
      <group delimiter=": ">
        <text variable="publisher-place"/>
        <text variable="publisher"/>
      </group>
      <date variable="issued">
        <date-part name="year"/>
      </date>
    </group>
  </macro>
  <macro name="ordinary-entry">
    <group delimiter=". ">
      <text macro="creators"/>
      <text variable="title" font-style="italic"/>
      <text macro="extent"/>
      <text macro="imprint"/>
    </group>
  </macro>
  <macro name="entry">
    <choose>
      <if type="book" variable="editor volume" match="all">
        <choose>
          <if variable="author" match="none">
            <group delimiter=". ">
              <text variable="title" font-style="italic"/>
              <text macro="editors"/>
              <text macro="extent"/>
              <text macro="imprint"/>
            </group>
          </if>
          <else>
            <text macro="ordinary-entry"/>
          </else>
        </choose>
      </if>
      <else>
        <text macro="ordinary-entry"/>
      </else>
    </choose>
  </macro>
  <citation>
    <layout prefix="(" suffix=")" delimiter="; ">
      <text variable="title" font-style="italic"/>
    </layout>
  </citation>
  <bibliography>
    <layout suffix=".">
      <text macro="entry"/>
    </layout>
  </bibliography>
</style>

updated 元素是樣式檔必要的中繼資料。此處記錄的是這份示範的建立時間,並非文章的發布或審閱時間。根元素使用 version="1.0",符合 CSL 1.0 相容樣式的規範。CSL 樣式結構

修改前先了解條件

外層條件使用 match="all",要求項目類型是書籍,且兩個變數都有值。內層條件透過 match="none",要求作者欄位為空。使用巢狀條件可以表達這些要求的組合,避免缺少作者的檢查套用至其他條件。CSL 條件式呈現

下表可用來實際檢查此實作的判斷結果:

紀錄 是否使用標題優先的特殊條目? 原因
書籍,有編者,第 2 卷,無作者 是 符合所有要求
書籍,有編者,第 1 卷,無作者 是 第一卷仍符合規則
書籍,有編者,沒有卷號,總卷數為三卷 否 依此慣例代表整套作品
書籍,有作者、有編者,第 2 卷 否 作者欄位有值
書籍,第 2 卷,無編者 否 編者欄位為空
書籍章節,有編者和卷號 否 項目類型不是 book

此條件會檢查中繼資料是否有值,但無法判斷匯入的紀錄是否正確描述了預期的書籍。將規則套用到大量紀錄之前,請先檢查標題和卷號欄位。

CSL 1.0.2 也沒有通用的數值大於條件。若檢查 number-of-volumes 是否有值,1 和 3 都會符合;is-numeric 也無法解決這項比較問題。若要將規則延伸至整套作品,請先建立一致的中繼資料慣例,不要把欄位有值當成作品包含多卷的證明。CSL 條件定義

示範中的 extent 巨集會在兩個欄位都有值時優先使用特定卷冊。因此範例只會顯示 第 2 卷,不會同時列出整套作品的總卷數。一般條目的創作者巨集也會優先使用作者而非編者。這些都是本範例明確採用的簡化處理;修改自己的樣式時,請保留其他創作者或卷冊資訊的需求。

預覽結果並測試邊界情況

在 Zotero 中選取合成紀錄。在 Zotero 設定中開啟 引用,再選擇 樣式編輯器。將完整樣式貼到編輯器,然後按一下 重新整理,即可使用目前選取的資料庫項目。編輯器會分別顯示引用和參考書目條目,並在編輯時更新預覽。Zotero 樣式編輯器

檢查參考書目條目是否依照預期的標題優先順序排列。文內引用應維持為帶括號的斜體標題,因為此示範只在參考書目的條目巨集中放入特殊規則。

接著建立符合判斷表的合成變體。在一筆紀錄中加入作者,在另一筆中移除卷號,再建立一筆代表整套作品的紀錄。為每筆紀錄設定不同且中性的標題,方便在預覽中辨認。確認只有符合條件的紀錄會將標題移到編者姓名之前。

準備期間已解析範例 XML,並檢查巨集引用。此範例尚未在 Mac 版 Zotero 應用程式中實際呈現。安裝或修改前,請使用專案開發指南所連結的驗證器,依 CSL 結構描述驗證完整檔案。僅檢查 XML 語法無法確認 CSL 有效性。CSL 樣式開發-驗證

關閉編輯器或選擇其他已安裝樣式前,請先儲存程式碼:Zotero 說明這些操作會捨棄未儲存的修改。Zotero 樣式編輯器

安裝樣式或修改現有樣式

若要安裝已儲存的檔案,請開啟 Zotero 的 引用 設定,並在樣式管理器中使用 + 按鈕選取 edited-multivolume-demo.csl。相同設定也提供 樣式預覽,可使用已安裝樣式檢查選取的紀錄。Zotero 引用設定

若要修改現有引用格式,請從目前的獨立樣式開始。相依樣式只會指向父樣式,不包含自己的格式設定指示。入門指南-CSL 簡介

保留現有樣式的一般呈現方式作為後備處理,並將特殊條件放在較廣泛的書籍規則之前。依現有樣式的名稱、標題和出版資訊巨集調整特殊輸出。除非也需要修改,否則請保留原有的排序、其他項目類型和引用行為。這樣新增的分支就能解決單一需求,而不會取代格式中的其他部分。

安裝前,請為修改後的樣式設定不同的標題和 ID;Zotero 提醒,若沿用原本的識別資料,更新可能會覆寫修改後的版本。Zotero 樣式編輯指南

如果沒有出現特殊條目,請先依照判斷表檢查紀錄,再修改標點或巨集。確認創作者角色、卷號、作者欄位是否空白,以及項目類型。確認符合條件和後備紀錄的行為都符合預期後,你就有了一條可重複使用且適用範圍明確的呈現規則:經編輯的個別卷冊會使用專屬參考書目格式,其他紀錄則繼續採用選定的一般處理方式。

來源