2016-09-19 5 views
1

Я использую pandoc для Windows для преобразования из файла .docx в файл .md.Используйте компактные списки при преобразовании из docx в markdown

Флаги Я использую следующие:

pandoc --wrap none --to markdown_github --output fms.md "FMS.docx" 

При просмотре выходной файл уценки, то есть новые строки, отделяющие каждый элемент списка. Документация определяет это как loose list, например, приведенное ниже.

- one 

- two 

- three 

Я хочу использовать компактный список для вывода таких, как показано ниже.

- one 
- two 
- three 

Есть ли флаг, чтобы сделать вывод pandoc компактным списком?

Если нет, то как я могу использовать фильтр для достижения желаемого результата?

+1

Существует не флаг, но вы можете использовать pandoc-фильтры, чтобы заменить «Para» из элементов списка на «Plain's». – tarleb

+0

@tarleb Спасибо! Я не знаком с pandoc-фильтрами. Можете ли вы написать ответ с реализацией? – styfle

ответ

1

Для достижения этой цели нет флага, но существует простое решение с использованием фильтра pandoc functionallity. Внутренне элементы списка представлены в виде списка блоков; список компактен, если все элементы блока состоят только из блоков Plain. Если все элементы состоят только из одного абзаца, то достаточно изменить тип блока позиций от Para (для , пункт) до Plain.

Программа Haskell ниже делает именно это. Безопасный и использовать его в качестве фильтра: 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 

То же самое можно было бы с помощью Python фильтра в случае Haskell не является вариантом. Подробнее см. Страницу pandoc scripting.