2010-04-08 30 views
5

Có cách nào xác định các macro (như các macro tex định nghĩa latex) trong tài liệu DocBook không?Macro DocBook?

DocBook rất chi tiết và macro sẽ giúp ích rất nhiều. Tôi không tìm thấy chúng trong hướng dẫn nhanh.

Nếu có, bất kỳ ai cũng có thể cung cấp ví dụ đơn giản hoặc liên kết tới?

Cảm ơn

Trả lời

6

Không chắc chắn, nếu đây là chính xác những gì bạn muốn/nếu nó đầy đủ các yêu cầu của bạn, nhưng tôi đang nghĩ đến ENTITYs. Bạn có thể định nghĩa chúng ở đầu (của tài liệu XML của bạn, vì vậy XML tổng quát, không có gì DocBook cụ thể). Như đã thấy ở đây cho 'doc.release.number' và 'doc.release.date'. Nhưng chúng cũng có thể được bao gồm thông qua một tệp riêng biệt. Như đã thấy trong hàng ENTITY thứ 3. Ở đây SYSTEM có nghĩa là, bắt đầu từ một tập tin 'entity.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> 

Trong tài liệu bạn tham khảo các thực thể thông qua một bắt đầu và kết thúc &; như trong &project.impl.title;

Trong tập tin 'entities.ent' bạn chỉ định các yếu tố ENTITY theo cách tương tự:

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

Tốt! Điều gì tương đương với Docbook v5.0? – jdkoftinoff

0

có bạn xem là tạo DocBook từ định dạng khác (như reStructuredText?)

tôi thấy nó khá tốt đẹp cho tài liệu.

Ngoài ra, bạn có thể viết một bộ tiền xử lý macro (hoặc xem xét m4) khá nhanh chóng. Nếu bạn đang sử dụng phiên bản XML của DocBook, một XSLT đơn giản sẽ làm. Chỉ cần tạo một số thẻ và chuyển đổi chúng. Có nội dung bản mẫu được thêm tự động. Và sẵn sàng để thực sự tức giận với XSLT. Vì không phải là tất cả nó có thể được. Để làm cho suy nghĩ của bạn dọc.

+0

@Daren: bạn có nghĩa là docbook doc không bao gồm một cái gì đó như tex: \ def \ h {hello everyone} và sau đó sử dụng nó \ h? Nó sẽ là một lỗi lớn. Viết bộ tiền xử lý macro? Tốt nhất là sử dụng bộ tiền xử lý C với các định nghĩa. Tôi sẽ xem xét văn bản được cấu trúc lại đó Cảm ơn – cibercitizen1

1

Không chính xác những gì bạn đã yêu cầu, nhưng có thể hữu ích đối với một số trường hợp của bạn: bạn có thể xác định mẫu trong biểu định kiểu trình bao bọc của mình nơi bạn xác định các lệnh fo. Một số ví dụ:

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> 

Cách sử dụng:

<symbolchar>le</symbolchar> 

Code:

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

Cách sử dụng:

<?linebreak?>