用于解析内部链接的pandoc命令行参数

时间:2016-05-19 15:11:23

标签: hyperlink xhtml markdown pandoc

我的问题类似于this post,但不是相同。在使用几个相互链接的HTML文件作为输入时,我无法弄清楚正确的 pandoc命令行参数来维护/解析跨文档链接。

假设我有两个文件,chapter1.xhtml和chapter2.xhtml位于/ home / user / Documents文件夹中,其中包含以下内容:

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<h3>Chapter 1</h3>
<p><a href="/home/user/Documents/chapter2.xhtml">Next chapter</a><br /></p>

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</body>
</html>

包含指向下一个文档的链接。

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<h3>Chapter 2</h3>
<p><a href="/home/user/Documents/chapter1.xhtml">Previous chapter</a><br /></p>

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</body>
</html>

包含指向上一个文档的链接。

我使用了以下命令行参数:

$ pandoc -s --toc --verbose -o /home/user/Documents/output.markdown /home/user/Documents/chapter1.xhtml /home/user/Documents/chapter2.xhtml

我得到了以下输出:

---
---

-   [Chapter 1](#chapter-1)
-   [Chapter 2](#chapter-2)

### Chapter 1

[Next chapter](/home/user/Documents/chapter2.xhtml)\

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

### Chapter 2

[Previous chapter](/home/user/Documents/chapter1.xhtml)\

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

当我选择docx或latex / pdf作为输出格式时,也会出现此问题。我也尝试使用相对链接,但没有任何效果。

解决跨文档链接的正确参数是什么?

tl; dr I.e.我不想要包含原始路径的链接引用;我希望他们指向新的输出文档。

1 个答案:

答案 0 :(得分:2)

问题是您的链接包含绝对路径(/home/user/Documents/chapter1.xhtml)而不是相对路径(chapter1.xhtml)。我无法想象包含绝对路径的ePUB文件,如果是这样,文件中的链接将只能在您的计算机上正常工作。因此解决方案必须在将这些ePUB文件提供给pandoc之前修复这些文件。

请注意,从markdown到epub并返回到html的pandoc往返工作正如预期的那样:

$ pandoc -o foo.epub
# foo

adfs

# bar

go [to foo](#foo)


$ unzip foo.epub

$ cat ch002.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta http-equiv="Content-Style-Type" content="text/css" />
  <meta name="generator" content="pandoc" />
  <title>bar</title>
  <link rel="stylesheet" type="text/css" href="stylesheet.css" />
</head>
<body>
<div id="bar" class="section level1">
<h1>bar</h1>
<p>go <a href="ch001.xhtml#foo">to foo</a></p>
</div>
</body>
</html>

$ pandoc foo.epub

<p><span id="ch001.xhtml"></span></p>
<div id="ch001.xhtml#foo" class="section level1">
<h1>foo</h1>
<p>adfs</p>
</div>
<p><span id="ch002.xhtml"></span></p>
<div id="ch002.xhtml#bar" class="section level1">
<h1>bar</h1>
<p>go <a href="#ch001.xhtml#foo">to foo</a></p>
</div>

P.S。

使用两个输入文档,如:

pandoc -o output.md chapter1.xhtml chapter2.xhtml

作为pandoc README状态:

  

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

因此,对于pandoc进行的解析,它将其视为一个文档......所以难怪跨文件链接不起作用。