gpt4 book ai didi

asciidoc - 使用 AsciiDoc include 指令按原样包含内容的更好方法

转载 作者:行者123 更新时间:2023-12-05 07:04:55 27 4
gpt4 key购买 nike

上下文

我正在制作一个脚本,它在 AsciiDoc 文件的代码块中动态插入 include 指令,然后从中生成 PDF。生成的 AsciiDoc 文件可能如下所示:

= Title

[source,java]
---
include::foo.java[]
---

我希望用户可以自由地包含他或她想要的任何基于字符的文件,甚至是其他 AsciiDoc 文件。

问题

我的目标是显示这些包含文件的内容原样。我在包含文件时遇到问题:

  • recognized as AsciiDoc由于它的扩展,因此它具有的任何 include 指令都被解释。我不想要嵌套包含,只是为了在代码块中显示 include 指令。不良行为示例:

Unwanted nested includes

  • 包含代码块分隔符 -----,如上图所示,当我最终得到两个代码块而不是预期的单个代码块时。在这种情况下,文件是否被识别为 AsciiDoc 文件并不重要,问题仍然存在。

我的解决方法

My workaround

我正在编写的脚本使用 AsciidoctorJ我正在利用这一点,我可以通过使用 include processor 来控制如何包含每个文件的内容。 .使用包含处理器,我用 pass:[] 宏包装每个文件的每一行。此外,我在所需代码块上激活宏替换。上图展示了这个想法。

有没有更好的方法来显示文件的确切内容? 这行得通,但看起来像是 hack。我宁愿不必像我目前所做的那样更改读取行。


编辑以获取更多信息

我愿意:

  • 不必转义 block 定界符。我并不是专门指 ----,而是指分隔符恰好是什么。例如,当包含文件的一行有 .... 时,cirrus 的答案仍然有问题。
  • 不必转义识别为 AsciiDoc 的文件中的 include 指令。

总的来说,我不想转义(或以任何方式修改)任何行。

我在解决方法中发现的问题:

  • 如果一行的最后一个字符是反斜杠 (\),它会转义 pass:[] 宏的右括号。

最佳答案

您可以尝试使用文字 block 。根据您上面的示例:

a.adoc:

= Title

....
include::c.adoc[]
....

如果您在 c.adoc 中使用 include::,asciidoctor 仍会尝试查找并包含该文件。因此,您需要将 include:: 替换为 \include::

c.adoc:

\include::foo.txt[]
----
----

应该输出以下pdf: pdfoutput

关于asciidoc - 使用 AsciiDoc include 指令按原样包含内容的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62843588/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com