【发布时间】:2017-02-27 04:58:22
【问题描述】:
我只是想问一下是否有人知道 Pandoc 的简短过滤器,可以自动为任何链接添加脚注。我只想在我的打印文档中有可读的链接源。 所以要指定,我想从
[link](url)
类似
[link](url)[^link: url]
因此,在打印的 PDF 中,我所指的链接的 URL 应该在页面底部可见。
【问题讨论】:
我只是想问一下是否有人知道 Pandoc 的简短过滤器,可以自动为任何链接添加脚注。我只想在我的打印文档中有可读的链接源。 所以要指定,我想从
[link](url)
类似
[link](url)[^link: url]
因此,在打印的 PDF 中,我所指的链接的 URL 应该在页面底部可见。
【问题讨论】:
试试
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
【讨论】:
Link lab (src, tit)替换为Link attr lab (src, tit),它可以工作。
使用 Pandoc 过滤器的替代方法,如 John MacFarlane answer 将是为此使用 LaTeX,创建一个 *.tex 文件并包括它,例如通过 -H / @987654326 @ 选项为pandoc。
基于 TeX 和 LaTeX StackExchange 上的 Heiko Oberdiek answer 到 Auto generate list of \url usages within document 问题,LaTeX 代码可能看起来像这样(尚未测试):
\let\saved@hyper@linkurl\hyper@linkurl
\renewcommand*{\hyper@linkurl}[2]{%
\saved@hyper@linkurl{#1}{#2}%
\footnote{\url{#1}}%
}
我认为url 包是由 Pandoc 自动包含的;如果没有,您需要在上面的代码顶部添加\usepackage{url}。
请注意,上述解决方案中脚注中的链接使用\url{<link-target>} 而不是裸露的<link-target> 作为脚注内容。我认为它看起来更好,并且 URL 中的_ 肯定不会有问题(我不知道 Pandoc 是否会为 LaTeX 转义),并且对于非常长的 URL 的 URL 友好的换行处理没有问题.
John MacFarlane 的答案可以很简单地修改为:
import Text.Pandoc.JSON
main = toJSONFilter go
where go (Link alt desc (url, title)) = Span ("",[],[]) [Link alt desc (url, title), Note [Plain [Link alt [Str url] (url, "")]]]
go x = x
【讨论】:
以下解决方案通过无过滤器提供了 OP 所要求的(以及我需要的)。无论您在文档中的何处有链接,它都会保留该链接,添加一个脚注,并且在脚注中有一个完整的 URL。
不过,此解决方案确实需要您修改 LaTeX 模板。
如果您还没有在某处复制默认模板,现在使用pandoc -D latex 执行此操作,并将该输出保存到一个文件中,也许是template.latex,我将使用它作为其余部分的示例名称。
找到您的模板的以下部分(默认模板中为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。大功告成!
您可以进行一些调整。如果你写腻了-V links-as-notes,你可以:
links-as-notes: true 添加到文档的YAML metadata,或$if(links-as-notes)$ 和对应的$endif$。【讨论】: