2017-05-02 7 views
1

Ich verwende panflute, um einen Python-Filter für Pandoc zu schreiben, um Markdown in ein Word-Dokument zu konvertieren. Normalerweise konvertiert Pandoc Markdown-Header in Word integrierte Stile Überschrift 1, Überschrift 2 usw. Aber aufgrund der Besonderheiten der Word-Vorlage, die ich verwenden muss, muss ich stattdessen alle Markdown-Header in entsprechende benutzerdefinierte Stile in Word wie ändern dass Kopfebene 1 => Header1, Stufe 2 => Header2 usw.pandoc - ersetzen Überschrift mit benutzerdefinierten Stil für Word docx

Hier ist eine kurze Probe Markdown-Datei ich habe meine Filter zu testen:

# Heading 1 

some text in a paragraph 

## Heading 2 

a little bit more text down below 

Im Grunde möchte ich konvertieren, dass Markdown, als ob Ich hatte es geschrieben wie:

<div custom-style="Header1">Heading 1</div> 

some text in a paragraph 

<div custom-style="Header2">Heading 2</div> 

a little bit more text down below 

So, wenn ich renne:

pandoc -S test_input.md -o test_output.docx --reference-docx ./custom_styles.docx --filter ./test_filter.py 

Das resultierende Word docx wird die entsprechenden benutzerdefinierten Stile verwenden.

Folgen?

Wie auch immer, hier ist der Filter, den ich geschrieben habe Panflöte mit:

#! /usr/bin/env python 
#coding: utf-8 

from panflute import * 

def action(elem, doc): 
    if isinstance(elem, Header): 
     return Div(elem, classes=['Header{}'.format(elem.level)]) 

def main(doc=None): 
    return run_filter(action, doc=doc) 

if __name__ == "__main__": 
    main() 

, die leider nicht den Markdown-Header mit meiner benutzerdefinierten divs ersetzen für Styling. Es kommt grundsätzlich am anderen Ende heraus, als ob überhaupt kein Filter vorhanden wäre.

Ich bin mir nicht sicher, was ich hier falsch mache.

+0

Panflöte kenne ich nicht, fragen Sie vielleicht auf der Mailingliste pandoc-discuss? – mb21

Antwort

1

Aha! Endlich habe ich es selbst herausgefunden.

from panflute import * 

def action(elem, doc): 
    if isinstance(elem, Header): 
     #return Div(elem, attributes={'custom-style': 'Header{}'.format(elem.level)}) 
     return Div(Para(*elem.content), attributes={'custom-style': 'Header {}'.format(elem.level)}) 

def main(doc=None): 
    return run_filter(action, doc=doc) 

if __name__ == "__main__": 
    main() 
Verwandte Themen