sty*_*fle 3 markdown docx pandoc
我在 Windows 上使用 pandoc 将.docx文件转换为.md文件。
我正在使用的标志如下:
pandoc --wrap none --to markdown_github --output fms.md "FMS.docx"
Run Code Online (Sandbox Code Playgroud)
当我查看输出 markdown 文件时,它用换行符分隔每个列表项。该文档将其定义为一个松散列表,如下所示。
- one
- two
- three
Run Code Online (Sandbox Code Playgroud)
我想使用一个紧凑的列表来输出,如下所示。
- one
- two
- three
Run Code Online (Sandbox Code Playgroud)
是否有一个标志可以使 pandoc 输出一个紧凑列表?
如果没有,我该如何使用过滤器来实现所需的输出?
没有标志可以实现此目的,但有一个使用 pandoc过滤功能的简单解决方案。在内部,列表项表示为块列表;如果所有块项仅由块组成,则列表是紧凑的Plain。如果所有项目仅包含一个段落,则将项目块的类型从Para(for paragraph ) 更改为就足够了Plain。
下面的 Lua 程序就是这样做的。保存它并将其用作Lua 过滤器:(pandoc -t markdown --lua-filter the-filter.lua your-document.docx需要 pandoc 2.1 或更高版本):
local List = require 'pandoc.List'
function compactifyItem (blocks)
return (#blocks == 1 and blocks[1].t == 'Para')
and {pandoc.Plain(blocks[1].content)}
or blocks
end
function compactifyList (l)
l.content = List.map(l.content, compactifyItem)
return l
end
return {{
BulletList = compactifyList,
OrderedList = compactifyList
}}
Run Code Online (Sandbox Code Playgroud)
如果人们更喜欢 Haskell 而不是 Lua,也可以使用下面的过滤器pandoc -t markdown --filter the-filter.hs your-document.docx:
import Text.Pandoc.JSON
main = toJSONFilter compactifyList
compactifyList :: Block -> Block
compactifyList blk = case blk of
(BulletList items) -> BulletList $ map compactifyItem items
(OrderedList attrbs items) -> OrderedList attrbs $ map compactifyItem items
_ -> blk
compactifyItem :: [Block] -> [Block]
compactifyItem [Para bs] = [Plain bs]
compactifyItem item = item
Run Code Online (Sandbox Code Playgroud)
如果 Lua 和 Haskell 都不可用,使用 Python 过滤器也可以实现同样的效果。有关详细信息,请参阅 pandoc 的过滤器页面。
| 归档时间: |
|
| 查看次数: |
891 次 |
| 最近记录: |