我使用Pandoc進行技術報告,並修改了Python pandocfilters包示例metavars.py以提供變量替換。 Markdown中的%{test}
被替換爲YAML元數據中的值test
。很棒!使用Pandoc的JSON AST在段落內插入表的正確語法是什麼?
它適用於單線和「塊」風格的YAML。
我想要做同樣的事情,而不是放在Markdown格式化表格中的文本塊中。這裏是我最小的測試文檔(example.md
):
---
test: |-
| a |
|---|
| 1 |
block: |-
This Markdown _formatted_ a block \
of YAML \
text.
...
After this paragraph you should see a block:
%{block}
After this paragraph you should see a table:
%{test}
你可以看到我在這個gist修改metavars.py
。
如果您註釋掉%{test}
文字和運行它,你會看到正確的輸出:
$ pandoc -t json example.md | ./metavars.py | pandoc -f json -t plain
After this paragraph you should see a block:
This Markdown _formatted_ a block
of YAML
text.
After this paragraph you should see a table:
當我取消%{test}
我結束了一個錯誤,沒有回溯:
$ pandoc -t json example.md | ./metavars.py | pandoc -f json -t plain
test -> [[], [{u'c': [], u't': u'AlignDefault'}], [0.0], [[{u'c':
[{u'c': u'a', u't': u'Str'}], u't': u'Plain'}]], [[[{u'c':
[{u'c': u'1', u't': u'Str'}], u't': u'Plain'}]]]]
pandoc: Error in $[3][0]: expected Object, encountered Array
我被困在這裏!我的假設是我已經構建了一個無效的Pandoc AST的有效JSON文檔。我找不到關於Pandoc AST的文檔,並且當我比較生成的手動構建的Markdown轉換爲AST時,我看不到差異。
這就是我想要向得到的結果:
$ pandoc -t json example.md | ./metavars.py | pandoc -f json -t plain
After this paragraph you should see a block:
This Markdown _formatted_ a block
of YAML
text.
After this paragraph you should see a table:
a
---
1
我真的很接近,從一個diff基礎:
任何建議如何發出讓我的表插入Para?我希望我沒有陷入一種我無法做到的情況。
Pandoc AST定義是在Haskell中編寫的(與所有的pandoc一樣)和[在它自己的版本庫中](https://github.com/jgm/pandoc-types/blob/master/Text/Pandoc/Definition.hs #L196)...從你的差異來看,問題顯而易見,對吧?你發出了一個'Para'而不是'Table' ..順便說一句,我想你會比使用過濾器更好地使用預處理器,請參閱[這篇博文](http://randomdeterminism.wordpress.com/2012/06/01/how-i-stopped-worring-and-started-using-markdown-like-tex/)。 – mb21
我會研究使用預處理器。感謝您對源代碼的深入鏈接。是的,我看到差異。 :)如果有一個有效的語法來做我想從過濾器中得到的東西,那麼最好,因爲我已經有了一個過濾器。也許沒有。感謝您的幫助。 –
你的評論讓我想到了......爲什麼不在段落中「向下看」,看它是否包含將被替換的嵌套元素?這裏有一個[metavars.py]的[更新版本](https://gist.github.com/bbbd7364ed7ea1f5f2a9),它符合我的意圖。感謝您的幫助@ mb21。 –