Skip to content

Instantly share code, notes, and snippets.

@kusaanko
Last active January 21, 2026 14:32
Show Gist options
  • Select an option

  • Save kusaanko/fcd7ebd06b51ca6d2a230ab2477842e5 to your computer and use it in GitHub Desktop.

Select an option

Save kusaanko/fcd7ebd06b51ca6d2a230ab2477842e5 to your computer and use it in GitHub Desktop.
ACS citation style file for MS Word

このファイルはACS(American Chemical Society)のスタイルガイドライン(https://pubs.acs.org/doi/full/10.1021/acsguide.40303 )に沿った引用を Wordで生成するためのスタイルファイルです。

以下に配置することで、Wordの参照設定→引用文献の項目から設定可能。

Windowsなら APPDATA%\Microsoft\Bibliography\Style

macOSなら ~/Library/Group Containers/UBF8T346G9.Office/User Content/Citations に配置することでWordで設定可能になります。

厳格なファイルを作成する予定はなく、自分の必要な範囲で使えればいい程度のものですので、メンテナンスの要求などは行わないようお願いします。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:b="http://schemas.openxmlformats.org/officeDocument/2006/bibliography"
xmlns:t="http://www.microsoft.com/temp">
<xsl:output method="html" encoding="utf-8" />
<!-- ================================================================= -->
<!-- メイン処理 -->
<!-- ================================================================= -->
<xsl:template match="/">
<xsl:choose>
<!-- スタイル名表示 -->
<xsl:when test="b:StyleNameLocalized">
<xsl:text>ACS</xsl:text>
</xsl:when>
<xsl:when test="b:Version">
<xsl:text>2006</xsl:text>
</xsl:when>
<xsl:when test="b:OfficeStyleKey">
<xsl:text>AmChemSoc</xsl:text>
</xsl:when>
<!-- 重要フィールドの定義 -->
<xsl:when test="b:GetImportantFields">
<b:ImportantFields>
<b:ImportantField>
<xsl:text>b:Author/b:Author/b:NameList</xsl:text>
</b:ImportantField>
<b:ImportantField>
<xsl:text>b:Title</xsl:text>
</b:ImportantField>
<b:ImportantField>
<xsl:text>b:JournalName</xsl:text>
</b:ImportantField>
<b:ImportantField>
<xsl:text>b:Year</xsl:text>
</b:ImportantField>
<b:ImportantField>
<xsl:text>b:City</xsl:text>
</b:ImportantField>
<b:ImportantField>
<xsl:text>b:Publisher</xsl:text>
</b:ImportantField>
<b:ImportantField>
<xsl:text>b:Volume</xsl:text>
</b:ImportantField>
<b:ImportantField>
<xsl:text>b:Pages</xsl:text>
</b:ImportantField>
</b:ImportantFields>
</xsl:when>
<!-- 文中引用(すべて上付き文字) -->
<xsl:when test="b:Citation">
<xsl:call-template name="Citation" />
</xsl:when>
<!-- 参考文献リスト -->
<xsl:when test="b:Bibliography">
<xsl:call-template name="Bibliography" />
</xsl:when>
</xsl:choose>
</xsl:template>
<!-- ================================================================= -->
<!-- 文中引用テンプレート -->
<!-- ================================================================= -->
<xsl:template name="Citation">
<html xmlns="http://www.w3.org/TR/REC-html40">
<body>
<!-- supタグで囲み上付き文字にする -->
<sup>
<xsl:for-each select="b:Citation">
<xsl:if test="position() > 1">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:value-of
select="b:Source/b:RefOrder" />
</xsl:for-each>
</sup>
</body>
</html>
</xsl:template>
<!-- ================================================================= -->
<!-- 参考文献リストテンプレート -->
<!-- ================================================================= -->
<xsl:template name="Bibliography">
<html xmlns="http://www.w3.org/TR/REC-html40">
<body>
<table width="100%" class="MsoBibliography">
<xsl:for-each select="b:Bibliography/b:Source">
<xsl:sort select="b:RefOrder" data-type="number" />
<tr>
<!-- 番号 -->
<td width="5%" valign="top">
<p>
<xsl:value-of select="b:RefOrder" />
<xsl:text>.</xsl:text>
</p>
</td>
<!-- 文献情報 -->
<td width="95%" valign="top">
<p>
<xsl:call-template name="Entry" />
</p>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
<!-- ================================================================= -->
<!-- 各文書タイプの表示形式 -->
<!-- ================================================================= -->
<xsl:template name="Entry">
<!-- 著者リスト (共通) -->
<xsl:call-template name="ACS_AuthorList" />
<xsl:choose>
<!-- 1. 雑誌論文 (Journal Article, Periodical) -->
<!-- 書式: Title. J. Name Year(Bold), Vol(Italic), Pages. -->
<xsl:when test="b:SourceType='JournalArticle' or b:SourceType='ArticleInAPeriodical'">
<xsl:call-template name="Title_Plain" />
<xsl:if test="b:JournalName">
<i>
<xsl:value-of select="b:JournalName" />
</i>
<xsl:text> </xsl:text>
</xsl:if>
<xsl:if
test="not(b:JournalName) and b:PeriodicalTitle">
<i>
<xsl:value-of select="b:PeriodicalTitle" />
</i>
<xsl:text> </xsl:text>
</xsl:if>
<xsl:if
test="b:Year">
<b>
<xsl:value-of select="b:Year" />
</b>
</xsl:if>
<xsl:if
test="b:Volume">
<xsl:text>, </xsl:text>
<i>
<xsl:value-of select="b:Volume" />
</i>
</xsl:if>
<xsl:if
test="b:Pages">
<xsl:text>, </xsl:text>
<xsl:value-of select="b:Pages" />
</xsl:if>
<xsl:text>.</xsl:text>
</xsl:when>
<!-- 2. 書籍 (Book) -->
<!-- 書式: Title(Italic); Publisher: City, Year. -->
<xsl:when test="b:SourceType='Book'">
<xsl:call-template name="Title_Italic_Semicolon" />
<xsl:call-template
name="Publisher_City_Year" />
</xsl:when>
<!-- 3. 書籍の章 / 会議録 (BookSection, ConferenceProceedings) -->
<!-- 書式: Title. In Book Title(Italic); Editors, Eds.; Publisher: City, Year; pp Pages. -->
<xsl:when test="b:SourceType='BookSection' or b:SourceType='ConferenceProceedings'">
<xsl:call-template name="Title_Plain" />
<xsl:text>In </xsl:text>
<xsl:choose>
<xsl:when test="b:BookTitle">
<i>
<xsl:value-of select="b:BookTitle" />
</i>
</xsl:when>
<xsl:when test="b:ConferenceName">
<i>
<xsl:value-of select="b:ConferenceName" />
</i>
</xsl:when>
</xsl:choose>
<xsl:text>; </xsl:text>
<!-- 編集者 -->
<xsl:call-template
name="ACS_EditorList" />
<xsl:if test="b:Publisher">
<xsl:value-of select="b:Publisher" />
<xsl:text>: </xsl:text>
</xsl:if>
<xsl:if
test="b:City">
<xsl:value-of select="b:City" />
<xsl:text>, </xsl:text>
</xsl:if>
<xsl:if
test="b:Year">
<xsl:value-of select="b:Year" />
</xsl:if>
<xsl:if test="b:Pages">
<xsl:text>; pp </xsl:text>
<xsl:value-of select="b:Pages" />
</xsl:if>
<xsl:text>.</xsl:text>
</xsl:when>
<!-- 4. レポート (Report) -->
<!-- 書式: Title(Italic); Report No; Inst: City, Year. -->
<xsl:when test="b:SourceType='Report'">
<xsl:call-template name="Title_Italic_Semicolon" />
<xsl:if test="b:Number"> <!--
Report Number if standard mapping -->
<xsl:value-of
select="b:Number" />
<xsl:text>; </xsl:text>
</xsl:if>
<xsl:if
test="b:Institution">
<xsl:value-of select="b:Institution" />
<xsl:text>: </xsl:text>
</xsl:if>
<xsl:if
test="b:City">
<xsl:value-of select="b:City" />
<xsl:text>, </xsl:text>
</xsl:if>
<xsl:if
test="b:Year">
<xsl:value-of select="b:Year" />
</xsl:if>
<xsl:text>.</xsl:text>
</xsl:when>
<!-- 5. 特許 (Patent) -->
<!-- 書式: Title. Patent Number, Date/Year. -->
<xsl:when test="b:SourceType='Patent'">
<xsl:call-template name="Title_Plain" />
<xsl:if test="b:PatentNumber">
<xsl:value-of select="b:PatentNumber" />
</xsl:if>
<xsl:if
test="b:Year">
<xsl:text>, </xsl:text>
<xsl:value-of select="b:Year" />
</xsl:if>
<xsl:text>.</xsl:text>
</xsl:when>
<!-- 6. Webサイト (InternetSite) -->
<!-- 書式: Title. URL (accessed Date). -->
<xsl:when test="b:SourceType='InternetSite' or b:SourceType='DocumentFromInternetSite'">
<xsl:call-template name="Title_Plain" />
<xsl:if test="b:URL">
<xsl:value-of select="b:URL" />
<xsl:text> </xsl:text>
</xsl:if>
<xsl:if
test="b:YearAccessed">
<xsl:text>(accessed </xsl:text>
<xsl:if test="b:MonthAccessed">
<xsl:value-of select="b:MonthAccessed" />
<xsl:text> </xsl:text>
</xsl:if>
<xsl:if
test="b:DayAccessed">
<xsl:value-of select="b:DayAccessed" />
<xsl:text>, </xsl:text>
</xsl:if>
<xsl:value-of
select="b:YearAccessed" />
<xsl:text>)</xsl:text>
</xsl:if>
<xsl:text>.</xsl:text>
</xsl:when>
<!-- 7. その他 (Film, Art, Sound, Misc) -->
<!-- 汎用書式: Title(Italic). Production/Publisher, Year. -->
<xsl:otherwise>
<xsl:call-template name="Title_Italic_Semicolon" />
<xsl:if
test="b:ProductionCompany">
<xsl:value-of select="b:ProductionCompany" />
<xsl:text>, </xsl:text>
</xsl:if>
<xsl:if
test="not(b:ProductionCompany) and b:Publisher">
<xsl:value-of select="b:Publisher" />
<xsl:text>, </xsl:text>
</xsl:if>
<xsl:if
test="b:Year">
<xsl:value-of select="b:Year" />
</xsl:if>
<xsl:text>.</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- ================================================================= -->
<!-- ヘルパーテンプレート -->
<!-- ================================================================= -->
<!-- 著者名リスト (ACS: Last, Init.; Last, Init.) -->
<xsl:template name="ACS_AuthorList">
<xsl:variable name="AuthorList" select="b:Author/b:Author/b:NameList/b:Person" />
<!-- 著者以外の役割(発明者、監督など)へのフォールバック -->
<xsl:variable
name="InventorList" select="b:Author/b:Inventor/b:NameList/b:Person" />
<xsl:variable
name="DirectorList" select="b:Author/b:Director/b:NameList/b:Person" />
<xsl:variable
name="ArtistList" select="b:Author/b:Artist/b:NameList/b:Person" />
<xsl:variable
name="TargetList">
<xsl:choose>
<xsl:when test="$AuthorList"><xsl:copy-of select="$AuthorList" /></xsl:when>
<xsl:when test="$InventorList"><xsl:copy-of select="$InventorList" /></xsl:when>
<xsl:when test="$DirectorList"><xsl:copy-of select="$DirectorList" /></xsl:when>
<xsl:when test="$ArtistList"><xsl:copy-of select="$ArtistList" /></xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:choose>
<!-- 人名リストがある場合 -->
<xsl:when test="msxsl:node-set($TargetList)/b:Person">
<xsl:for-each select="msxsl:node-set($TargetList)/b:Person">
<xsl:value-of select="b:Last" />
<xsl:if test="b:First">
<xsl:text>, </xsl:text>
<xsl:value-of select="substring(b:First, 1, 1)" />
<xsl:text>.</xsl:text>
</xsl:if>
<xsl:if
test="b:Middle">
<xsl:text> </xsl:text>
<xsl:value-of select="substring(b:Middle, 1, 1)" />
<xsl:text>.</xsl:text>
</xsl:if>
<xsl:if
test="position() != last()">
<xsl:text>; </xsl:text>
</xsl:if>
<xsl:if
test="position() = last()">
<xsl:text>. </xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:when>
<!-- 企業・団体著者の場合 -->
<xsl:when test="b:Author/b:Author/b:Corporate">
<xsl:value-of select="b:Author/b:Author/b:Corporate" />
<xsl:text>. </xsl:text>
</xsl:when>
</xsl:choose>
</xsl:template>
<!-- 編集者リスト (ACS: Editors, Ed.) -->
<xsl:template name="ACS_EditorList">
<xsl:variable name="EditorList" select="b:Author/b:Editor/b:NameList/b:Person" />
<xsl:if
test="$EditorList">
<xsl:for-each select="$EditorList">
<xsl:value-of select="b:Last" />
<xsl:if test="b:First">
<xsl:text>, </xsl:text>
<xsl:value-of select="substring(b:First, 1, 1)" />
<xsl:text>.</xsl:text>
</xsl:if>
<xsl:if
test="b:Middle">
<xsl:text> </xsl:text>
<xsl:value-of select="substring(b:Middle, 1, 1)" />
<xsl:text>.</xsl:text>
</xsl:if>
<xsl:if
test="position() != last()">
<xsl:text>; </xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text>, Eds.; </xsl:text>
</xsl:if>
</xsl:template>
<!-- 書名(プレーンテキスト + ピリオド) -->
<xsl:template name="Title_Plain">
<xsl:if test="b:Title">
<xsl:value-of select="b:Title" />
<xsl:text>. </xsl:text>
</xsl:if>
</xsl:template>
<!-- 書名(イタリック + セミコロン) -->
<xsl:template name="Title_Italic_Semicolon">
<xsl:if test="b:Title">
<i>
<xsl:value-of select="b:Title" />
</i>
<xsl:text>; </xsl:text>
</xsl:if>
</xsl:template>
<!-- 出版社・都市・年(書籍用共通) -->
<xsl:template name="Publisher_City_Year">
<xsl:if test="b:Publisher">
<xsl:value-of select="b:Publisher" />
<xsl:text>: </xsl:text>
</xsl:if>
<xsl:if
test="b:City">
<xsl:value-of select="b:City" />
<xsl:text>, </xsl:text>
</xsl:if>
<xsl:if
test="b:Year">
<xsl:value-of select="b:Year" />
</xsl:if>
<xsl:text>.</xsl:text>
</xsl:template>
</xsl:stylesheet>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment