2

いくつかのバイトが色付きの背景で強調表示された 16 進データを出力する必要があります。赤色の値を表すデータ内のバイトは、背景が赤である必要があります。それが私が選んだ理由です

<emphasis role="red"></emphasis>

選択のタグになります。

HTML出力

私が使用するHTML出力のために

  <xsl:param name="emphasis.propagates.style" select="1"/>

xsl ファイルで、

.red {
  background-color: red;
}

スタイルシートで。これは問題なく動作します。

PDF出力

PDF出力には、dblatexを使用して試しました(ファイルfo.xsl)

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

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

次のコマンドを使用して、チェック用のラテックス ソースをビルドします。

dblatex --backend=pdftex --xslt=xsltproc \
    --input-format=xml --type=tex \
    --xsl-user=fo.xsl --verbose --output=test.tex test.xml

これは動作しません。結果の test.tex からの抜粋に示すように、強調されたテキストはまだイタリック体です。

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

私は何を間違っていますか?

4

2 に答える 2

2

mzjn が述べたように、スクリーン タグが問題でした。リンクされたリソースを読んだ後、この場合に機能し、html の外観に似た出力を生成する最終的なテンプレートは次のとおりです。

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

これにより、次のラテックス出力が得られます。

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

たぶん、escapeinside を使用するよりも lstlisting に別の delim を追加する方がよいでしょうが、この解決策により、この質問に対する回答が得られます。

于 2013-12-28T18:39:42.440 に答える
1

中間形式が XSL-FO ではなく LaTeX である DocBook から PDF 出力を生成するツール (XSLT スタイルシート モジュールのセット) である dblatex を使用しています。そのため、インライン テキスト ( などemphasis) のルック アンド フィールをカスタマイズするには、LaTeX を使用する必要があります。次のテンプレートが機能するはずです。

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

それが言うことに注意してくださいemphasisd:接頭辞なし)。dblatex は、変換の開始時に DocBook 5 ソース ドキュメントから名前空間を取り除きます。そのため、カスタマイズにも名前空間があってはなりません。


が(「verbatim」要素です。http://dblatex.sourceforge.net/doc/manual/sec-verbatim.htmlemphasisを参照してください)内で発生するという事実は、事態をより複雑にします。私のカスタマイズの提案は、開始タグと終了タグがサンプルから削除されている場合に機能します。screenscreenpara

bold赤色の代わりにテキストを使用することで妥協できる場合は、XML ドキュメントで次を使用できます。

<screen>0240h: 00 20 <emphasis role="bold">00</emphasis> 21</screen>

これが機能するためにカスタマイズは必要ありません。role="bold"デフォルトの dblatex スタイルシートによって処理されます。

于 2013-12-27T13:58:49.260 に答える