Разработка технической документации и технические писатели Технические писатели и разработка технической документации технические писатели в Телеграм 

 obmen_soobsheniyami.png Чат для технических писателей 
 Зарегистрируйтесь
Страницы: 1 2 След.
RSS
Нумерация заголовков в PDF
 
Для автоматической нумерации заголовков нужно добавить соответствующий шаблон.
 
[code:3scemgjp]
<xsl:template name="getTitle">
<xsl:variable name="titleNumber">
<xsl:if test="parent::*[contains(@class,'topic/topic')]">
<xsl:call-template name="getTitleNumber"/>
</xsl:if>
</xsl:variable>
<xsl:choose>
<xsl:when test="@spectitle">
<xsl:value-of select="@spectitle"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$titleNumber"/>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="getTitleNumber">
<xsl:variable name="level" select="ancestor::*[contains(@class,' topic/topic ')]"/>
<xsl:choose>
<xsl:when test="count($level)=1">
<xsl:for-each select="$level">
<xsl:value-of select="count(preceding-sibling::*[contains(@class,' topic/topic ')])+ 1"/>
<xsl:text>. </xsl:text>
</xsl:for-each>
</xsl:when>
<xsl:when test="not(count($level) > $topicTitle.numLevel)">
<xsl:number count="*[contains(@class,' topic/topic ')]" level="multiple" format="1.1"/>
<xsl:text> </xsl:text>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:template>
[/code:3scemgjp]

комментарии:
111- разделитель для заголовков первого уровня. Т.е. как нужно отображать номер заголовка 1 уровня. Например, без кавычек   "1" или "1." или "1)".  Значение [b:3scemgjp]. [/b:3scemgjp] - это точка с последующим пробелом. Пробел нужен для того, чтобы во втором уровне и дальше цифры отделялись

222- см. атрибут формат. тут можно задать сам формат.  В тегах text стоит символ пробела, которым будут отделяться цифры на уровнях больше первого.

Перед этим шаблоном нужно добавить настройку
[code:3scemgjp]<xsl:variable name="topicTitle.numLevel">5</xsl:variable>[/code:3scemgjp]
Это номер уровня, до которого нужно нумеровать заголовки. Как правило нумеруются уровни до 3, но требования у всех разные.
 
А можно поподробнее описать куда добавлять шаблон? и получается будет работать только в pdf? или в остальных форматах тоже?
 
Надо определить в какой из файлов помещать шаблон.
Если используется папка кастомизации, которая не входит в иерархию папок dita, а расположена где-то отдельно, то надо помещать туда, напрмиер в файл custom.xsl.
Если не значете что такое кастомизация, то в файл \ditaot\demo\fo\xsl\fo\commons.xsl
(проследите, чтобы все, что в теге <xsl:template> было самостоятельным , не пересекалось с другими шаблонами. последовательность не важна).
 
Цитата
А можно поподробнее описать куда добавлять шаблон? и получается будет работать только в pdf? или в остальных форматах тоже?
По идее кроме PDF это нигде не нужно.
Только требования к печатной документации предполагают наличие нумерации. Глупо будет выглядеть сайт, на страницах которого есть нумерация заголовков. В CHM также нумерация не нужна.
В ODT вроде из этого же шаблона будет браться. В ePub, wiki, hlp тоже не нужна. Какие еще форматы используются ??
 
Кстати, нумерация зависит еще от типа ditamap. Если это Bookmap и в нем используются Главы, Части, Разделы, Приложения и т.п. и нужно, чтобы в оглавлении и тексте они так и назывались "Часть II", "Глава 12", "Приложение А", потребуется другой шаблон.
 
Цитата
Цитата
А можно поподробнее описать куда добавлять шаблон? и получается будет работать только в pdf? или в остальных форматах тоже?
По идее кроме PDF это нигде не нужно.
Только требования к печатной документации предполагают наличие нумерации. Глупо будет выглядеть сайт, на страницах которого есть нумерация заголовков. В CHM также нумерация не нужна.
В ODT вроде из этого же шаблона будет браться. В ePub, wiki, hlp тоже не нужна. Какие еще форматы используются ??
Нужно в основном только pdf, xhtml, chm, otd. Да я поняла, логично чтобы номер был только в pdf, otd.
 
А добавить настройку необходимо в xml-файл, который мы antу отправляем?
 
Нет. В тот же файл, в который добавляем шаблон  (*.xsl).
 
