从 pandoc LaTex 输出中删除 \hypertarget

rsg*_*gny 8 pandoc pypandoc

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

# Header Text # 
Run Code Online (Sandbox Code Playgroud)

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

\hypertarget{header-text}{%
\section{Header Text}\label{header-text}}
Run Code Online (Sandbox Code Playgroud)

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

\section{Header Text}
Run Code Online (Sandbox Code Playgroud)

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

gsl*_*gsl 12

我有同样的需求,我正在使用-auto_identifiers开关,

pandoc -r markdown-auto_identifiers -w latex test.md -o test.tex
Run Code Online (Sandbox Code Playgroud)

这将删除两者

\hypertarget{header-text}{%
Run Code Online (Sandbox Code Playgroud)

和

\label{header-text}}
Run Code Online (Sandbox Code Playgroud)

只离开

\section{Header Text}
Run Code Online (Sandbox Code Playgroud)

就像你要求的那样。

来源


tar*_*leb 1

没有这样的开关。如果您想要不同的输出,您要么必须使用pandoc 过滤器,要么如 @mb21 已经指出的那样,对输出进行后处理。

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

不管怎样,下面是一个排笛过滤器,它将用自定义命令替换标题。将其保存到文件并通过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)
Run Code Online (Sandbox Code Playgroud)