Создание пользовательских стилей списка литературы

Создайте пользовательский стиль списка литературы в Word, изучив действия (и XML-код), необходимые для формирования простого пользовательского стиля. Также изучите, как создать файл более сложного стиля. Что нужно знать перед началом работы:

Все создаваемые источники литературы перечислены в следующем локальном файле: %AppData%\Microsoft\Bibliography\Sources.xml.

Примечание.

Файл Sources.xml не будет существовать, пока вы не создадите свой первый источник литературы в Word. Все стили литературы хранятся в профиле пользователя здесь: %AppData%\Microsoft\Bibliography\Style.

Создание базового стиля списка литературы

Сначала создайте базовый стиль списка литературы, на основе которого будет создан пользовательский стиль.

Настройка стиля списка литературы

Для создания стиля списка литературы создается таблица стилей XML, то есть XSL-файл с именем MyBookStyle.xsl с помощью любого XML-редактора. Блокнот отлично справится с задачей. Как следует из названия, наш пример будет стилем для типа источника "книга".

В начале файла добавьте указанный ниже код:

<?xml version="1.0" ?> 

<!--List of the external resources that we are referencing-->
 
<xsl:stylesheet version="1.0" xmlns:xsl="https://www.w3.org/1999/XSL/Transform" xmlns:b="https://schemas.openxmlformats.org/officeDocument/2006/bibliography">
 
<!--When the bibliography or citation is in your document, it's just HTML-->
 
<xsl:output method="html" encoding="us-ascii"/>
   
<!--Match the root element, and dispatch to its children-->
   
<xsl:template match="/">

<xsl:apply-templates select="*" />

</xsl:template>

Как указано в комментариях, Word использует HTML для представления списка литературы или ссылок в документе. Большая часть показанного выше XML-кода — это просто подготовка к более интересным частям стиля. Например, вы можете присвоить стилю номер версии для отслеживания внесенных изменений, как показано в примере ниже.

<!--Set an optional version number for this style--> 

<xsl:template match="b:version"> 

   <xsl:text>2006.5.07</xsl:text>

</xsl:template>

Но еще важнее, что можно присвоить стилю имя. Добавьте этот тег: <xsl:when test="b:StyleNameLocalized">, а затем присвойте стилю имя на выбранном вами языке с помощью следующего кода.

<xsl:when test="b:StyleNameLocalized/b:Lcid='1033'">

   <xsl:text>[Your Style Name]</xsl:text>
 
</xsl:when>

В этом разделе содержится имя вашего стиля на выбранном языке. В случае нашего примера файла мы хотим, чтобы имя пользовательского стиля списка литературы "Простой книжный стиль" отображалось в раскрывающемся списке Стиль на вкладке Ссылки. Для этого добавьте представленный ниже XML-код, чтобы указать, что имя стиля будет отображаться на русском языке (LCID определяет язык).

<!--Defines the name of the style in the References dropdown list-->
<xsl:when test="b:StyleNameLocalized"> 
   <xsl:choose> 
      <xsl:when test="b:StyleNameLocalized/b:Lcid='1033'"> 
         <xsl:text>Simple Book Style</xsl:text> 
      </xsl:when> 
</xsl:when>

Теперь стиль будет отображаться под своим именем в раскрывающемся списке Стиль списка литературы в приложении.

Теперь изучите сведения о стиле. Каждый тип источника в Word (например, книга, пленка, статья в периодическом издании и т. д.) содержит встроенный список полей, которые можно использовать для списка литературы. Чтобы просмотреть все поля, доступные для данного типа источника, на вкладке Ссылки выберите Управление источниками, а затем в диалоговом окне Диспетчер источников нажмите кнопку Создать, чтобы открыть диалоговое окно Создать источник. Затем выберите Показать все поля списка литературы.

Тип источника "Книга" содержит указанные ниже поля:

  • Автор

  • Название

  • Год

  • Город

  • Область, край

  • Страна

  • Издательство

  • Редактор

  • Том

  • Число томов

  • Переводчик

  • Краткое название

  • Стандартный номер

  • Страницы

  • Издание

  • Примечания

В коде можно указать поля, важные для стиля списка литературы. Даже если флажок Показать все поля списка литературы снят, эти поля будут отображаться и рядом с ними появится красная звездочка. В нашем примере для книги нужно убедиться, что введены автор, название, год, город и издательство, поэтому для оповещения пользователя о необходимости заполнения этих рекомендуемых полей рядом с ними должна отображаться красная звездочка.

<!--Specifies which fields should appear in the Create Source dialog box when in a collapsed state (The Show All Bibliography Fields check box is cleared)-->

<xsl:template match="b:GetImportantFields[b:SourceType = 'Book']"> 
   <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: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:ImportantFields> 
</xsl:template>

