如本文所述,当源为commonmark+sourcepos
时,Pandoc记录类似synctex的信息。例如,对于这个通用标记输入,
---
title: "Sample"
---
This is a sample document.
本机格式的输出如下所示:
Pandoc
Meta
{ unMeta =
fromList [ ( "title" , MetaInlines [ Str "Sample" ] ) ]
}
[ Div
( "" , [] , [ ( "data-pos" , "Sample.knit.md@5:1-6:1" ) ] )
[ Para
[ Span
( ""
, []
, [ ( "data-pos" , "Sample.knit.md@5:1-5:5" ) ]
)
[ Str "This" ]
, Span
( ""
, []
, [ ( "data-pos" , "Sample.knit.md@5:5-5:6" ) ]
)
[ Space ]
, Span
( ""
, []
, [ ( "data-pos" , "Sample.knit.md@5:6-5:8" ) ]
)
[ Str "is" ]
但是在。tex文件中显示的全部内容是:
{This}{ }{is}...
作为迈向Synctex支持的一步,我想将data-pos信息作为LaTeX标记插入,即将.tex输出更改为如下所示:
{Thisdatapos{Sample.knit.md@5:1-5:5}}{ datapos{Sample.knit.md@5:5-5:6}}{isdatapos{Sample.knit.md@5:6-5:8}}...
这看起来像是Lua过滤器可以很容易地完成的事情:寻找data-pos
记录,将位置信息复制到Str
记录。然而,我不知道Lua或Pandoc母语。有人能帮帮忙吗?对Span
记录这样做对于我的目的就足够了。我使用的是Pandoc 2.18和Lua 5.4。
这是一个似乎有效的尝试。评论或更正仍然欢迎!
Span = function(span)
local datapos = span.attributes['data-pos']
if datapos then
table.insert(span.content, pandoc.RawInline('tex', "\datapos{" .. datapos .. "}"))
end
return span
end