git.iko.soy/typeable/pandoc
on master help sign in
Fix issue #969, #1779 by providing --latex-engine-opt
commitad9e4cde9d2f3c4014092749651558529c4f2cb3 authorSumit Sahrawat <sumit.sahrawat.apm13@itbhu.ac.in> dateWed 4 Mar 2015, 15:25 (12 years ago) parent7407b83
4 files changed+29−8
README+5 pandoc.hs+13−1 src/Text/Pandoc/Options.hs+2 src/Text/Pandoc/PDF.hs+9−7
README+5
@@ -655,6 +655,11 @@ Options affecting specific writers
655655 The default is `pdflatex`. If the engine is not in your PATH,
656656 the full path of the engine may be specified here.
657657
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+
658663Citation rendering
659664------------------
660665
pandoc.hs+13−1
@@ -198,6 +198,7 @@ data Opt = Opt
198198 , optCiteMethod :: CiteMethod -- ^ Method to output cites
199199 , optListings :: Bool -- ^ Use listings package for code blocks
200200 , optLaTeXEngine :: String -- ^ Program to use for latex -> pdf
201+ , optLaTeXEngineArgs :: [String] -- ^ Flags to pass to the latex-engine
201202 , optSlideLevel :: Maybe Int -- ^ Header level that creates slides
202203 , optSetextHeaders :: Bool -- ^ Use atx headers for markdown level 1-2
203204 , optAscii :: Bool -- ^ Use ascii characters only in html
@@ -259,6 +260,7 @@ defaultOpts = Opt
259260 , optCiteMethod = Citeproc
260261 , optListings = False
261262 , optLaTeXEngine = "pdflatex"
263+ , optLaTeXEngineArgs = []
262264 , optSlideLevel = Nothing
263265 , optSetextHeaders = True
264266 , optAscii = False
@@ -734,6 +736,14 @@ options =
734736 "PROGRAM")
735737 "" -- "Name of latex program to use in generating PDF"
736738
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+
737747 , Option "" ["bibliography"]
738748 (ReqArg
739749 (\arg opt -> return opt{ optMetadata = addMetadata
@@ -1080,6 +1090,7 @@ main = do
10801090 , optCiteMethod = citeMethod
10811091 , optListings = listings
10821092 , optLaTeXEngine = latexEngine
1093+ , optLaTeXEngineArgs = latexEngineArgs
10831094 , optSlideLevel = slideLevel
10841095 , optSetextHeaders = setextHeaders
10851096 , optAscii = ascii
@@ -1312,7 +1323,8 @@ main = do
13121323 writerReferenceODT = referenceODT,
13131324 writerReferenceDocx = referenceDocx,
13141325 writerMediaBag = media,
1315− writerVerbose = verbose
1326+ writerVerbose = verbose,
1327+ writerLaTeXArgs = latexEngineArgs
13161328 }
13171329
13181330
src/Text/Pandoc/Options.hs+2
@@ -324,6 +324,7 @@ data WriterOptions = WriterOptions
324324 , writerReferenceDocx :: Maybe FilePath -- ^ Path to reference DOCX if specified
325325 , writerMediaBag :: MediaBag -- ^ Media collected by docx or epub reader
326326 , writerVerbose :: Bool -- ^ Verbose debugging output
327+ , writerLaTeXArgs :: [String] -- ^ Flags to pass to latex-engine
327328 } deriving Show
328329
329330instance Default WriterOptions where
@@ -368,6 +369,7 @@ instance Default WriterOptions where
368369 , writerReferenceDocx = Nothing
369370 , writerMediaBag = mempty
370371 , writerVerbose = False
372+ , writerLaTeXArgs = []
371373 }
372374
373375-- | 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)
7171makePDF program writer opts doc = withTempDir "tex2pdf." $ \tmpdir -> do
7272 doc' <- handleImages opts tmpdir doc
7373 let source = writer opts doc'
74− tex2pdf' (writerVerbose opts) tmpdir program source
74+ args = writerLaTeXArgs opts
75+ tex2pdf' (writerVerbose opts) args tmpdir program source
7576
7677handleImages :: WriterOptions
7778 -> FilePath -- ^ temp dir to store images
@@ -132,15 +133,16 @@ convertImage tmpdir fname =
132133 doNothing = return (Right fname)
133134
134135tex2pdf' :: Bool -- ^ Verbose output
136+ -> [String] -- ^ Arguments to the latex-engine
135137 -> FilePath -- ^ temp directory for output
136138 -> String -- ^ tex program
137139 -> String -- ^ tex source
138140 -> IO (Either ByteString ByteString)
139−tex2pdf' verbose tmpDir program source = do
141+tex2pdf' verbose args tmpDir program source = do
140142 let numruns = if "\\tableofcontents" `isInfixOf` source
141143 then 3 -- to get page numbers
142144 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
144146 case (exit, mbPdf) of
145147 (ExitFailure _, _) -> do
146148 let logmsg = extractMsg log'
@@ -173,9 +175,9 @@ extractMsg log' = do
173175-- Run a TeX program on an input bytestring and return (exit code,
174176-- contents of stdout, contents of produced PDF if any). Rerun
175177-- 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
177179 -> IO (ExitCode, ByteString, Maybe ByteString)
178−runTeXProgram verbose program runNumber numRuns tmpDir source = do
180+runTeXProgram verbose program args runNumber numRuns tmpDir source = do
179181 let file = tmpDir </> "input.tex"
180182 exists <- doesFileExist file
181183 unless exists $ UTF8.writeFile file source
@@ -188,7 +190,7 @@ runTeXProgram verbose program runNumber numRuns tmpDir source = do
188190 let file' = file
189191#endif
190192 let programArgs = ["-halt-on-error", "-interaction", "nonstopmode",
191− "-output-directory", tmpDir', file']
193+ "-output-directory", tmpDir', file'] ++ args
192194 env' <- getEnvironment
193195 let sep = searchPathSeparator:[]
194196 let texinputs = maybe (tmpDir' ++ sep) ((tmpDir' ++ sep) ++)
@@ -212,7 +214,7 @@ runTeXProgram verbose program runNumber numRuns tmpDir source = do
212214 B.hPutStr stderr err
213215 putStr "\n"
214216 if runNumber <= numRuns
215− then runTeXProgram verbose program (runNumber + 1) numRuns tmpDir source
217+ then runTeXProgram verbose program args (runNumber + 1) numRuns tmpDir source
216218 else do
217219 let pdfFile = replaceDirectory (replaceExtension file ".pdf") tmpDir
218220 pdfExists <- doesFileExist pdfFile