Цитата
Но шаблон getTitle уже был в этом файле, поэтому я переименовала в getNewTitle, после этого ошибки не стало, но ничего не изменилось. нумерация не появилась.
Шаблон совпадает на 100% ???  Старый переименуйте в GetOldTitle, а новый оставьте getTitle. Название важно и все, что внутри.
 
Получилось?
 
К сожалению нет( возникает ошибка

[code:3scsx9vl]C:\DITA-OT1.5.3\demo\fo\build.xml:320: java.io.FileNotFoundException: C:\IMPLEME
NTATION\temp\temp20120125150239693\stage2.fo (═х єфрхЄё  эрщЄш єърчрээ√щ Їрщы)[/code:3scsx9vl]
 
а что в 320 строке?
(═х єфрхЄё  эрщЄш єърчрээ√щ Їрщы) - что-то кириллицей написано ?
 
я добавила код в commons.xsl. Когда название было getTitle то возникала эта ошибка.(до добавления кода и настройки ее не было). Но шаблон getTitle уже был в этом файле, поэтому я переименовала в getNewTitle, после этого ошибки не стало, но ничего не изменилось. нумерация не появилась.
Если честно, я не очень понимаю почему мы это в кастомизации делаем. Нумерация должна соответствовать иерархии, а иерархия задается в карте. В commons мы же задаем, как я понимаю вид, то есть ка именно этот номер будет выглядеть.
 
Спасибо большое!
 
так получилось или нет ??
 
Да получилось!
 
Есть более интересный вопрос:
как пропустить нумерацию раздела сохраняя при этом всю остальную нумерацию? (например чтобы не нумеровалось "Введение" в начале и "Список сокращений" в конце).
PS. Случай с ненумерованным разделом между пронумерованными не рассматривается  ;)
 
А у меня не работает, к сожалению.

Ибо шаблон getTitle в commons.xsl в версии DITA-OT1.6.3 удален. Но о нём есть упоминания среди всего commons.xsl.
вот кусок кода, который ссылается на getTitle.
[code:1xclc5a2]
   <xsl:template name="processTopicChapter">
       <fo:page-sequence master-reference="body-sequence" xsl:use-attribute-sets="__force__page__count">
           <xsl:call-template name="startPageNumbering"/>
           <xsl:call-template name="insertBodyStaticContents"/>
           <fo:flow flow-name="xsl-region-body">
               <fo:block xsl:use-attribute-sets="topic">
                   <xsl:call-template name="commonattributes"/>
                   <xsl:if test="not(ancestor::*[contains(@class, ' topic/topic ')])">
                       <fo:marker marker-class-name="current-topic-number">
                           <xsl:number format="1"/>
                       </fo:marker>
                       <fo:marker marker-class-name="current-header">
                           <xsl:for-each select="child::*[contains(@class,' topic/title ')]">
                               <xsl:apply-templates select="." mode="getTitle"/>
                           </xsl:for-each>
                       </fo:marker>
                   </xsl:if>
...
[/code:1xclc5a2]
Возможно, вы подскажете, что необходимо модифицировать в этом случае?
 
А всё. Разобралась.

На всякий случай интересующимся:
В версии 1.6.3 в commons.xsl немного изменено местоположение и название, но принцип тот же:
[code:j22trn1g]
<xsl:variable name="topicTitle.numLevel">3</xsl:variable>
   <xsl:template match="*" mode="getTitle">
<xsl:variable name="titleNumber">
        <xsl:if test="parent::*[contains(@class,'topic/topic')]">
           <xsl:call-template name="getTitleNumber"/>
        </xsl:if>
</xsl:variable>
       <xsl:choose>

           <xsl:when test="@spectitle">
               <xsl:value-of select="@spectitle"/>
           </xsl:when>
           <xsl:otherwise>
<xsl:value-of select="$titleNumber"/>
               <xsl:apply-templates/>
           </xsl:otherwise>
       </xsl:choose>
   </xsl:template>

<xsl:template name="getTitleNumber">
     <xsl:variable name="level" select="ancestor::*[contains(@class,' topic/topic ')]"/>
     <xsl:choose>
        <xsl:when test="count($level)=1">
           <xsl:for-each select="$level">
              <xsl:value-of select="count(preceding-sibling::*[contains(@class,' topic/topic ')])+ 1"/>
     <xsl:text>. </xsl:text>  
           </xsl:for-each>
        </xsl:when>
        <xsl:when test="not(count($level) > $topicTitle.numLevel)">
           <xsl:number count="*[contains(@class,' topic/topic ')]" level="multiple" format="1.1"/>
     <xsl:text> </xsl:text>
        </xsl:when>
        <xsl:otherwise/>
     </xsl:choose>
  </xsl:template>
