git.iko.soy/typeable/pandoc
on master help sign in
Merge pull request #1988 from sumitsahrawat/issue-969
4d52269John MacFarlane
@@ -655,6 +655,11 @@ Options affecting specific writers
655 The default is `pdflatex`. If the engine is not in your PATH,
655 The default is `pdflatex`. If the engine is not in your PATH,
656 the full path of the engine may be specified here.
656 the full path of the engine may be specified here.
657
657
658+`--latex-engine-opt=`*STRING*
659+: Use the given string as a command-line argument to the `latex-engine`.
660+ If used multiple times, the arguments are provided with spaces between
661+ them. Note that no check for duplicate options is done.
662+
658Citation rendering
663Citation rendering
659------------------
664------------------
660
665
pandoc.hs+13−1
@@ -198,6 +198,7 @@ data Opt = Opt
198 , optCiteMethod :: CiteMethod -- ^ Method to output cites
198 , optCiteMethod :: CiteMethod -- ^ Method to output cites
199 , optListings :: Bool -- ^ Use listings package for code blocks
199 , optListings :: Bool -- ^ Use listings package for code blocks
200 , optLaTeXEngine :: String -- ^ Program to use for latex -> pdf
200 , optLaTeXEngine :: String -- ^ Program to use for latex -> pdf
201+ , optLaTeXEngineArgs :: [String] -- ^ Flags to pass to the latex-engine
201 , optSlideLevel :: Maybe Int -- ^ Header level that creates slides
202 , optSlideLevel :: Maybe Int -- ^ Header level that creates slides
202 , optSetextHeaders :: Bool -- ^ Use atx headers for markdown level 1-2
203 , optSetextHeaders :: Bool -- ^ Use atx headers for markdown level 1-2
203 , optAscii :: Bool -- ^ Use ascii characters only in html
204 , optAscii :: Bool -- ^ Use ascii characters only in html
@@ -259,6 +260,7 @@ defaultOpts = Opt
259 , optCiteMethod = Citeproc
260 , optCiteMethod = Citeproc
260 , optListings = False
261 , optListings = False
261 , optLaTeXEngine = "pdflatex"
262 , optLaTeXEngine = "pdflatex"
263+ , optLaTeXEngineArgs = []
262 , optSlideLevel = Nothing
264 , optSlideLevel = Nothing
263 , optSetextHeaders = True
265 , optSetextHeaders = True
264 , optAscii = False
266 , optAscii = False
@@ -734,6 +736,14 @@ options =
734 "PROGRAM")
736 "PROGRAM")
735 "" -- "Name of latex program to use in generating PDF"
737 "" -- "Name of latex program to use in generating PDF"
736
738
739+ , Option "" ["latex-engine-opt"]
740+ (ReqArg
741+ (\arg opt -> do
742+ let oldArgs = optLaTeXEngineArgs opt
743+ return opt { optLaTeXEngineArgs = arg : oldArgs })
744+ "STRING")
745+ "" -- "Flags to pass to the LaTeX engine, all instances of this option are accumulated and used"
746+
737 , Option "" ["bibliography"]
747 , Option "" ["bibliography"]
738 (ReqArg
748 (ReqArg
739 (\arg opt -> return opt{ optMetadata = addMetadata
749 (\arg opt -> return opt{ optMetadata = addMetadata
@@ -1080,6 +1090,7 @@ main = do
1080 , optCiteMethod = citeMethod
1090 , optCiteMethod = citeMethod
1081 , optListings = listings
1091 , optListings = listings
1082 , optLaTeXEngine = latexEngine
1092 , optLaTeXEngine = latexEngine
1093+ , optLaTeXEngineArgs = latexEngineArgs
1083 , optSlideLevel = slideLevel
1094 , optSlideLevel = slideLevel
1084 , optSetextHeaders = setextHeaders
1095 , optSetextHeaders = setextHeaders
1085 , optAscii = ascii
1096 , optAscii = ascii
@@ -1312,7 +1323,8 @@ main = do
1312 writerReferenceODT = referenceODT,
1323 writerReferenceODT = referenceODT,
1313 writerReferenceDocx = referenceDocx,
1324 writerReferenceDocx = referenceDocx,
1314 writerMediaBag = media,
1325 writerMediaBag = media,
1315− writerVerbose = verbose
1326+ writerVerbose = verbose,
1327+ writerLaTeXArgs = latexEngineArgs
1316 }
1328 }
1317
1329
1318
1330
src/Text/Pandoc/Options.hs+2
@@ -324,6 +324,7 @@ data WriterOptions = WriterOptions
324 , writerReferenceDocx :: Maybe FilePath -- ^ Path to reference DOCX if specified
324 , writerReferenceDocx :: Maybe FilePath -- ^ Path to reference DOCX if specified
325 , writerMediaBag :: MediaBag -- ^ Media collected by docx or epub reader
325 , writerMediaBag :: MediaBag -- ^ Media collected by docx or epub reader
326 , writerVerbose :: Bool -- ^ Verbose debugging output
326 , writerVerbose :: Bool -- ^ Verbose debugging output
327+ , writerLaTeXArgs :: [String] -- ^ Flags to pass to latex-engine
327 } deriving Show
328 } deriving Show
328
329
329instance Default WriterOptions where
330instance Default WriterOptions where
@@ -368,6 +369,7 @@ instance Default WriterOptions where
368 , writerReferenceDocx = Nothing
369 , writerReferenceDocx = Nothing
369 , writerMediaBag = mempty
370 , writerMediaBag = mempty
370 , writerVerbose = False
371 , writerVerbose = False
372+ , writerLaTeXArgs = []
371 }
373 }
372
374
373-- | Returns True if the given extension is enabled.
375-- | Returns True if the given extension is enabled.
src/Text/Pandoc/PDF.hs+9−7
@@ -71,7 +71,8 @@ makePDF :: String -- ^ pdf creator (pdflatex, lualatex, xelatex)
71makePDF program writer opts doc = withTempDir "tex2pdf." $ \tmpdir -> do
71makePDF program writer opts doc = withTempDir "tex2pdf." $ \tmpdir -> do
72 doc' <- handleImages opts tmpdir doc
72 doc' <- handleImages opts tmpdir doc
73 let source = writer opts doc'
73 let source = writer opts doc'
74+ args = writerLaTeXArgs opts
74− tex2pdf' (writerVerbose opts) tmpdir program source
75+ tex2pdf' (writerVerbose opts) args tmpdir program source
75
76
76handleImages :: WriterOptions
77handleImages :: WriterOptions
77 -> FilePath -- ^ temp dir to store images
78 -> FilePath -- ^ temp dir to store images
@@ -132,15 +133,16 @@ convertImage tmpdir fname =
132 doNothing = return (Right fname)
133 doNothing = return (Right fname)
133
134
134tex2pdf' :: Bool -- ^ Verbose output
135tex2pdf' :: Bool -- ^ Verbose output
136+ -> [String] -- ^ Arguments to the latex-engine
135 -> FilePath -- ^ temp directory for output
137 -> FilePath -- ^ temp directory for output
136 -> String -- ^ tex program
138 -> String -- ^ tex program
137 -> String -- ^ tex source
139 -> String -- ^ tex source
138 -> IO (Either ByteString ByteString)
140 -> IO (Either ByteString ByteString)
139−tex2pdf' verbose tmpDir program source = do
141+tex2pdf' verbose args tmpDir program source = do
140 let numruns = if "\\tableofcontents" `isInfixOf` source
142 let numruns = if "\\tableofcontents" `isInfixOf` source
141 then 3 -- to get page numbers
143 then 3 -- to get page numbers
142 else 2 -- 1 run won't give you PDF bookmarks
144 else 2 -- 1 run won't give you PDF bookmarks
143− (exit, log', mbPdf) <- runTeXProgram verbose program 1 numruns tmpDir source
145+ (exit, log', mbPdf) <- runTeXProgram verbose program args 1 numruns tmpDir source
144 case (exit, mbPdf) of
146 case (exit, mbPdf) of
145 (ExitFailure _, _) -> do
147 (ExitFailure _, _) -> do
146 let logmsg = extractMsg log'
148 let logmsg = extractMsg log'
@@ -173,9 +175,9 @@ extractMsg log' = do
173-- Run a TeX program on an input bytestring and return (exit code,
175-- Run a TeX program on an input bytestring and return (exit code,
174-- contents of stdout, contents of produced PDF if any). Rerun
176-- contents of stdout, contents of produced PDF if any). Rerun
175-- a fixed number of times to resolve references.
177-- a fixed number of times to resolve references.
176−runTeXProgram :: Bool -> String -> Int -> Int -> FilePath -> String
178+runTeXProgram :: Bool -> String -> [String] -> Int -> Int -> FilePath -> String
177 -> IO (ExitCode, ByteString, Maybe ByteString)
179 -> IO (ExitCode, ByteString, Maybe ByteString)
178−runTeXProgram verbose program runNumber numRuns tmpDir source = do
180+runTeXProgram verbose program args runNumber numRuns tmpDir source = do
179 let file = tmpDir </> "input.tex"
181 let file = tmpDir </> "input.tex"
180 exists <- doesFileExist file
182 exists <- doesFileExist file
181 unless exists $ UTF8.writeFile file source
183 unless exists $ UTF8.writeFile file source
@@ -188,7 +190,7 @@ runTeXProgram verbose program runNumber numRuns tmpDir source = do
188 let file' = file
190 let file' = file
189#endif
191#endif
190 let programArgs = ["-halt-on-error", "-interaction", "nonstopmode",
192 let programArgs = ["-halt-on-error", "-interaction", "nonstopmode",
191− "-output-directory", tmpDir', file']
193+ "-output-directory", tmpDir', file'] ++ args
192 env' <- getEnvironment
194 env' <- getEnvironment
193 let sep = searchPathSeparator:[]
195 let sep = searchPathSeparator:[]
194 let texinputs = maybe (tmpDir' ++ sep) ((tmpDir' ++ sep) ++)
196 let texinputs = maybe (tmpDir' ++ sep) ((tmpDir' ++ sep) ++)
@@ -212,7 +214,7 @@ runTeXProgram verbose program runNumber numRuns tmpDir source = do
212 B.hPutStr stderr err
214 B.hPutStr stderr err
213 putStr "\n"
215 putStr "\n"
214 if runNumber <= numRuns
216 if runNumber <= numRuns
215− then runTeXProgram verbose program (runNumber + 1) numRuns tmpDir source
217+ then runTeXProgram verbose program args (runNumber + 1) numRuns tmpDir source
216 else do
218 else do
217 let pdfFile = replaceDirectory (replaceExtension file ".pdf") tmpDir
219 let pdfFile = replaceDirectory (replaceExtension file ".pdf") tmpDir
218 pdfExists <- doesFileExist pdfFile
220 pdfExists <- doesFileExist pdfFile