I am using pypandoc to convert a markdown file to LaTex. My markdown file has a header, for example:
# Header Text #
When pypandoc renders the file as a .tex file, this appears as:
\hypertarget{header-text}{%
\section{Header Text}\label{header-text}}
While this is a nice feature to make it easy to link back to section headers, I don't necessarily want that and would prefer in this case for pypandoc to just generate:
\section{Header Text}
Is there a pandoc setting, or a pypandoc setting, that can be used to turn off the \hypertarget{} feature? I have reviewed the documentation for pandoc and didn't see it anywhere.
I had the same need, and I am using the -auto_identifiers
switch,
pandoc -r markdown-auto_identifiers -w latex test.md -o test.tex
That will remove both
\hypertarget{header-text}{%
and
\label{header-text}}
leaving only
\section{Header Text}
like you requested.
Source
There is no such switch. If you want different output, you'd either have to use a pandoc filter or, as @mb21 already noted, post-process the output.
Neither of these options is very good: using a filter to manually define header output will lose you all kinds of other pandoc features, like --top-level-division
and support for unnumbered headers. Post-processing, on the other hand, tends to be brittle and difficult to get right.
Anyway, below is a panflute filter, which will replace headers with a custom command. Save it to a file and pass it to pypandoc via the filters
option; this should give you the desired output.
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With