正如所描述的here,当源为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支持的一个步骤,我希望将数据pos信息作为LaTeX标记插入,即将.tex输出更改为如下所示:
{This\datapos{Sample.knit.md@5:1-5:5}}{ \datapos{Sample.knit.md@5:5-5:6}}{is\datapos{Sample.knit.md@5:6-5:8}}...
这看起来像是Lua过滤器可以很容易完成的任务:查找data-pos
记录,将位置信息复制到Str
记录中。然而,我不知道Lua或Pandoc的母语。有人能帮忙吗?就我的目的而言,为Span
记录这样做就足够了。我用的是Pandoc 2.18和Lua5.4。
发布于 2022-11-25 17:45:59
下面是一次似乎有效的尝试。欢迎您提出意见或修改!
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
https://stackoverflow.com/questions/74574732
复制相似问题