How to convert a markdown file to PDF?
How to convert a markdown file to PDF? The final PDF output should represent the rendered markdown file. Bonus points if the method also preserves colored emojis.
Both CLI and GUI solutions are welcome.
2 answers
You could use the LaTeX markdown
package to create a pdf.
To make sure that the coloured emoji are visible:
- choose a unicode-aware engine like
lualatex
- choose a font which has coloured emoji, e.g.
Noto Color Emoji
Assuming your markdown file is called test.md
, the create a .tex
with the content as shown below and compile it with lualatex --shell-escape <name of .tex file>
.
\documentclass{article}
\usepackage{markdown}
\usepackage{fontspec}
% from https://tex.stackexchange.com/a/572220/36296
\directlua{luaotfload.add_fallback
("emojifallback",
{
"NotoColorEmoji:mode=harf;"
}
)}
\setmainfont{Arial}[RawFeature={fallback=emojifallback}]
\begin{document}
\markdownInput{test.md}
\end{document}
0 comment threads
The following users marked this post as Works for me:
User | Comment | Date |
---|---|---|
Iizukiā |
Thread: Works for me Weasyprint was just what I needed! I had previously tried with the latex engines in texlive, and that just seemed unnecessary complex for a seemingly ... |
Nov 26, 2024 at 06:06 |
It feels like it has become a bit trickier to do so, but pandoc
should do most of the work, here. For example, on a Debian-like system for installation commands:
sudo apt install pandoc
pandoc --from=markdown --to=pdf in.md --output out.pdf
You probably don't need to specify the file types, but it seems better to get in the habit of over-specifying things.
I say that it'll do "most of the work," because pandoc
actually farms out the final PDF conversion by producing an intermediate step, LaTeX by default. My machine, for example, doesn't have the LaTeX engine that it expects and I couldn't figure out what to install quickly enough for this response, so I needed to find an alternative and specify it, settling on weasyprint
, which takes its side-trip through HTML instead of LaTeX.
sudo apt install weasyprint
pandoc --from=markdown --to=pdf in.md --output out.pdf --pdf-engine=weasyprint
This does preserve the emoji, which comes as a pleasant surprise to me, too.
In any case, this gets you a fairly boring PDF, looking a lot like a web page, which might do the trick. From there, though, you can go in more sophisticated directions. If, for example, you install texlive-latex-base
, that will (should?) serve as the default LaTeX-to-PDF converter. You don't want to start there, because you'll need to configure all the LaTeX templates and stylesheets to get a valid conversion, which becomes an annoying tradeoff of how much effort you want to put in versus how much you want to change the look of the PDF.
I haven't seen any GUI interfaces that save you from the command-line, but they must exist, even if they only issue the pandoc
command on selected files.
0 comment threads