Removed PDF writer from core pandoc, restored markdown2pdf.

+ Added markdown2pdf.
+ Removed Text/Pandoc/PDF.hs.
+ Removed references to PDF writer from Main.hs.
+ Removed references to PDF writer from pandoc.cabal.
+ Added markdown2pdf.1 to list of man pages in Setup.hs.
+ Added markdown2pdf.1.md man page source.
+ Added reference to markdown2pdf(1) in pandoc man page.
+ Added markdown2pdf to WRAPPERS in Makefile.
+ Removed mention of pdf writer from README; added markdown2pdf.
+ Added remarks on markdown2pdf dependencies to README.Debian.
+ Added markdown2pdf to web/index.txt.in.
+ Use markdown2pdf for pdf web demos.
+ Put markdown2pdf back into debian control and rules.
+ Added markdown2pdf to macports Portfile.
+ Added markdown2pdf to freebsd package.


git-svn-id: https://pandoc.googlecode.com/svn/trunk@1415 788f1e2b-df1e-0410-8736-df70ead52e1b
This commit is contained in:
fiddlosopher 2008-08-27 05:50:26 +00:00
parent 4f14802831
commit 3d2ff3d0a8
17 changed files with 286 additions and 205 deletions

View file

@ -32,7 +32,6 @@ writers.
module Main where
import Text.Pandoc
import Text.Pandoc.ODT
import Text.Pandoc.PDF
import Text.Pandoc.Shared ( joinWithSep, HTMLMathMethod (..) )
import Text.Pandoc.Highlighting ( languages )
import System.Environment ( getArgs, getProgName, getEnvironment )
@ -100,7 +99,6 @@ writers = [("native" , (writeDoc, ""))
,("opendocument" , (writeOpenDocument, defaultOpenDocumentHeader))
,("odt" , (writeOpenDocument, defaultOpenDocumentHeader))
,("latex" , (writeLaTeX, defaultLaTeXHeader))
,("pdf" , (writeLaTeX, defaultLaTeXHeader))
,("context" , (writeConTeXt, defaultConTeXtHeader))
,("texinfo" , (writeTexinfo, ""))
,("man" , (writeMan, ""))
@ -111,7 +109,7 @@ writers = [("native" , (writeDoc, ""))
]
isNonTextOutput :: String -> Bool
isNonTextOutput = (`elem` ["odt", "pdf"])
isNonTextOutput = (`elem` ["odt"])
-- | Writer for Pandoc native format.
writeDoc :: WriterOptions -> Pandoc -> String
@ -433,7 +431,6 @@ defaultWriterName x =
".texinfo" -> "texinfo"
".db" -> "docbook"
".odt" -> "odt"
".pdf" -> "pdf"
['.',y] | y `elem` ['1'..'9'] -> "man"
_ -> "html"
@ -598,7 +595,6 @@ main = do
let writeOutput = case writerName' of
"odt" -> saveOpenDocumentAsODT outputFile sourceDirRelative
"pdf" -> saveLaTeXAsPDF outputFile sourceDirRelative
_ -> if outputFile == "-"
then putStrLn
else writeFile outputFile . (++ "\n")

View file

@ -24,7 +24,7 @@ EXECSBASE := $(shell sed -ne 's/^[Ee]xecutable:\{0,1\}[[:space:]]*//p' $(CABAL))
#-------------------------------------------------------------------------------
# Install targets
#-------------------------------------------------------------------------------
WRAPPERS := html2markdown hsmarkdown
WRAPPERS := html2markdown hsmarkdown markdown2pdf
# Add .exe extensions if we're running Windows/Cygwin.
EXTENSION := $(shell uname | tr '[:upper:]' '[:lower:]' | \
sed -ne 's/^cygwin.*$$/\.exe/p')
@ -85,8 +85,8 @@ all: build-program
./$(MAIN) -s -w latex $< >$@ || rm -f $@
%.rtf: % $(MAIN)
./$(MAIN) -s -w rtf $< >$@ || rm -f $@
%.pdf: % $(MAIN)
./$(MAIN) -w pdf -o $@ $< || rm -f $@
%.pdf: % $(MAIN) markdown2pdf
sh ./markdown2pdf $< || rm -f $@
%.txt: %
perl -p -e 's/\n/\r\n/' $< > $@ || rm -f $@ # convert to DOS line endings

69
README
View file

@ -55,9 +55,8 @@ If you want to write to a file, use the `-o` option:
pandoc -o hello.html hello.txt
[^1]: The exception is for non-text output formats, such as `odt`
and `pdf`. For output in these formats, an output file must be
specified explicitly.
[^1]: The exception is for `odt`. Since this is a binary output format,
an output file must be specified explicitly.
Note that you can specify multiple input files on the command line.
`pandoc` will concatenate them all (with blank lines between them)
@ -82,28 +81,16 @@ To convert `hello.html` from html to markdown:
pandoc -f html -t markdown hello.html
Supported output formats include `markdown`, `latex`, `context`
(ConTeXt), `pdf`, `html`, `rtf` (rich text format), `rst`
(ConTeXt), `html`, `rtf` (rich text format), `rst`
(reStructuredText), `docbook` (DocBook XML), `opendocument`
(OpenDocument XML), `odt` (OpenOffice text document), `texinfo`, (GNU
Texinfo), `mediawiki` (MediaWiki markup), `man` (groff man), and `s5`
(which produces an HTML file that acts like powerpoint).
Notes:
- For `odt` output, you must have `zip` in the path. If you
don't have it installed, you can get the free [Info-ZIP].
- For `pdf` output, you must have `pdflatex` and `bibtex` in the
path. You should also have the following LaTeX packages installed:
`unicode`, `fancyhdr` (if you have verbatim text in footnotes),
`graphicx` (if you use images), `array` (if you use tables), and
`ulem` (if you use strikeout text). If they are not already included
in your LaTeX distribution, you can get them from [CTAN]. A full
[TeX Live] or [MacTeX] distribution will have all of these packages.
[Info-ZIP]: http://www.info-zip.org/Zip.html
[TeX Live]: http://www.tug.org/texlive/
[MacTeX]: http://www.tug.org/mactex/
For `odt` output, you must have `zip` in the path. If you
don't have it installed, you can get the free [Info-ZIP].
[Info-ZIP]: http://www.info-zip.org/Zip.html
Supported input formats include `markdown`, `html`, `latex`, and `rst`.
Note that the `rst` reader only parses a subset of reStructuredText
@ -148,12 +135,38 @@ then convert the output back to the local encoding.
Shell scripts
=============
Two shell scripts, `html2markdown` and `hsmarkdown`, are included in
the standard Pandoc installation. (They are not included in the Windows
binary package, as they require a POSIX shell, but they may be used in
Windows under Cygwin.)
Three shell scripts, `markdown2pdf`, `html2markdown`, and `hsmarkdown`,
are included in the standard Pandoc installation. (They are not included
in the Windows binary package, as they require a POSIX shell, but they
may be used in Windows under Cygwin.)
1. `html2markdown` grabs a web page from a file or URL and converts
1. `markdown2pdf` produces a PDF file from markdown-formatted
text, using `pandoc` and `pdflatex`. The default
behavior of `markdown2pdf` is to create a file with the same
base name as the first argument and the extension `pdf`; thus,
for example,
markdown2pdf sample.txt endnotes.txt
will produce `sample.pdf`. (If `sample.pdf` exists already,
it will be backed up before being overwritten.) An output file
name can be specified explicitly using the `-o` option:
markdown2pdf -o book.pdf chap1 chap2
If no input file is specified, input will be taken from stdin.
All of `pandoc`'s options will work with `markdown2pdf` as well.
`markdown2pdf` assumes that `pdflatex` is in the path. It also
assumes that the following LaTeX packages are available:
`unicode`, `fancyhdr` (if you have verbatim text in footnotes),
`graphicx` (if you use images), `array` (if you use tables),
and `ulem` (if you use strikeout text). If they are not already
included in your LaTeX distribution, you can get them from
[CTAN]. A full [TeX Live] or [MacTeX] distribution will have all of
these packages.
2. `html2markdown` grabs a web page from a file or URL and converts
it to markdown-formatted text, using `tidy` and `pandoc`.
All of `pandoc`'s options will work with `html2markdown` as well.
@ -182,7 +195,7 @@ Windows under Cygwin.)
It uses [`iconv`] for character encoding conversions; if `iconv`
is absent, it will still work, but it will treat everything as UTF-8.
2. `hsmarkdown` is designed to be used as a drop-in replacement for
3. `hsmarkdown` is designed to be used as a drop-in replacement for
`Markdown.pl`. It forces `pandoc` to convert from markdown to
HTML, and to use the `--strict` flag for maximal compliance with
official markdown syntax. (All of Pandoc's syntax extensions and
@ -202,6 +215,8 @@ Windows under Cygwin.)
[HTML Tidy]: http://tidy.sourceforge.net/
[`iconv`]: http://www.gnu.org/software/libiconv/
[CTAN]: http://www.ctan.org "Comprehensive TeX Archive Network"
[TeX Live]: http://www.tug.org/texlive/
[MacTeX]: http://www.tug.org/mactex/
Command-line options
====================
@ -227,7 +242,7 @@ For further documentation, see the `pandoc(1)` man page.
`-o` or `--output` *filename*
: sends output to *filename*. If this option is not specified,
or if its argument is `-`, output will be sent to stdout.
(Exception: if the output format is `odt` or `pdf`, output to stdout
(Exception: if the output format is `odt`, output to stdout
is disabled.)
`-p` or `--preserve-tabs`

View file

@ -1,17 +1,9 @@
Notes to Debian users:
Notes to Debian users on "suggested" dependencies:
1. `markdown2pdf` has been removed, since pandoc now includes `pdf`
as a writer option. You can replace
If you intend to use the markdown2pdf script, you should install
texlive-latex-recommended (or, if you use teTeX, tetex-extra). This
provides LaTeX packages that are needed by markdown2pdf.
markdown2pdf foo.txt
with
pandoc foo.txt -o foo.pdf
Note that unlike `markdown2npdf`, `pandoc` requires that the output
filename be specified explicitly.
2. If you intend to use the html2markdown script, you should install
tidy, plus either wget or w3m.
If you intend to use the html2markdown script, you should install
tidy, plus either wget or w3m.

View file

@ -50,7 +50,7 @@ makeReferenceODT sources = do
-- | Build man pages from markdown sources in man/man1/.
makeManPages _ _ _ _ = do
mapM makeManPage ["pandoc.1", "hsmarkdown.1", "html2markdown.1"]
mapM makeManPage ["pandoc.1", "hsmarkdown.1", "html2markdown.1", "markdown2pdf.1"]
return ()
-- | Build a man page from markdown source in man/man1.

View file

@ -1,134 +0,0 @@
{-
Copyright (C) 2008 John MacFarlane <jgm@berkeley.edu>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-}
{- |
Module : Text.Pandoc.PDF
Copyright : Copyright (C) 2006-7 John MacFarlane
License : GNU GPL, version 2 or above
Maintainer : John MacFarlane <jgm@berkeley.edu>
Stability : alpha
Portability : portable
Functions for producing a PDF file from LaTeX.
-}
module Text.Pandoc.PDF ( saveLaTeXAsPDF ) where
import Data.List ( isInfixOf )
import System.Directory
import System.FilePath ( (</>), (<.>), takeBaseName )
import System.Process ( runProcess, waitForProcess )
import System.Exit
import System.Environment ( getEnvironment )
import Text.Pandoc.Shared ( withTempDir )
import Prelude hiding ( writeFile, readFile, putStrLn )
import System.IO ( stderr, openFile, IOMode (..), hClose )
import System.IO.UTF8
-- | Produce an PDF file from LaTeX.
saveLaTeXAsPDF :: FilePath -- ^ Pathname of PDF file to be produced.
-> FilePath -- ^ Relative directory of source file.
-> String -- ^ LaTeX document.
-> IO ()
saveLaTeXAsPDF destinationPDFPath sourceDirRelative latex = do
-- check for pdflatex and bibtex in path:
latexPathMaybe <- findExecutable "pdflatex"
bibtexPathMaybe <- findExecutable "bibtex"
let latexPath = case latexPathMaybe of
Nothing -> error $ "The 'pdflatex' command, which is needed to build a PDF file, was not found."
Just x -> x
let bibtexPath = case bibtexPathMaybe of
Nothing -> error $ "The 'bibtex' command, which is needed to build an PDF file, was not found."
Just x -> x
sourceDirAbsolute <- getCurrentDirectory >>= return . (</> sourceDirRelative) >>= canonicalizePath
withTempDir "pandoc-pdf" $ \tempDir -> do
env <- getEnvironment
let env' = ("TEXINPUTS", ".:" ++ sourceDirAbsolute ++ ":") : env
let baseName = "input"
writeFile (tempDir </> baseName <.> "tex") latex
let runLatex = runProgram latexPath ["-interaction=nonstopmode", baseName] tempDir env'
let runBibtex = runProgram bibtexPath [baseName] tempDir env'
messages1 <- runLatex
let logPath = tempDir </> baseName <.> "log"
tocExists <- doesFileExist (tempDir </> baseName <.> "toc")
logContents <- readFile logPath
let undefinedRefs = "There were undefined references" `isInfixOf` logContents
let needsBibtex = "itation" `isInfixOf` logContents
if needsBibtex
then runBibtex >>= hPutStr stderr . unlines
else return ()
if tocExists || undefinedRefs
then do
messages2 <- runLatex
logContents' <- readFile logPath
let stillUndefinedRefs = "There were undefined references" `isInfixOf` logContents'
if stillUndefinedRefs
then runLatex >>= hPutStr stderr . unlines
else hPutStr stderr $ unlines messages2
else
hPutStr stderr $ unlines messages1
let pdfPath = tempDir </> baseName <.> "pdf"
pdfExists <- doesFileExist pdfPath
if pdfExists
then copyFile pdfPath destinationPDFPath
else error "The PDF could not be created."
runProgram :: FilePath -- ^ pathname of executable
-> [String] -- ^ arguments
-> FilePath -- ^ working directory
-> [(String, String)] -- ^ environment
-> IO [String]
runProgram cmdPath arguments workingDir env = do
let runOutputPath = workingDir </> "output" <.> "tmp"
runOutput <- openFile runOutputPath WriteMode
ph <- runProcess cmdPath arguments (Just workingDir) (Just env) Nothing (Just runOutput) (Just runOutput)
ec <- waitForProcess ph -- requires compilation with -threaded
hClose runOutput
case ec of
ExitSuccess -> return []
_ -> do
output <- readFile runOutputPath
if (takeBaseName cmdPath) == "bibtex"
then return $! lines output
else do
return $!
(if "`ucs.sty' not found" `isInfixOf` output
then ["Please install the 'unicode' package from CTAN:",
" http://www.ctan.org/tex-archive/macros/latex/contrib/unicode/"]
else []) ++
(if "`ulem.sty' not found" `isInfixOf` output
then ["Please install the 'ulem' package from CTAN:",
" http://www.ctan.org/tex-archive/macros/latex/contrib/misc/"]
else []) ++
(if "`graphicx.sty' not found" `isInfixOf` output
then ["Please install the 'graphicx' package from CTAN:",
" http://www.ctan.org/tex-archive/macros/latex/required/graphics/"]
else []) ++
(if "`fancyhdr.sty' not found" `isInfixOf` output
then ["Please install the 'fancyhdr' package from CTAN:",
" http://www.ctan.org/tex-archive/macros/latex/contrib/fancyhdr/"]
else []) ++
(if "`array.sty' not found" `isInfixOf` output
then ["Please install the 'array' package from CTAN:",
" http://www.ctan.org/tex-archive/macros/latex/required/tools/"]
else []) ++
(filter isUseful $ lines output)
where isUseful ln = take 1 ln == "!" ||
take 2 ln == "l." ||
"Error" `isInfixOf` ln ||
"error" `isInfixOf` ln

12
debian/control vendored
View file

@ -18,7 +18,7 @@ Description: general markup converter
Pandoc is a Haskell library for converting from one markup format to
another, and a command-line tool that uses this library. It can read
markdown and (subsets of) reStructuredText, HTML, and LaTeX, and it
can write markdown, reStructuredText, HTML, LaTeX, ConTeXt, PDF,
can write markdown, reStructuredText, HTML, LaTeX, ConTeXt,
DocBook XML, OpenDocument XML, ODT, RTF, GNU Texinfo, MediaWiki markup,
groff man pages, and S5 HTML slide shows.
.
@ -26,7 +26,7 @@ Description: general markup converter
tables, definition lists, and other features. A compatibility mode is
provided for those who need a drop-in replacement for Markdown.pl.
Included wrapper scripts make it easy to convert markdown documents to
PDF or ODT format and to convert web pages to markdown documents.
PDF and to convert web pages to markdown documents.
.
In contrast to existing tools for converting markdown to HTML, which
use regex substitutions, pandoc has a modular design: it consists of a
@ -44,7 +44,7 @@ Description: general markup converter
Pandoc is a Haskell library for converting from one markup format to
another, and a command-line tool that uses this library. It can read
markdown and (subsets of) reStructuredText, HTML, and LaTeX, and it
can write markdown, reStructuredText, HTML, LaTeX, ConTeXt, PDF,
can write markdown, reStructuredText, HTML, LaTeX, ConTeXt,
DocBook XML, OpenDocument XML, ODT, RTF, GNU Texinfo, MediaWiki markup,
groff man pages, and S5 HTML slide shows.
.
@ -52,7 +52,7 @@ Description: general markup converter
tables, definition lists, and other features. A compatibility mode is
provided for those who need a drop-in replacement for Markdown.pl.
Included wrapper scripts make it easy to convert markdown documents to
PDF or ODT format and to convert web pages to markdown documents.
PDF and to convert web pages to markdown documents.
.
In contrast to existing tools for converting markdown to HTML, which
use regex substitutions, pandoc has a modular design: it consists of a
@ -70,7 +70,7 @@ Description: general markup converter
Pandoc is a Haskell library for converting from one markup format to
another, and a command-line tool that uses this library. It can read
markdown and (subsets of) reStructuredText, HTML, and LaTeX, and it
can write markdown, reStructuredText, HTML, LaTeX, ConTeXt, PDF,
can write markdown, reStructuredText, HTML, LaTeX, ConTeXt,
DocBook XML, OpenDocument XML, ODT, RTF, GNU Texinfo, MediaWiki markup,
groff man pages, and S5 HTML slide shows.
.
@ -78,7 +78,7 @@ Description: general markup converter
tables, definition lists, and other features. A compatibility mode is
provided for those who need a drop-in replacement for Markdown.pl.
Included wrapper scripts make it easy to convert markdown documents to
PDF or ODT format and to convert web pages to markdown documents.
PDF and to convert web pages to markdown documents.
.
In contrast to existing tools for converting markdown to HTML, which
use regex substitutions, pandoc has a modular design: it consists of a

2
debian/rules vendored
View file

@ -111,7 +111,7 @@ binary-arch: build install
dh_installexamples -a
dh_installman -a
dh_link -a
dh_strip -a -Xhtml2
dh_strip -a -Xhtml2 -Xhsmarkdown -Xmarkdown2
dh_compress -a
dh_fixperms -a
dh_installdeb -a

View file

@ -16,14 +16,14 @@ COMMENT= A general markup converter
BUILD_DEPENDS= ghc>=6.6:${PORTSDIR}/lang/ghc
MANCOMPRESSED= no
MAN1= pandoc.1 html2markdown.1 hsmarkdown.1
MAN1= pandoc.1 markdown2pdf.1 html2markdown.1 hsmarkdown.1
USE_GMAKE= yes
USE_PERL5= yes
PLIST_FILES= bin/pandoc bin/html2markdown bin/hsmarkdown
PLIST_FILES= bin/pandoc bin/markdown2pdf bin/html2markdown bin/hsmarkdown
PORTDOCS= BUGS README README.html
SCRIPTS= hsmarkdown html2markdown
SCRIPTS= markdown2pdf hsmarkdown html2markdown
do-install:
@${INSTALL_PROGRAM} ${WRKSRC}/dist/build/pandoc/pandoc ${PREFIX}/bin

View file

@ -1,14 +1,14 @@
Pandoc is a command-line tool for converting from one markup format
to another. It can read markdown and (subsets of) reStructuredText,
HTML, and LaTeX, and it can write markdown, reStructuredText, HTML,
LaTeX, ConTeXt, PDF, DocBook XML, OpenDocument XML, ODT, RTF, GNU
LaTeX, ConTeXt, DocBook XML, OpenDocument XML, ODT, RTF, GNU
Texinfo, MediaWiki markup, groff man pages, and S5 HTML slide shows.
Pandoc extends standard markdown syntax with footnotes, embedded LaTeX,
and other features. A compatibility mode is provided for those who
need a drop-in replacement for Markdown.pl. Included wrapper scripts
make it easy to convert markdown documents to PDF or ODT format and to
convert web pages to markdown documents.
make it easy to convert markdown documents to PDF and to convert web
pages to markdown documents.
In contrast to existing tools for converting markdown to HTML, which
use regex substitutions, pandoc has a modular design: it consists of a

View file

@ -11,7 +11,7 @@ long_description \
Pandoc is a command-line tool for converting from one markup format \
to another. It can read markdown and (subsets of) reStructuredText, \
HTML, and LaTeX, and it can write markdown, reStructuredText, HTML, \
LaTeX, ConTeXt, PDF, DocBook XML, OpenDocument XML, ODT, RTF, Texinfo, \
LaTeX, ConTeXt, DocBook XML, OpenDocument XML, ODT, RTF, Texinfo, \
MediaWiki markup, groff man, and S5 HTML slide shows.
homepage http://johnmacfarlane.net/pandoc/
@ -40,7 +40,7 @@ destroot {
xinstall -m 755 ${worksrcpath}/unregister.sh \
${destroot}${prefix}/libexec/${name}-${version}
# install shell scripts:
xinstall -m 755 -W ${worksrcpath} html2markdown hsmarkdown \
xinstall -m 755 -W ${worksrcpath} html2markdown hsmarkdown markdown2pdf \
${destroot}${prefix}/bin
# install data file:
xinstall -d ${destroot}${prefix}/share/${name}
@ -51,7 +51,7 @@ destroot {
xinstall -m 644 -W ${worksrcpath} README README.html COPYRIGHT BUGS \
${destroot}${prefix}/share/doc/${name}
xinstall -m 644 -W ${worksrcpath}/man/man1 pandoc.1 hsmarkdown.1 \
html2markdown.1 \
markdown2pdf.1 html2markdown.1 \
${destroot}${prefix}/share/man/man1
}

View file

@ -0,0 +1,69 @@
% MARKDOWN2PDF(1) Pandoc User Manuals
% John MacFarlane and Recai Oktas
% January 8, 2008
# NAME
markdown2pdf - converts markdown-formatted text to PDF, using pdflatex
# SYNOPSIS
markdown2pdf [*options*] [*input-file*]...
# DESCRIPTION
`markdown2pdf` converts *input-file* (or text from standard
input) from markdown-formatted plain text to PDF, using `pdflatex`.
If no output filename is specified (using the `-o` option),
the name of the output file is derived from the input file; thus, for
example, if the input file is *hello.txt*, the output file will be
*hello.pdf*. If the input is read from STDIN and no output filename
is specified, the output file will be named *stdin.pdf*. If multiple
input files are specified, they will be concatenated before conversion,
and the name of the output file will be derived from the first input file.
Input is assumed to be in the UTF-8 character encoding. If your
local character encoding is not UTF-8, you should pipe input
through `iconv`:
iconv -t utf-8 input.txt | markdown2pdf
`markdown2pdf` assumes that the `unicode`, `array`, `fancyvrb`,
`graphicx`, and `ulem` packages are in latex's search path. If these
packages are not included in your latex setup, they can be obtained from
<http://ctan.org>.
# OPTIONS
`markdown2pdf` is a wrapper around `pandoc`, so all of
`pandoc`'s options can be used with `markdown2pdf` as well.
See `pandoc`(1) for a complete list.
The following options are most relevant:
-o *FILE*, \--output=*FILE*
: Write output to *FILE*.
\--strict
: Use strict markdown syntax, with no extensions or variants.
-N, \--number-sections
: Number section headings in LaTeX output. (Default is not to number them.)
-H *FILE*, \--include-in-header=*FILE*
: Include (LaTeX) contents of *FILE* at the end of the header. Implies
`-s`.
-B *FILE*, \--include-before-body=*FILE*
: Include (LaTeX) contents of *FILE* at the beginning of the document body.
-A *FILE*, \--include-after-body=*FILE*
: Include (LaTeX) contents of *FILE* at the end of the document body.
-C *FILE*, \--custom-header=*FILE*
: Use contents of *FILE*
as the LaTeX document header (overriding the default header, which can be
printed using `pandoc -D latex`). Implies `-s`.
# SEE ALSO
`pandoc`(1), `pdflatex`(1)

View file

@ -197,7 +197,8 @@ to Pandoc. Or use `html2markdown`(1), a wrapper around `pandoc`.
# SEE ALSO
`hsmarkdown`(1),
`html2markdown`(1).
`html2markdown`(1),
`markdown2pdf` (1).
The *README* file distributed with Pandoc contains full documentation.
The Pandoc source code and all documentation may be downloaded from

140
markdown2pdf Executable file
View file

@ -0,0 +1,140 @@
#!/bin/sh -e
REQUIRED="pdflatex"
SYNOPSIS="converts markdown-formatted text to PDF, using pdflatex."
THIS=${0##*/}
NEWLINE='
'
err () { echo "$*" | fold -s -w ${COLUMNS:-110} >&2; }
errn () { printf "$*" | fold -s -w ${COLUMNS:-110} >&2; }
usage () {
err "$1 - $2" # short description
err "See the $1(1) man page for usage."
}
# Portable which(1).
pathfind () {
oldifs="$IFS"; IFS=':'
for _p in $PATH; do
if [ -x "$_p/$*" ] && [ -f "$_p/$*" ]; then
IFS="$oldifs"
return 0
fi
done
IFS="$oldifs"
return 1
}
for p in pandoc $REQUIRED; do
pathfind $p || {
err "You need '$p' to use this program!"
exit 1
}
done
CONF=$(pandoc --dump-args "$@" 2>&1) || {
errcode=$?
echo "$CONF" | sed -e '/^pandoc \[OPTIONS\] \[FILES\]/,$d' >&2
[ $errcode -eq 2 ] && usage "$THIS" "$SYNOPSIS"
exit $errcode
}
OUTPUT=$(echo "$CONF" | sed -ne '1p')
ARGS=$(echo "$CONF" | sed -e '1d')
# As a security measure refuse to proceed if mktemp is not available.
pathfind mktemp || { err "Couldn't find 'mktemp'; aborting."; exit 1; }
# Avoid issues with /tmp directory on Windows/Cygwin
cygwin=
cygwin=$(uname | sed -ne '/^CYGWIN/p')
if [ -n "$cygwin" ]; then
TMPDIR=.
export TMPDIR
fi
THIS_TEMPDIR=
THIS_TEMPDIR="$(mktemp -d -t $THIS.XXXXXXXX)" || exit 1
readonly THIS_TEMPDIR
trap 'exitcode=$?
[ -z "$THIS_TEMPDIR" ] || rm -rf "$THIS_TEMPDIR"
exit $exitcode' 0 1 2 3 13 15
texname=output
logfile=$THIS_TEMPDIR/log
pandoc -s -r markdown -w latex "$@" -o $THIS_TEMPDIR/$texname.tex
if [ "$OUTPUT" = "-" ]; then
firstinfile="$(echo $ARGS | sed -ne '1p')"
firstinfilebase="${firstinfile%.*}"
destname="${firstinfilebase:-stdin}.pdf"
else
destname="$OUTPUT"
fi
(
origdir=$(pwd)
cd $THIS_TEMPDIR
TEXINPUTS=$origdir:$TEXINPUTS:
export TEXINPUTS
finished=no
runs=0
while [ $finished = "no" ]; do
pdflatex -interaction=batchmode $texname.tex >/dev/null || {
errcode=$?
err "${THIS}: pdfLaTeX failed with error code $errcode"
[ -f $texname.log ] && {
err "${THIS}: error context:"
sed -ne '/^!/,/^[[:space:]]*$/p' \
-ne '/^[Ll]a[Tt]e[Xx] [Ww]arning/,/^[[:space:]]*$/p' \
-ne '/^[Ee]rror/,/^[[:space:]]*$/p' $texname.log >&2
if grep -q "File \`ucs.sty' not found" $texname.log; then
err "${THIS}: Please install the 'unicode' package from CTAN:"
err " http://www.ctan.org/tex-archive/macros/latex/contrib/unicode/"
fi
if grep -q "File \`ulem.sty' not found" $texname.log; then
err "${THIS}: Please install the 'ulem' package from CTAN:"
err " http://www.ctan.org/tex-archive/macros/latex/contrib/misc/ulem.sty"
fi
}
exit $errcode
}
if [ $runs -lt 3 ] &&
((grep -q "LaTeX Warning: There were undefined references." $texname.log) ||
(echo "$@" | grep -q -- "--toc\|--table-of-contents")); then
runs=$(($runs + 1))
if grep -q "LaTeX Warning:.*[Cc]itation" $texname.log; then
bibtex $texname 2>&1 >bibtex.err
if [ $runs -gt 2 ]; then
if grep -q "error message" bibtex.err ||
grep -q "Warning" bibtex.err; then
cat bibtex.err >&2
fi
fi
fi
else
finished=yes
fi
done
) || exit $?
is_target_exists=
if [ -f "$destname" ]; then
is_target_exists=1
mv "$destname" "$destname~"
fi
mv -f $THIS_TEMPDIR/$texname.pdf "$destname"
errn "Created $destname"
[ -z "$is_target_exists" ] || {
errn " (previous file has been backed up as $destname~)"
}
err .

View file

@ -18,7 +18,7 @@ Description: Pandoc is a Haskell library for converting from one markup
this library. It can read markdown and (subsets of)
reStructuredText, HTML, and LaTeX, and it can write
markdown, reStructuredText, HTML, LaTeX, ConTeXt, Docbook,
OpenDocument, ODT, PDF, RTF, MediaWiki, groff man pages, and
OpenDocument, ODT, RTF, MediaWiki, groff man pages, and
S5 HTML slide shows.
.
Pandoc extends standard markdown syntax with footnotes,
@ -159,7 +159,6 @@ Library
Text.Pandoc.CharacterReferences,
Text.Pandoc.Shared,
Text.Pandoc.ODT,
Text.Pandoc.PDF,
Text.Pandoc.LaTeXMathML,
Text.Pandoc.DefaultHeaders,
Text.Pandoc.Highlighting,

View file

@ -61,11 +61,11 @@ click on the name of the output file:
13. From markdown to PDF:
@ pandoc @@README@@ -o @@example13.pdf@@
@ markdown2pdf @@README@@ -o @@example13.pdf@@
14. PDF with numbered sections and a custom LaTeX header:
@ pandoc -N -C @@myheader.tex@@ @@README@@ -o @@example14.pdf@@
@ markdown2pdf -N -C @@myheader.tex@@ @@README@@ -o @@example14.pdf@@
[xmlto]: http://cyberelk.net/tim/xmlto/

View file

@ -34,6 +34,8 @@ Pandoc features
+ Compatibility mode to turn off syntax entensions and emulate
`Markdown.pl`.
- Convenient wrapper scripts:
+ `markdown2pdf` converts directly from markdown to PDF, using
`pdflatex`.
+ `html2markdown` makes it easy to produce a markdown version
of any web page.
+ `hsmarkdown` is a drop-in replacement for `Markdown.pl`.
@ -49,6 +51,7 @@ or [try pandoc on the web](/pandoc/try).
- [Demonstrations](examples.html)
- Man pages
- [`pandoc(1)`](pandoc.1.html)
- [`markdown2pdf(1)`](markdown2pdf.1.html)
- [`html2markdown(1)`](html2markdown.1.html)
- [`hsmarkdown(1)`](hsmarkdown.1.html)
- [Library documentation](doc/pandoc/index.html) (for Haskell programmers)