Pandoc is described as the Swiss Army knife of document converters. Following are my notes describing how to combine Docker and Pandoc, with a bit of Perl, to implement a command line utility that converts from one format to another (in this case, Markdown to PDF).
Note: Following assumes that you already have a working instance of Docker and that you can either: configure Docker to run as a normal user or can configure sudo to allow the user to run Docker.
Steps:
1) Create a working directory and navigate into it:
mkdir work cd work
2) Pull in J. A. Gregory's Dockerfile by running:
wget https://github.com/jagregory/pandoc-docker/blob/master/Dockerfile
3) Create the Docker container by running:
docker build -t pg/pandoc .
Note the period at the end. The above will take a few minutes to build so take a bio break, make a cup of coffee, or do something else that takes about 5 minutes.
4) In a "/bin" directory (I use /home/tim/bin and have added that to my $PATH), create a file called "md2pdf", containing the following:
#!/usr/bin/perl $src=$ARGV[0]; $tgt=$ARGV[1]; # declare the output $format = "latex"; # edit the following to tweak your output $margin="-V geometry:margin=1in"; $toc = "--toc"; # following should all be on a single line # use "sudo docker..." if your Docker can't be called by # a normal user system("sudo docker run -v `pwd`:/source pg/pandoc $toc \ $margin -f markdown -t $format $src -o $tgt");
In the above, "-v `pwd`:/source" allows you to convert a Markdown file in whichever directory you happen to be working in, when calling pandoc. Effectively, you're temporarily linking your current working directory to the "/source" folder in the container.
5) Make "md2pdf" executable by running:
chmod a+x md2pdf
In the above, the $margin variable redefines the margins for the output. Without the declaration, the output's margins are a bit excessive. The $toc variable causes the output to have a table of contents. If you use that, you'll probably also want to use \newpage or \pagebreak in your Markdown code, to trigger a new-page in the output.
6) Test your instance by creating a file called "mine.md", containing:
\newpage # This is a test Just want to see if this works #sample code blah blah Hopefully it worked.
7) Test the file conversion by running:
md2pdf mine.md mine.pdf
8) Open the new file in Google Chrome or your favorite PDF reader.
Sources:
No comments:
Post a Comment