summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b>2009-12-31 01:18:06 +0000
committerfiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b>2009-12-31 01:18:06 +0000
commitffed5c1cc310c4c377a73294514f5ac0cc682301 (patch)
treee3ad53e24b1cae0389bdee6a86101adc00bff823
parentb86710983045ada1fb1baaaeb0041679b555c4de (diff)
Added --xetex option to pandoc and markdown2pdf.
If --xetex is specified, pandoc produces latex suitable for processing by xelatex, and markdown2pdf uses xelatex to create the PDF. Resolves Issue #185. This seems better than using latex packages to detect xetex, since not all latex installations will have these. git-svn-id: https://pandoc.googlecode.com/svn/trunk@1737 788f1e2b-df1e-0410-8736-df70ead52e1b
-rw-r--r--README3
-rw-r--r--man/man1/markdown2pdf.1.md3
-rw-r--r--man/man1/pandoc.1.md3
-rwxr-xr-xmarkdown2pdf12
-rw-r--r--src/Text/Pandoc/Shared.hs2
-rw-r--r--src/markdown2pdf.hs30
-rw-r--r--src/pandoc.hs9
-rw-r--r--templates/latex.template13
8 files changed, 51 insertions, 24 deletions
diff --git a/README b/README
index 938ee3fe1..ce5e0c15a 100644
--- a/README
+++ b/README
@@ -380,6 +380,9 @@ For further documentation, see the `pandoc(1)` man page.
default (one item at a time). The normal default is for lists to be
displayed all at once.
+`--xetex`
+: creates LaTeX outut suitable for processing by XeTeX.
+
`-N` or `--number-sections`
: causes sections to be numbered in LaTeX, ConTeXt, or HTML output.
By default, sections are not numbered.
diff --git a/man/man1/markdown2pdf.1.md b/man/man1/markdown2pdf.1.md
index a16626338..9e5ee3f79 100644
--- a/man/man1/markdown2pdf.1.md
+++ b/man/man1/markdown2pdf.1.md
@@ -46,6 +46,9 @@ The following options are most relevant:
\--strict
: Use strict markdown syntax, with no extensions or variants.
+\--xetex
+: Use xelatex instead of pdflatex to create the PDF.
+
-N, \--number-sections
: Number section headings in LaTeX output. (Default is not to number them.)
diff --git a/man/man1/pandoc.1.md b/man/man1/pandoc.1.md
index dad9eb9d3..57bb3e17a 100644
--- a/man/man1/pandoc.1.md
+++ b/man/man1/pandoc.1.md
@@ -133,6 +133,9 @@ to Pandoc. Or use `html2markdown`(1), a wrapper around `pandoc`.
-i, \--incremental
: Make list items in S5 display incrementally (one by one).
+\--xetex
+: Create LaTeX outut suitable for processing by XeTeX.
+
-N, \--number-sections
: Number section headings in LaTeX, ConTeXt, or HTML output.
(Default is not to number them.)
diff --git a/markdown2pdf b/markdown2pdf
index faeafc174..4e85a371d 100755
--- a/markdown2pdf
+++ b/markdown2pdf
@@ -1,6 +1,11 @@
#!/bin/sh -e
-REQUIRED="pdflatex"
+latexprogram=pdflatex
+if (echo "$@" | grep -q xetex); then
+ latexprogram=xelatex
+fi
+
+REQUIRED=$latexprogram
SYNOPSIS="converts markdown-formatted text to PDF, using pdflatex."
THIS=${0##*/}
@@ -46,7 +51,6 @@ CONF=$(pandoc --dump-args "$@" 2>&1) || {
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; }
@@ -87,9 +91,9 @@ fi
finished=no
runs=0
while [ $finished = "no" ]; do
- pdflatex -interaction=batchmode $texname.tex >/dev/null || {
+ $latexprogram -interaction=batchmode $texname.tex >/dev/null || {
errcode=$?
- err "${THIS}: pdfLaTeX failed with error code $errcode"
+ err "${THIS}: $latexprogram failed with error code $errcode"
[ -f $texname.log ] && {
err "${THIS}: error context:"
sed -ne '/^!/,/^[[:space:]]*$/p' \
diff --git a/src/Text/Pandoc/Shared.hs b/src/Text/Pandoc/Shared.hs
index dbb5d94a4..241de4399 100644
--- a/src/Text/Pandoc/Shared.hs
+++ b/src/Text/Pandoc/Shared.hs
@@ -989,6 +989,7 @@ data WriterOptions = WriterOptions
, writerTabStop :: Int -- ^ Tabstop for conversion btw spaces and tabs
, writerTableOfContents :: Bool -- ^ Include table of contents
, writerS5 :: Bool -- ^ We're writing S5
+ , writerXeTeX :: Bool -- ^ Create latex suitable for use by xetex
, writerHTMLMathMethod :: HTMLMathMethod -- ^ How to print math in HTML
, writerIgnoreNotes :: Bool -- ^ Ignore footnotes (used in making toc)
, writerIncremental :: Bool -- ^ Incremental S5 lists
@@ -1012,6 +1013,7 @@ defaultWriterOptions =
, writerTabStop = 4
, writerTableOfContents = False
, writerS5 = False
+ , writerXeTeX = True
, writerHTMLMathMethod = PlainMath
, writerIgnoreNotes = False
, writerIncremental = False
diff --git a/src/markdown2pdf.hs b/src/markdown2pdf.hs
index ea580da98..5b56194cd 100644
--- a/src/markdown2pdf.hs
+++ b/src/markdown2pdf.hs
@@ -44,10 +44,10 @@ runPandoc inputs output = do
++ inputs ++ ["-o", texFile]
return $ either Left (const $ Right texFile) result
-runLatexRaw :: FilePath -> IO (Either (Either String String) FilePath)
-runLatexRaw file = do
+runLatexRaw :: String -> FilePath -> IO (Either (Either String String) FilePath)
+runLatexRaw latexProgram file = do
-- we ignore the ExitCode because pdflatex always fails the first time
- run "pdflatex" ["-interaction=batchmode", "-output-directory",
+ run latexProgram ["-interaction=batchmode", "-output-directory",
takeDirectory file, dropExtension file] >> return ()
let pdfFile = replaceExtension file "pdf"
let logFile = replaceExtension file "log"
@@ -61,11 +61,11 @@ runLatexRaw file = do
(False, _ , True, msg) -> return $ Left $ Right msg -- references
(False, False, False, _ ) -> return $ Right pdfFile -- success
-runLatex :: FilePath -> IO (Either String FilePath)
-runLatex file = step 3
+runLatex :: String -> FilePath -> IO (Either String FilePath)
+runLatex latexProgram file = step 3
where
step n = do
- result <- runLatexRaw file
+ result <- runLatexRaw latexProgram file
case result of
Left (Left err) -> return $ Left err
Left (Right _) | n > 1 -> step (n-1 :: Int)
@@ -145,17 +145,12 @@ main = bracket
-- run computation
$ \tmp -> do
- -- check for executable files
- let execs = ["pandoc", "pdflatex", "bibtex"]
- paths <- mapM findExecutable execs
- let miss = map snd $ filter (isNothing . fst) $ zip paths execs
- unless (null miss) $ exit $! "Could not find " ++ intercalate ", " miss
args <- getArgs
-- check for invalid arguments and print help message if needed
let goodopts = ["-f","-r","-N", "-p","-R","-H","-B","-A", "-C","-o","-V"]
let goodoptslong = ["--from","--read","--strict",
"--preserve-tabs","--tab-stop","--parse-raw",
- "--toc","--table-of-contents",
+ "--toc","--table-of-contents", "--xetex",
"--number-sections","--include-in-header",
"--include-before-body","--include-after-body",
"--custom-header","--output",
@@ -173,6 +168,15 @@ main = bracket
filter (\l -> any (`isInfixOf` l) goodoptslong) $ lines out
exitWith code
+ -- check for executable files
+ let latexProgram = if "--xetex" `elem` opts
+ then "xelatex"
+ else "pdflatex"
+ let execs = ["pandoc", latexProgram, "bibtex"]
+ paths <- mapM findExecutable execs
+ let miss = map snd $ filter (isNothing . fst) $ zip paths execs
+ unless (null miss) $ exit $! "Could not find " ++ intercalate ", " miss
+
-- parse arguments
-- if no input given, use 'stdin'
pandocArgs <- parsePandocArgs args
@@ -191,7 +195,7 @@ main = bracket
Left err -> exit err
Right texFile -> do
-- run pdflatex
- latexRes <- runLatex texFile
+ latexRes <- runLatex latexProgram texFile
case latexRes of
Left err -> exit err
Right pdfFile -> do
diff --git a/src/pandoc.hs b/src/pandoc.hs
index 7ddb41b00..b73527462 100644
--- a/src/pandoc.hs
+++ b/src/pandoc.hs
@@ -144,6 +144,7 @@ data Opt = Opt
, optOutputFile :: String -- ^ Name of output file
, optNumberSections :: Bool -- ^ Number sections in LaTeX
, optIncremental :: Bool -- ^ Use incremental lists in S5
+ , optXeTeX :: Bool -- ^ Format latex for xetex
, optSmart :: Bool -- ^ Use smart typography
, optHTMLMathMethod :: HTMLMathMethod -- ^ Method to print HTML math
, optDumpArgs :: Bool -- ^ Output command-line arguments
@@ -180,6 +181,7 @@ defaultOpts = Opt
, optOutputFile = "-" -- "-" means stdout
, optNumberSections = False
, optIncremental = False
+ , optXeTeX = False
, optSmart = False
, optHTMLMathMethod = PlainMath
, optDumpArgs = False
@@ -287,6 +289,11 @@ options =
(\opt -> return opt { optIncremental = True }))
"" -- "Make list items display incrementally in S5"
+ , Option "" ["xetex"]
+ (NoArg
+ (\opt -> return opt { optXeTeX = True }))
+ "" -- "Format latex for processing by XeTeX"
+
, Option "N" ["number-sections"]
(NoArg
(\opt -> return opt { optNumberSections = True }))
@@ -568,6 +575,7 @@ main = do
, optOutputFile = outputFile
, optNumberSections = numberSections
, optIncremental = incremental
+ , optXeTeX = xetex
, optSmart = smart
, optHTMLMathMethod = mathMethod
, optDumpArgs = dumpArgs
@@ -665,6 +673,7 @@ main = do
writerName' /= "s5",
writerHTMLMathMethod = mathMethod,
writerS5 = (writerName' == "s5"),
+ writerXeTeX = xetex,
writerIgnoreNotes = False,
writerIncremental = incremental,
writerNumberSections = numberSections,
diff --git a/templates/latex.template b/templates/latex.template
index 80f34857d..121537ef5 100644
--- a/templates/latex.template
+++ b/templates/latex.template
@@ -2,14 +2,13 @@ $if(legacy-header)$
$legacy-header$
$else$
\documentclass{article}
-\usepackage{ifpdf,ifxetex}
-\ifxetex
- \usepackage{fontspec,xltxtra,xunicode}
-\else
- \usepackage[utf8x]{inputenc}
- \usepackage[mathletters]{ucs}
-\fi
\usepackage{amsmath}
+$if(xetex)$
+\usepackage{fontspec,xltxtra,xunicode}
+$else$
+\usepackage[mathletters]{ucs}
+\usepackage[utf8x]{inputenc}
+$endif$
\usepackage{listings}
\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{}
\setlength{\parindent}{0pt}