2010-04-08 17 views
5

¿Hay alguna manera de definir macros (como tex macros o latex define) en documentos DocBook?DocBook macros?

DocBook es muy prolijo, y las macros ayudarían mucho. No los encontré en tutoriales de inicio rápido.

En caso afirmativo, ¿podría alguien proporcionar un ejemplo simple o un enlace?

Gracias

Respuesta

6

No estoy seguro, si esto es exactamente lo que quiere/si cumple todos sus requisitos, pero estoy pensando en ENTIDADES. Puede definirlos en la parte superior (de su documento XML, por lo general XML, nada específico de DocBook). Como se ve aquí para el 'doc.release.number' y 'doc.release.date'. Pero también se pueden incluir a través de un archivo separado. Como se ve en la tercera fila de ENTITY. Aquí el SISTEMA significa, viniendo de otro archivo '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> 

En el documento se hace referencia a las entidades a través de un & comenzando y terminando ; como en &project.impl.title;

En el archivo 'entities.ent' se especifican las clases entidad en una forma similar:

<?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

¡Agradable! ¿Cuál sería el equivalente para Docbook v5.0? – jdkoftinoff

0

¿ha considerado la generación de DocBook de otro formato (como reStructuredText?)

me pareció bastante agradable para la documentación.

Además, probablemente podría escribir un macroprocesador (o mirar en m4) bastante rápido. Si está utilizando la versión XML de DocBook, un simple XSLT funcionará. Solo crea algunas etiquetas y transfórmalas. Haga que las cosas repetidas se agreguen automáticamente. Y prepárate para estar realmente enojado con XSLT. Por no ser todo lo que podría ser. Para hacer tu warp de pensamiento.

+0

@Daren: quieres decir que el docbook dtd no incluye algo como tex: \ def \ h {hola a todos} y luego lo usa \ h? Sería un gran error. ¿Está escribiendo un macroprocesador? Lo mejor es usar el preprocesador C con define. Echaré un vistazo a ese texto reestructurado Gracias – cibercitizen1

1

No es exactamente lo que pediste, pero quizás sea útil para algunos de tus casos: puedes definir plantillas en tu hoja de estilo de contenedor donde defines los comandos fo. Algunos ejemplos:

Código:

<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> 

Uso:

<symbolchar>le</symbolchar> 

Código:

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

Uso:

<?linebreak?>