我广泛使用Markdown和Pandoc。但是,我想生成带有嵌入式链接的PDF(像往常一样),但是如果打印文档,我还想在文档末尾包含一个链接表。有没有办法自动执行此操作?
实施例
Title
-----
[Python][] is cool!
...
## Links ##
[Python]: http://python.org
[Pip]: https://pip.readthedocs.org
我实际上会在我的PDF中添加一个额外的页面,例如
Python: http://python.org
Pip: https://pip.readthedocs.org
谢谢!
答案 0 :(得分:4)
使用过滤器很容易实现这一点。
这是linkTable.hs
。一个过滤器,用于在文档末尾添加链接表。
import Text.Pandoc.JSON
import Text.Pandoc.Walk
import Data.Monoid
main :: IO ()
main = toJSONFilter appendLinkTable
appendLinkTable :: Pandoc -> Pandoc
appendLinkTable (Pandoc m bs) = Pandoc m (bs ++ linkTable bs)
linkTable :: [Block] -> [Block]
linkTable p = [Header 2 ("linkTable", [], []) [Str "Links"] , Para links]
where
links = concatMap makeRow $ query getLink p
getLink (Link txt (url, _)) = [(url,txt)]
getLink _ = []
makeRow (url, txt) = txt ++ [Str ":", Space, Link [Str url] (url, ""), LineBreak]
使用ghc linkTable.hs
编译过滤器。输出如下。
> ghc linkTable.hs
[1 of 1] Compiling Main ( linkTable.hs, linkTable.o )
Linking linkTable ...
> cat example.md
Title
-----
[Python][] is cool!
[Pip] is a package manager.
...
[Python]: http://python.org
[Pip]: https://pip.readthedocs.org
然后使用过滤器运行pandoc
。
> pandoc -t markdown --filter=./linkTable example.md
Title
-----
[Python](http://python.org) is cool!
[Pip](https://pip.readthedocs.org) is a package manager.
...
Links {#linkTable}
-----
Python: <http://python.org>\
Pip: <https://pip.readthedocs.org>\