将markdown转换为其他格式时,与pandoc断开的跨文档链接

时间:2016-12-14 10:07:20

标签: pandoc

Wenn使用交叉文档链接将markdown文件转换为html,docs或pdf链接在此过程中被破坏。 我使用pandoc 1.19.1和MikTex。 这是我的测试用例:

File1: doc1.md
[link1](/doc2.md)
File2: doc2.md
[link2](/doc1.md)

调用pandoc的html结果: pandoc doc1.md doc2.md -o test.html 看起来像这样:

<p><a href="/doc2.md">link1</a> <a href="/doc1.md">link2</a></p>

作为pdf,链接已创建,但不起作用。导出为docx看起来是一样的。

我认为当处理多个文件并将其连接到同一个输出文件时,结果应该包含页面内部链接,例如html-output的锚链接。但是它在输出文件中创建的链接就像在输入文件中一样。甚至原始文件扩展名.md也会保留在创建的链接中。 我做错了什么?

我的问题看起来有点像这样: pandoc command line parameters for resolving internal links 在这个问题的评论中,据说5月份的拉动请求会修复该错误。但这个bug似乎仍然存在。 问候 乔治

2 个答案:

答案 0 :(得分:1)

正如pandoc README所述:

  

如果给出了多个输入文件,pandoc将在解析之前将它们全部连接起来(在它们之间用空行)

因此,对于pandoc进行的解析,它将其视为一个文档...因此,您必须在多个文件中构建链接,就好像它们都在一个文件中一样,另请参阅{{3}有关详细信息。

答案 1 :(得分:0)

尝试将Gitlab Wiki导出为PDF时,我遇到了类似的问题。页面之间的链接看起来像filename-of-page#anchor-name,页面内的链接看起来像#anchor-name。我写了一个(棘手又脆弱的)pandoc过滤器,该过滤器为我解决了这个问题,谁知道它对其他人有用。

示例文件

为了解释我的解决方案,我将有两个测试文件,101-first-page.md

# First page // Gitlab automatically creates an anchor here named #first-page

Some text.

## Another section // Gitlab automatically creates an anchor here named #another-section

A link to the [first section](#first-page)

102-second-page.md

# Second page // Gitlab automatically creates an anchor here named #second-page

Some text and [a link to the first page](101-first-page#first-page).

将它们串联起来以在pandoc中呈现为一个文档时,页面之间的链接会随着锚点的变化而中断。在串联文件的下方,带有注释的锚点。

# First page // anchor=#first-page

Some text.

## Another section anchor=#another-section

A link to the [first section](#first-page)

# Second page //  anchor=#second-page

Some text and [a link to the first page](101-first-page#first-page). // <-- this anchor no longer exists.

由于链接目标不正确,因此第二页到第一页的链接断开。

解决方案

通过先通过pandoc过滤器分别预处理所有markdown文件,然后将生成的json文件连接起来,我就能使所有链接正常工作。

要求

  • pandoc
  • 乳胶
  • python
  • pandocfilters
  • 每个文件都应以与文件名相匹配的1级标头开头(开头的数字除外)。例如。文件101-A file on the wiki.md应该具有名为A file on the wiki的第一级头。

过滤器

this gist中提供了过滤器本身(以及pandoc脚本)。

它的作用是:

  1. 它获取第一个1级标头的标签,例如first-page
  2. 它会将标签附加到同一文件中的所有其他标签上,例如first-page-another-section
  3. 它将所有链接重命名为同一文件,以便考虑前缀,例如#first-page-first-page
  4. 它将所有链接重命名为其他文件,以便考虑其他文件的(假定)前缀,例如101-first-page#first-page成为#first-page-first-page

通过该过滤器分别运行每个markdown文件并将其转换为json文件后,它会连接json文件并将 that 转换为PDF。