Docbook的中文问题果然层出不穷,现在都有点后悔采用Docbook格式写论文了,下面一段Perl程序通过删除<book></book>标签下的所有空格,试图解决
FOP中文回车、空格影响排版输出的问题。
不过即使这样,FOP还是会傻傻的把中文标点放在行首,这个问题挺麻烦的,可能是<xsl:param name="hyphenate">false</xsl:param>惹得祸,但是如果启用docbook-xsl又会报Couldn't find hyphenation pattern错……
不管如何,现在起码我不用把<para></para>一段文字写成一行了, Oxygen XML 编辑器只要启用text wrap自动折行就不再同时提供代码折叠功能,而没有代码折叠,又必须采用<!ENTITY preface SYSTEM "preface.xml">来管理长文档,一旦采用,preface.xml就作为实体,做不到实时文件架构验证了,我肯定不愿意放弃Oxygen XML Editor的实时验证文档功能,那就只有采用新的XInclude方法了,但是FOP自带的Xalan 2.7.0 XML XSLT引擎目前 似乎还没开始支持这个XInclude功能……
不过即使这样,FOP还是会傻傻的把中文标点放在行首,这个问题挺麻烦的,可能是<xsl:param name="hyphenate">false</xsl:param>惹得祸,但是如果启用docbook-xsl又会报Couldn't find hyphenation pattern错……
不管如何,现在起码我不用把<para></para>一段文字写成一行了, Oxygen XML 编辑器只要启用text wrap自动折行就不再同时提供代码折叠功能,而没有代码折叠,又必须采用<!ENTITY preface SYSTEM "preface.xml">来管理长文档,一旦采用,preface.xml就作为实体,做不到实时文件架构验证了,我肯定不愿意放弃Oxygen XML Editor的实时验证文档功能,那就只有采用新的XInclude方法了,但是FOP自带的Xalan 2.7.0 XML XSLT引擎目前 似乎还没开始支持这个XInclude功能……
#
!/bin/env perl
use strict;
use warnings;
use utf8;
open (F , $ARGV [ 0 ]) or die " Can't open file $ARGV[0]: $!\n " ;
my $in_book = 0 ;
READLINE :
while ( < F > )
{
if ( $in_book == 0 )
{
if ( /< book >/ )
{
$in_book = 1 ;
}
s
# http://www.docbook.org/xml/(.*)/docbookx\.dtd#../docbook-xml-$1/docbookx\.dtd#;
print $_ ;
}
else {
s
/\ s +// g;
print $_ ;
}
}
use strict;
use warnings;
use utf8;
open (F , $ARGV [ 0 ]) or die " Can't open file $ARGV[0]: $!\n " ;
my $in_book = 0 ;
READLINE :
while ( < F > )
{
if ( $in_book == 0 )
{
if ( /< book >/ )
{
$in_book = 1 ;
}
s
# http://www.docbook.org/xml/(.*)/docbookx\.dtd#../docbook-xml-$1/docbookx\.dtd#;
print $_ ;
}
else {
s
/\ s +// g;
print $_ ;
}
}