2010-04-08 7 views
5

Existe-t-il un moyen de définir des macros (comme des macros de tex ou des définitions de latex) dans des documents DocBook?Macros DocBook?

DocBook est très bavard, et les macros aideraient beaucoup. Je ne les ai pas trouvé dans les didacticiels de démarrage rapide.

Si oui, quelqu'un pourrait-il fournir un exemple simple ou un lien?

Merci

Répondre

6

Je ne sais pas si c'est exactement ce que vous voulez/si cela répond à vos besoins, mais je pense aux ENTITY. Vous pouvez les définir en haut (de votre document XML, XML général, rien de spécifique à DocBook). Comme on le voit ici pour les 'doc.release.number' et 'doc.release.date'. Mais ils peuvent également être inclus dans un fichier séparé. Comme vu dans la 3ème ligne ENTITY. Ici, le SYSTÈME signifie, venant d'un autre fichier 'entities.ent'.

<?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" 
    "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [ 

    <!ENTITY doc.release.number     "1.0.0.beta-1"  > 
    <!ENTITY doc.release.date     "April 2010"   > 

    <!ENTITY % entities SYSTEM "entities.ent" > 

    %entities; 

]> 

<!-- This document is based on http://readyset.tigris.org/nonav/templates/userguide.html --> 
<article lang="en"> 
    <articleinfo> 
    <title>&project.impl.title; - User Manual</title> 
    <subtitle></subtitle> 
    <date>&project.impl.release.date;</date> 
    <copyright> 
     <year>doc.release.year</year> 
     <holder>Team - &project.impl.title;</holder> 
    </copyright> 
    <releaseinfo>&doc.release.number;</releaseinfo> 
    </articleinfo> 

    <section> 
    <title>Introduction</title> 
    <para> 
    The &project.impl.title; has been created to clean up (X)HTML and XML documents as part of 


    </para> 
    <section> 
</article> 

Dans le document que vous faites référence à des entités par un démarrage & et se terminant ; comme dans &project.impl.title;

Dans le fichier « entities.ent » vous spécifiez les éléments ENTITÉ d'une manière similaire:

<?xml version="1.0" encoding="UTF-8"?> 

<!ENTITY project.impl.title   'Maven Tidy Plug-in' > 
<!ENTITY project.impl.group-id   'net.sourceforge.docbook-utils.maven-plugin' > 
<!ENTITY project.impl.artifact-id  'maven-tidy-plugin'  > 
<!ENTITY project.impl.release.number '1.0.0.beta-1'   > 
<!ENTITY project.impl.release.date  'April 2010'   > 
<!ENTITY project.impl.release.year  '2010'     > 
<!ENTITY project.impl.url    '../'     > 
<!ENTITY project.spec.title   '' > 
<!ENTITY project.spec.release.number '' > 
<!ENTITY project.spec.release.date  '' > 
<!ENTITY doc.release.year    '2010'     > 
+0

Nice! Quel serait l'équivalent pour Docbook v5.0? – jdkoftinoff

0

Avez-vous envisagé de générer DocBook d'un autre format (comme reStructuredText?)

Je l'ai trouvé très agréable pour la documentation.

De même, vous pourriez probablement écrire un préprocesseur de macro (ou regarder dans m4) assez rapidement. Si vous utilisez la version XML de DocBook, un simple XSLT fera l'affaire. Faites juste quelques étiquettes et transformez-les. Avez-stuff stuffplate ajouté automatiquement. Et préparez-vous à être vraiment en colère contre XSLT. Pour ne pas être tout ce qu'il pourrait être. Pour faire déformer votre pensée.

+0

@Daren: vous voulez dire que le docbook dtd n'inclut pas quelque chose comme tex: \ def \ h {salut tout le monde} et ensuite l'utiliser \ h? Ce serait une grande faute. Écrire un préprocesseur de macro? Le mieux est d'utiliser le préprocesseur C avec define. Je vais jeter un oeil à ce texte restructuré Merci – cibercitizen1

1

Pas exactement ce que vous avez demandé, mais peut-être utile dans certains cas: vous pouvez définir des modèles dans votre feuille de style wrapper où vous définissez des commandes fo. Quelques exemples:

code:

<xsl:template match="symbolchar"> 
    <fo:inline font-family="Symbol"> 
    <xsl:choose> 
     <xsl:when test=".='ge'">&#x2265;</xsl:when> 
     <xsl:when test=".='le'">&#x2264;</xsl:when> 
     <xsl:when test=".='sqrt'">&#x221A;</xsl:when> 
     <xsl:otherwise>?!?</xsl:otherwise> 
    </xsl:choose> 
    </fo:inline> 
</xsl:template> 

Utilisation:

<symbolchar>le</symbolchar> 

code:

<xsl:template match="processing-instruction('linebreak')"> 
    <fo:block/> 
</xsl:template> 

Utilisation:

<?linebreak?>