Текст в <тегах xsl:text> является ссылками на файл Sources.xml. В этих ссылках запрашиваются данные, заполняемые в каждом из полей. Просмотрите файл Sources.xml в папке \Microsoft\Bibliography\Sources.xml, чтобы лучше понять, как эти ссылки сопоставляются с содержимым XML-файла.

Разработка макета

Выходные данные для списков литературы и ссылок представлены в документе Word в виде HTML-кода, поэтому для определения того, как будут выглядеть пользовательские стили списков литературы и ссылок в Word, необходимо добавить в таблицу стилей HTML-код.

Предположим, нужно отформатировать каждую запись в списке литературы следующим образом:

Фамилия, Имя. (Год). Название. Город: Издатель

HTML-код, необходимый для этого, будет внедрен в таблицу стилей указанным ниже образом.

<!--Defines the output format for a simple Book (in the Bibliography) with important fields defined-->

<xsl:template match="b:Source[b:SourceType = 'Book']"> 

<!--Label the paragraph as an Office Bibliography paragraph-->

   <p> 
      <xsl:value-of select="b:Author/b:Author/b:NameList/b:Person/b:Last"/> 
      <xsl:text>, </xsl:text> 
      <xsl:value-of select="b:Author/b:Author/b:NameList/b:Person/b:First"/> 
      <xsl:text>. (</xsl:text> 
      <xsl:value-of select="b:Year"/> 
      <xsl:text>). </xsl:text> 
      <i> 
         <xsl:value-of select="b:Title"/> 
         <xsl:text>. </xsl:text> 
      </i> 
      <xsl:value-of select="b:City"/> 
      <xsl:text>: </xsl:text> 
      <xsl:value-of select="b:Publisher"/> 
      <xsl:text>.</xsl:text> 
   </p> 
</xsl:template>

Когда вы ссылаетесь на источник книги в документе Word, приложению Word необходим доступ к этому HTML-коду, чтобы использовать пользовательский стиль для отображения источника. Поэтому необходимо добавить код в пользовательскую таблицу стилей, чтобы приложение Word могло выполнить эту операцию.

<!--Defines the output of the entire Bibliography-->
 
<xsl:template match="b:Bibliography"> 

   <html xmlns="https://www.w3.org/TR/REC-html40"> 
   
      <body> 

         <xsl:apply-templates select ="b:Source[b:SourceType = 'Book']"> 

         </xsl:apply-templates> 

      </body> 
   
   </html> 
</xsl:template>

Аналогичным образом необходимо выполнить это же действие для вывода ссылок. Используйте шаблон (автор, год) для одной ссылки в документе.

<!--Defines the output of the Citation-->
<xsl:template match="b:Citation/b:Source[b:SourceType = 'Book']"> 
   <html xmlns="https://www.w3.org/TR/REC-html40"> 
      <body> 
         <!-- Defines the output format as (Author, Year)--> 
         <xsl:text>(</xsl:text> 
            <xsl:value-of select="b:Author/b:Author/b:NameList/b:Person/b:Last"/> 
         <xsl:text>, </xsl:text> 
         <xsl:value-of select="b:Year"/> 
         <xsl:text>)</xsl:text> 
      </body> 
   </html> 
</xsl:template>

Закройте файл, выполнив следующие строки.

<xsl:template match="text()" /> </xsl:stylesheet>

Сохраните файл как MyBookStyle.XSL и поместите его в каталог стилей (\Microsoft\Bibliography\Style). Перезапустите Word, и вы увидите свой стиль в раскрывающемся списке "Стиль". Вы можете начать использование своего нового стиля.

Создание сложного стиля

Одной из проблем, усложняющих стили списка литературы, является то, что им часто требуется значительный объем условной логики. Например, если указана дата, необходимо отобразить дату, а если дата не указана, может потребоваться указать сокращение, чтобы продемонстрировать отсутствие даты для этого источника.

В более конкретном примере в стиле APA, если дата не указана для источника веб-сайта, аббревиатура "n.d." используется для обозначения отсутствия даты, и стиль должен делать это автоматически. Пример:

Стиль источника веб-сайта APA без даты: Кван, Ю. (н.д.). Полученный с сайта https://www.microsoft.com стиль источника веб-сайта APA с введенной датой: Кван Ю. (18 янв 2006 г.). Полученный с сайта https://www.microsoft.com

Как видите, отображение зависит от введенных данных.

Выходные данные практически каждого стиля должны меняться в зависимости от того, есть ли у вас "Корпоративный автор" или "Обычный автор". Вы узнаете, как использовать одно из наиболее распространенных правил для реализации такой логики в вашем стиле, что позволяет отображать корпоративного автора, если он указан, и обычного автора, если корпоративный автор не указан.

Обзор решения

