Pandoc Filter为链接添加脚注

时间:2015-11-24 17:26:26

标签: markdown pandoc

我只是想问一下是否有人知道Pandoc的简短过滤器会自动为任何链接添加脚注。我只想在我的打印文档中有可读的链接源。 所以要说明,我想从

开始
[link](url)

类似

[link](url)[^link: url] 

因此,在打印的PDF中,我所指的链接的URL应该在页面底部可见。

3 个答案:

答案 0 :(得分:6)

尝试

pandoc -o myfile.pdf -V links-as-notes=true myfile.md

这仅适用于PDF输出,但它很简单,不需要过滤器。 请参阅“LaTeX的变量”下的用户指南/ README。

编辑:使用这种方法,您在主文本中不再有超链接,只是带有URL的注释。所以它并不完全是你所要求的,但也许就足够了。

编辑:这是你如何使用pandoc filter来保留链接(未经测试,但应该关闭):

import Text.Pandoc.JSON

main = toJSONFilter go
  where go (Link attr lab (src, tit)) = Span ("",[],[]) [Link attr lab (src, tit), Note [Plain [Str src]]]
        go x = x

答案 1 :(得分:2)

使用Pandoc过滤器执行此操作的替代方法(如John MacFarlane answer中所述)将使用LaTeX ,创建*.tex文件并将其包含在内,例如通过{{ 1}} -H --include-in-header的{​​{1}}选项。

根据TeX& C上的Heiko Oberdiek answerAuto generate list of \url usages within document问题,LaTeX代码可能看起来像这样(尚未经过测试) LaTeX StackExchange:

pandoc

我认为Pandoc自动包含\let\saved@hyper@linkurl\hyper@linkurl \renewcommand*{\hyper@linkurl}[2]{% \saved@hyper@linkurl{#1}{#2}% \footnote{\url{#1}}% } 包;如果没有,您需要在上面代码的顶部添加url

请注意,上述解决方案中的脚注中的链接使用\usepackage{url}而不是裸\url{<link-target>}作为脚注内容。我认为它看起来更好,并且URL中的<link-target>肯定没有问题(我不知道Pandoc是否为了LaTeX而逃脱了),并且没有URL友好的换行处理问题对于很长的网址。

John MacFarlane的答案可以很简单地修改来做到这一点:

_

答案 2 :(得分:2)

以下解决方案提供了OP请求(以及我需要的)无过滤器的确切内容。无论您在文档中有链接,它都会保留链接,添加脚注,并在脚注中提供完整的URL。

但是,此解决方案确实需要您修改LaTeX模板。

步骤1(可选,如果您已有自定义LaTeX模板)

如果您尚未在某处复制默认模板,请立即使用pandoc -D latex并将该输出保存到文件中,可能是template.latex,我将其用作文件其余部分的示例名称。

第2步

在模板中找到以下部分(默认模板中为present):

$if(links-as-notes)$
% Make links footnotes instead of hotlinks:
\renewcommand{\href}[2]{#2\footnote{\url{#1}}}
$endif$

并将其替换为

$if(links-as-notes)$
\usepackage{letltxmacro}
% Alias href to originalHref to avoid an infinite loop
\LetLtxMacro{\originalHref}{\href}
% Make links footnotes in addition to hotlinks:
\renewcommand{\href}[2]{\originalHref{#1}{#2}\footnote{\url{#1}}}
$endif$

然后像pandoc -V links-as-notes --template=template.latex document.md -o document.pdf一样运行pandoc。你完成了!

步骤3(可选)

您可以进行一些调整。如果您厌倦了撰写-V links-as-notes,您可以:

  • links-as-notes: true添加到您的文档YAML metadata
  • 只需从模板中删除$if(links-as-notes)$和相应的$endif$

参考