[/code:j22trn1g]
 
Ничего сложного, атрибут [b:1iqceqlq]no-numbering[/b:1iqceqlq] в ditamap для топика, который не должен участвовать в нумерации.

Только в соответствующих xslt это должно быть где-то определено.  По идее это по умолчанию в Dita до 1.5 (давно не обновлялся  :D )
 
Либо использовать [b:3489fvwl]Bookmap[/b:3489fvwl], в которой введение выносить за пределы частей и глав.

<bookmap xml:lang="ru-ru">
<booktitle>
     <mainbooktitle>Название</mainbooktitle>
     <booktitlealt conref="../../forall/metainfo.ditamap#image"/>
</booktitle>
  <bookmeta conref="../../forall/metainfo.ditamap#version"/>
 [b:3489fvwl] <frontmatter>[/b:3489fvwl]
     <bookabstract href=Predislovie.dita" navtitle="Предисловие" toc="no" type="topic"/>
     <booklists>
        <toc locktitle="yes" navtitle="Оглавление"/>
     </booklists>
     <topicref conref="../../forall/metainfo.ditamap#sogl" navtitle="Обозначения" type="topic"/>
     <topicref conref="../../forall/metainfo.ditamap#sokr" navtitle="Сокращения" type="topic"/>
 [b:3489fvwl] </frontmatter>[/b:3489fvwl]
  <part href="ObscheeOpisanieSystemy.dita" navtitle="Общее описание системы" type="concept">
     <chapter href="SvedeniaOSisteme.dita" navtitle="Сведения о системе" type="concept">
        <topicref href="UsloviaExpluatatsii.dita" navtitle="Условия эксплуатации" type="concept"/>

...


       <topicref href="**example.dita" navtitle="Примеры бла-бла" type="concept"/>
     </chapter>
  </part>
  <topicref href="PravaOperatora_Obshie.dita" navtitle="Общие" type="concept"/>
     <topicref href="PravaOperatora_Systemnye.dita" navtitle="Системные" type="concept"/>
     <topicref href="PravaOperatora_Roli.dita" navtitle="Список ролей" type="concept"/>

 [b:3489fvwl] <backmatter>[/b:3489fvwl]
     <booklists>
        <indexlist locktitle="yes" navtitle="Алфавитный указатель"/>
     </booklists>
     <notices conref="../../forall/metainfo.ditamap#copyright" toc="no" type="topic"/>
[b:3489fvwl] </backmatter>[/b:3489fvwl]
</bookmap>
 
Блин, в режиме code текст не выделяется полужирным.

В общем есть такие элементы, [i:1b6g5i11]FRONTMATTER[/i:1b6g5i11] и [i:1b6g5i11]BACKMATTER[/i:1b6g5i11], которые настраиваются отдельно от "тела" документа. Нумерации у них нет и можно их даже не включать в оглавление ([b:1b6g5i11]toc="no"[/b:1b6g5i11])

Caps для наглядности.
 
Цитата
Если честно, я не очень понимаю почему мы это в кастомизации делаем. Нумерация должна соответствовать иерархии, а иерархия задается в карте. В commons мы же задаем, как я понимаю вид, то есть ка именно этот номер будет выглядеть.
Иерархия задает только последовательность и саму иерархию. Кастомизация - факт наличия нумерации, формат и вид. И не только нумерации.

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

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

Они могут вставлять картинки как угодно, но обработчики их обработают так, как задано стандартом. Если картинка в SVG - она может быть растеризована в jpg, если она в gif, может конвертнуться в png. Т.е. на выходе все в одном стандарте, согласно вашей кастомизации.

Нумеровать или нет, какие символы нумерации использовать ([b:2m2ear4m]1.[/b:2m2ear4m], [b:2m2ear4m]1)[/b:2m2ear4m], [b:2m2ear4m]I.[/b:2m2ear4m], [b:2m2ear4m]A.[/b:2m2ear4m], [b:2m2ear4m]a)[/b:2m2ear4m], и т.п. это дело кастомизации, которая может храниться где-то в облаках и быть недоступна для изменения никому - именно в этом "соль" стандартов, шаблонов и единообразия.

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

Разумеется при грамотном подходе и конфигурации.  :roll:
 
Спасибо!
Страницы: 1 2 След.
Читают тему