Если нужно отобразить корпоративного автора, используйте указанную ниже процедуру.

Отображение корпоративного автора

  1. Добавьте переменную для подсчета числа корпоративных авторов в разделе ссылки в коде.

  2. Отобразите корпоративного автора в ссылке, если корпоративный автор указан. Отобразите обычного автора в ссылке, если корпоративный автор не указан.

  3. Добавьте переменную для подсчета числа корпоративных авторов в разделе списка литературы кода.

  4. Отобразите корпоративного автора в списке литературы, если корпоративный автор указан. Отобразите обычного автора в списке литературы, если корпоративный автор не указан.

Начало работы

Сначала измените ссылку. Ниже приведен код для прошлых ссылок.

<!--Defines the output of the Citation-->
<xsl:template match="b:Citation/b:Source[b:SourceType = 'Book']"> 
   <html xmlns="https://www.w3.org/TR/REC-html40"> 
      <body> 
         <!--Defines the output format as (Author, Year)-->
         <xsl:text>(</xsl:text> 
         <xsl:value-of select="b:Author/b:Author/b:NameList/b:Person/b:Last"/>
         <xsl:text>, </xsl:text> 
         <xsl:value-of select="b:Year"/> 
         <xsl:text>)</xsl:text> 
      </body>
   </html> 
</xsl:template>

Шаг 1. Определите новую переменную в разделе ссылки для подсчета числа корпоративных авторов

Объявите новую переменную, чтобы определить, доступен ли корпоративный автор. Эта переменная подсчитывает, сколько раз поле "Корпоративный автор" встречается в источнике.

<!--Defines the output of the Citation-->
<html xmlns="https://www.w3.org/TR/REC-html40">
   <!--Count the number of Corporate Authors (can only be 0 or 1)-->
      <xsl:variable name="cCorporateAuthors"> 
         <xsl:value-of select="count(b:Author/b:Author/b:Corporate)" /> 
      </xsl:variable>

Шаг 2. Проверка, что корпоративный автор указан

Убедитесь, что корпоративный автор указан. Это можно сделать, определив, что число корпоративных авторов не равно нулю. Если корпоративный автор существует, отобразите его. Если его не существует, отобразите обычного автора.


