【问题标题】:How do I merge or even disable footnote links in asciidoc fop如何在 asciidoc fop 中合并甚至禁用脚注链接
【发布时间】:2016-05-01 18:41:31
【问题描述】:

我有一个相当大的 asciidoc 文档,我将其动态转换为 PDF 以供我们的开发人员指南使用。由于该文档经常引用我们开发人员指南中记录的 Java 类,因此我们将它们直接转换为文档中的链接,例如:

In this block we create a new 
https://www.codenameone.com/javadoc/com/codename1/ui/Form.html[Form] 
named `hi`. 

这在大多数情况下效果很好,并且在 HTML 中看起来很棒,因为对类的每个引用都直接导致其 JavaDoc,从而使引用/指南过程更加简单。

但是,当我们生成 PDF 时,我们最终会在某些页面上出现类似这样的内容:

通常我不会介意有很多脚注,甚至不会重复前一页的内容。但是,在这种情况下,指向 Container 的链接出现了 3 次。

我可以删除一些链接,但我不想这样做,因为它们在网络版本上很有意义。由于我也不知道分页符会落在哪里,所以我不想自己做。

这在我看来像是某处的错误,如果链接相同,则链接的脚注应该只生成一次。

如果这是要付出的代价,我可以删除文档中的所有链接脚注,尽管我希望能够根据具体情况执行此操作,以便某些链接保持可打印

【问题讨论】:

  • 我不认为这是一个错误:根据 XSL-FO 的建议,脚注只是一个在输出中产生一个或多个区域的对象,而脚注文本是与另一个完全无关;没有“条件脚注”对象。不幸的是,在生成 FO 文件时自动避免“重复”脚注是不可能的,因为它需要知道分页符在哪里。我不知道这对您来说是否可行,但是使用 URL 创建可点击的链接而不是脚注呢?
  • 那么我猜这是 asciidoc 隐藏的问题。这正是我要问的……请注意,我只是使用了 asciidoc 的超链接语法。有没有办法至少在 asciidoc 中的某些情况下禁用超链接的脚注?
  • AFAIK,为了生成 PDF 输出,AsciiDoc 将其源文本转换为 DocBook XML,然后使用 DocBook XSLT 样式表将其转换为 XSL-FO。我认为您需要自定义 XSLT 样式表或以某种方式对中间 DocBook XML 或 XSL-FO 文件进行后处理。
  • Antenna House FO 处理器(不是免费的)有一个扩展,似乎可以满足您的需求:antennahouse.com/xslfo/…
  • 我们是一个开源项目,虽然我不介意为看起来有点过分的软件付费!我可以预处理 asciidoc 文件并根据某些逻辑删除一些链接。我不想那样做。

标签: pdf-generation codenameone apache-fop asciidoc


【解决方案1】:

在fo-pdf.xsl中加入这两个参数去掉脚注:

<xsl:param name="ulink.footnotes" select="0"></xsl:param>
<xsl:param name="ulink.show" select="0"></xsl:param>

第一个参数禁用脚注,这会触发 url 重新出现内联。
第二个参数从文本中删除 url。链接保持活跃和可点击。

非零值切换这些参数。

来源:
http://docbook.sourceforge.net/release/xsl/1.78.1/doc/fo/ulink.show.html

【讨论】:

    【解决方案2】:

    我们在稍微不同的情况下寻找类似的东西,但没有找到解决方案。我们最终编写了一个处理器,它只是剥离了一些链接,例如以 '===' 开头的部分中指向同一 URL 的每个链接。

    不是一个理想的情况,但据我所知这是唯一的方法。

    【讨论】:

    • 谢谢,这不是我想选择的答案,因为我希望在 asciidoc 中得到一些东西,但由于缺乏答案,我猜这是尽可能接近的。如果出现更好的情况,我会将其切换为可接受的答案。
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    相关资源
    最近更新 更多