首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过dblatex获得带有docbook的彩色pdf文本输出?

如何通过dblatex获得带有docbook的彩色pdf文本输出?
EN

Stack Overflow用户
提问于 2013-12-22 04:04:49
回答 1查看 1.7K关注 0票数 2

我需要输出一些带有彩色背景的字节的十六进制数据。表示红色颜色值的数据中的字节应该具有红色背景。所以我才选择

代码语言:javascript
复制
<emphasis role="red"></emphasis>

成为你选择的标签。

HTML输出

对于HTML输出,我使用

代码语言:javascript
复制
  <xsl:param name="emphasis.propagates.style" select="1"/>

在xsl文件和

代码语言:javascript
复制
.red {
  background-color: red;
}

在样式表中。这是完美无缺的。

PDF输出

对于PDF输出,我使用dblatex并尝试(文件fo.xsl)

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fo="http://www.w3.org/1999/XSL/Format"
    xmlns:d="http://docbook.org/ns/docbook"
    xmlns="http://www.w3.org/TR/xhtml1/transitional"
    version="1.0">

  <xsl:param name="draft.mode">no</xsl:param>
  <xsl:param name="imagedata.default.scale">maxwidth=12cm</xsl:param>

  <xsl:template match="emphasis[@role='red']">
    <xsl:param name="content">
      <xsl:apply-templates/>
    </xsl:param>
    <xsl:text>{\color{red}</xsl:text>
    <xsl:copy-of select="$content"/>
    <xsl:text>}</xsl:text>
  </xsl:template>

</xsl:stylesheet>

和(文件test.xml)

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
  "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
<article lang="en">
  <title>Test</title>
  <para>
    <screen>0240h: 00 20 <emphasis role="red">00</emphasis> 21</screen>
  </para>
</article>

使用以下命令构建用于检查的latex源代码:

代码语言:javascript
复制
dblatex --backend=pdftex --xslt=xsltproc \
    --input-format=xml --type=tex \
    --xsl-user=fo.xsl --verbose --output=test.tex test.xml

这不管用。突出强调的文本仍然是斜体,如结果test.tex的摘录所示:

代码语言:javascript
复制
\begin{lstlisting}[firstnumber=1,escapeinside={<t>}{</t>},moredelim={**[is][\bfseries]{<b>}{</b>}},moredelim={**[is][\itshape]{<i>}{</i>}},]
0240h: 00 20 <i>00</i> 21\end{lstlisting}

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-28 18:39:42

正如mzjn所说,屏幕标签是一个问题。在读取链接资源之后,在本例中对我工作的最后一个模板,并产生类似于html外观的输出,如下所示:

代码语言:javascript
复制
<xsl:template match="emphasis[@role='red']" mode="latex.programlisting">
  <xsl:param name="co-tagin" select="'&lt;:'"/>
  <xsl:param name="rnode" select="/"/>
  <xsl:param name="probe" select="0"/>
  <xsl:param name="content">
    <xsl:apply-templates/>
  </xsl:param>
  <xsl:text>&lt;t&gt;\colorbox{red}{</xsl:text>
  <xsl:copy-of select="$content"/>
  <xsl:text>}&lt;/t&gt;</xsl:text>
</xsl:template>

这将导致以下乳胶输出:

代码语言:javascript
复制
\begin{lstlisting}[firstnumber=1,escapeinside={<t>}{</t>},moredelim={**[is][\bfseries]{<b>}{</b>}},moredelim={**[is][\itshape]{<i>}{</i>}},]
0240h: 00 20 <t>\colorbox{red}{00}</t> 21\end{lstlisting}

也许在列表中再添加一个更好的方法,比使用内部的逃避方法更好,但是有了这个解决方案,这个问题就会为我解答了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20726153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档