从Pandoc LaTex输出中删除\ hypertarget

时间:2018-09-15 02:14:29

标签: pandoc pypandoc

我正在使用pypandoc将markdown文件转换为LaTex。我的markdown文件有一个标题,例如:

# Header Text # 

当pypandoc将文件呈现为.tex文件时,它显示为:

\hypertarget{header-text}{%
\section{Header Text}\label{header-text}}

虽然这是一个很好的功能,可以轻松地链接回节标题,但我并不一定想要这样做,而是希望在这种情况下让pypandoc只生成:

\section{Header Text}

是否存在可用于关闭\ hypertarget {}功能的pandoc设置或pypandoc设置?我已经查看了pandoc的文档,但在任何地方都没有看到它。

2 个答案:

答案 0 :(得分:2)

我有相同的需求,并且我正在使用-auto_identifiers开关,

pandoc -r markdown-auto_identifiers -w latex test.md -o test.tex

这将同时删除这两个

\hypertarget{header-text}{%

\label{header-text}}

只留下

\section{Header Text}

按照您的要求。

Source

答案 1 :(得分:1)

没有这样的开关。如果需要不同的输出,则必须使用pandoc filter,或者如@ mb21所述,对输出进行后处理。

这两个选项都不是很好:使用过滤器手动定义标头输出将使您失去所有其他pandoc功能,例如--top-level-division和对未编号标头的支持。另一方面,后处理往往很脆弱,很难正确处理。

无论如何,下面是一个panflute过滤器,它将使用自定义命令替换标头。将其保存到文件中,然后通过filters选项将其传递给pypandoc;这应该给您想要的输出。

from panflute import *

sectionTypes = ["section", "subsection", "subsubsection",
                "paragraph", "subparagraph"]

def reduce_header(elem, doc):
    if type(elem) == Header:
        cmd = "\\%s{" % sectionTypes[elem.level - 1]
        inlines = [RawInline(cmd, "tex")]
        inlines.extend(elem.content)
        inlines.append(RawInline("}", "tex"))
        return Plain(*inlines)

if __name__ == "__main__":
    run_filter(reduce_header)