<xsl:text>(</xsl:text> 
<xsl:choose>
<!--When the corporate author exists, display the corporate author-->
<xsl:when test ="$cCorporateAuthors!=0"> 
<xsl:value-of select="b:Author/b:Author/b:Corporate"/> 
</xsl:when>
<!-- When the corporate author does not exist, display the normal author--> 
<xsl:otherwise> 
<xsl:value-of select="b:Author/b:Author/b:NameList/b:Person/b:Last"/> 
</xsl:otherwise> 
</xsl:choose> 
<xsl:text>, </xsl:text>

Теперь после внесения изменений для ссылок, внесите изменения для списка литературы. Вот раздел списка литературы, представленный ранее в этой статье.

<!--Defines the output format for a simple Book (in the Bibliography) with important fields defined-->
<xsl: template match="b:Source[b:SourceType = 'Book']">
<!--Label the paragraph as an Office Bibliography paragraph--> 
<p> 
<xsl:value-of select="b:Author/b:Author/b:NameList/b:Person/b:Last"/> 
<xsl:text>, </xsl:text> 
<xsl:value-of select="b:Author/b:Author/b:NameList/b:Person/b:First"/> 
<xsl:text>. (</xsl:text> 
<xsl:value-of select="b:Year"/> 
<xsl:text>). </xsl:text> 
<i>

Шаг 3. Определение новой переменной в разделе списка литературы

Снова начнем с добавления переменной для подсчета.

<!--Defines the output format for a simple Book (in the Bibliography) with important fields defined-->
<xsl: template match="b:Source[b:SourceType = 'Book']"> 
<!--Count the number of Corporate Authors (can only be 0 or 1)-->
<xsl:variable name="cCorporateAuthors"> 
<xsl:value-of select="count(b:Author/b:Author/b:Corporate)" /> 
</xsl:variable>

Шаг 4. Проверка, что корпоративный автор указан.

Убедитесь, что корпоративный автор существует.

…..
<xsl:variable name="cCorporateAuthors"> 
<xsl:value-of select="count(b:Author/b:Author/b:Corporate)" /> 
</xsl:variable> 
<p> 
<xsl:choose>
<!--When the corporate author exists display the corporate author-->
<xsl:when test ="$cCorporateAuthors!=0"> 
<xsl:value-of select="b:Author/b:Author/b:Corporate"/> 
<xsl:text>. (</xsl:text> 
</xsl:when> 
<xsl:otherwise> 
<!--When the corporate author does not exist, display the normal author-->
<xsl:value-of select="b:Author/b:Author/b:NameList/b:Person/b:Last"/> 
<xsl:text>, </xsl:text> 
<xsl:value-of select="b:Author/b:Author/b:NameList/b:Person/b:First"/> 
<xsl:text>. (</xsl:text>
</xsl:otherwise> 
</xsl:choose>

Ниже приведен полный окончательный код.

<?xml version="1.0" ?> 
<!--List of the external resources that we are referencing-->
<xsl:stylesheet version="1.0" xmlns:xsl="https://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:b="https://schemas.openxmlformats.org/officeDocument/2006/bibliography">
   <!--When the bibliography or citation is in your document, it's just HTML-->
   <xsl:output method="html" encoding="us-ascii"/> 
   <!--Match the root element, and dispatch to its children-->
   <xsl:template match="/"> 
      <xsl:apply-templates select="*" /> 
   </xsl:template>
   <!--Set an optional version number for this style-->
   <xsl:template match="b:version"> 
      <xsl:text>2006.5.07</xsl:text> 
   </xsl:template> 
   <!--Defines the name of the style in the References dropdown-->
   <xsl:template match="b:StyleName">     
      <xsl:text>Simple Book Style</xsl:text> 
   </xsl:template> 
   <!--Specifies which fields should appear in the Create Source dialog when in a collapsed state (The Show All Bibliography Fieldscheckbox is cleared)-->
   <xsl:template match="b:GetImportantFields[b:SourceType = 'Book']"> 
      <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: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:ImportantFields> 
   </xsl:template>
   <!--Defines the output format for a simple Book (in the Bibliography) with important fields defined-->
   <xsl:template match="b:Source[b:SourceType = 'Book']">
   <!--Count the number of Corporate Authors (can only be 0 or 1-->
   <xsl:variable name="cCorporateAuthors">
      <xsl:value-of select="count(b:Author/b:Author/b:Corporate)" />
   </xsl:variable>
   <!--Label the paragraph as an Office Bibliography paragraph-->
   <p>
      <xsl:choose>
         <xsl:when test ="$cCorporateAuthors!=0">
         <!--When the corporate author exists display the corporate author-->
            <xsl:value-of select="b:Author/b:Author/b:Corporate"/>
            <xsl:text>. (</xsl:text>
         </xsl:when>
         <xsl:otherwise>
            <!--When the corporate author does not exist, display the normal author-->
            <xsl:value-of select="b:Author/b:Author/b:NameList/b:Person/b:Last"/>
            <xsl:text>, </xsl:text>
            <xsl:value-of select="b:Author/b:Author/b:NameList/b:Person/b:First"/>
            <xsl:text>. (</xsl:text>
         </xsl:otherwise>
      </xsl:choose>
      <xsl:value-of select="b:Year"/>
      <xsl:text>). </xsl:text>
      <i>
         <xsl:value-of select="b:Title"/>
         <xsl:text>. </xsl:text>
      </i> 
         <xsl:value-of select="b:City"/>
         <xsl:text>: </xsl:text>
         <xsl:value-of select="b:Publisher"/>
         <xsl:text>.</xsl:text>
      </p>
   </xsl:template>
   <!--Defines the output of the entire Bibliography-->
   <xsl:template match="b:Bibliography"> 
      <html xmlns="https://www.w3.org/TR/REC-html40"> 
         <body>
            <xsl:apply-templates select ="*">
            </xsl:apply-templates>
         </body>
      </html>
   </xsl:template>
   <!--Defines the output of the Citation-->
   <xsl:template match="b:Citation/b:Source[b:SourceType = 'Book']">
      <html xmlns="https://www.w3.org/TR/REC-html40"> 
         <xsl:variable name="cCorporateAuthors"> 
            <xsl:value-of select="count(b:Author/b:Author/b:Corporate)" /> 
         </xsl:variable> 
         <body> 
         <!--Defines the output format as (Author, Year--> 
            <xsl:text>(</xsl:text>
            <xsl:choose> 
            <!--When the corporate author exists display the corporate author-->
               <xsl:when test ="$cCorporateAuthors!=0">
                  <xsl:value-of select="b:Author/b:Author/b:Corporate"/>
               </xsl:when>
               <!--When the corporate author does not exist, display the normal author-->
               <xsl:otherwise> 
                  <xsl:value-of select="b:Author/b:Author/b:NameList/b:Person/b:Last"/> 
               </xsl:otherwise>
               </xsl:choose>
               <xsl:text>, </xsl:text> 
               <xsl:value-of select="b:Year"/>
               <xsl:text>)</xsl:text> 
            </body> 
         </html>
   </xsl:template>
   <xsl:template match="text()" />
</xsl:stylesheet>

Заключение

В этой статье показано, как создать пользовательский стиль списка литературы в Word, сначала создав простой стиль, а затем используя условные операторы для создания более сложного стиля.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.