@@ -36,10 +36,11 @@ import qualified Data.ByteString.Lazy.Char8 as BC
3636import qualified Data.ByteString as BS
3737import System.Exit (ExitCode (..))
3838import System.FilePath
39+import System.IO (stderr, stdout)
3940import System.Directory
4041import Data.Digest.Pure.SHA (showDigest, sha1)
4142import System.Environment
42−import Control.Monad (unless, (<=<))
43+import Control.Monad (unless, when, (<=<))
4344import qualified Control.Exception as E
4445import Control.Applicative ((<$))
4546import Data.List (isInfixOf)
@@ -70,7 +71,7 @@ makePDF :: String -- ^ pdf creator (pdflatex, lualatex, xelatex)
7071makePDF program writer opts doc = withTempDir "tex2pdf." $ \tmpdir -> do
7172 doc' <- handleImages opts tmpdir doc
7273 let source = writer opts doc'
73− tex2pdf' tmpdir program source
74+ tex2pdf' (writerVerbose opts) tmpdir program source
7475
7576handleImages :: WriterOptions
7677 -> FilePath -- ^ temp dir to store images
@@ -130,15 +131,16 @@ convertImage tmpdir fname =
130131 mime = getMimeType fname
131132 doNothing = return (Right fname)
132133
133−tex2pdf' :: FilePath -- ^ temp directory for output
134+tex2pdf' :: Bool -- ^ Verbose output
135+ -> FilePath -- ^ temp directory for output
134136 -> String -- ^ tex program
135137 -> String -- ^ tex source
136138 -> IO (Either ByteString ByteString)
137−tex2pdf' tmpDir program source = do
139+tex2pdf' verbose tmpDir program source = do
138140 let numruns = if "\\tableofcontents" `isInfixOf` source
139141 then 3 -- to get page numbers
140142 else 2 -- 1 run won't give you PDF bookmarks
141− (exit, log', mbPdf) <- runTeXProgram program numruns tmpDir source
143+ (exit, log', mbPdf) <- runTeXProgram verbose program 1 numruns tmpDir source
142144 case (exit, mbPdf) of
143145 (ExitFailure _, _) -> do
144146 let logmsg = extractMsg log'
@@ -170,9 +172,9 @@ extractMsg log' = do
170172-- Run a TeX program on an input bytestring and return (exit code,
171173-- contents of stdout, contents of produced PDF if any). Rerun
172174-- a fixed number of times to resolve references.
173−runTeXProgram :: String -> Int -> FilePath -> String
175+runTeXProgram :: Bool -> String -> Int -> Int -> FilePath -> String
174176 -> IO (ExitCode, ByteString, Maybe ByteString)
175−runTeXProgram program runsLeft tmpDir source = do
177+runTeXProgram verbose program runNumber numRuns tmpDir source = do
176178 let file = tmpDir </> "input.tex"
177179 exists <- doesFileExist file
178180 unless exists $ UTF8.writeFile file source
@@ -192,9 +194,24 @@ runTeXProgram program runsLeft tmpDir source = do
192194 $ lookup "TEXINPUTS" env'
193195 let env'' = ("TEXINPUTS", texinputs) :
194196 [(k,v) | (k,v) <- env', k /= "TEXINPUTS"]
197+ when (verbose && runNumber == 1) $ do
198+ putStrLn $ "[makePDF] Command line:"
199+ putStrLn $ program ++ " " ++ unwords (map show programArgs)
200+ putStr "\n"
201+ putStrLn $ "[makePDF] Environment:"
202+ mapM_ print env''
203+ putStr "\n"
204+ putStrLn $ "[makePDF] Contents of " ++ file' ++ ":"
205+ B.readFile file' >>= B.putStr
206+ putStr "\n"
195207 (exit, out, err) <- pipeProcess (Just env'') program programArgs BL.empty
196− if runsLeft > 1
197− then runTeXProgram program (runsLeft - 1) tmpDir source
208+ when verbose $ do
209+ putStrLn $ "[makePDF] Run #" ++ show runNumber
210+ B.hPutStr stdout out
211+ B.hPutStr stderr err
212+ putStr "\n"
213+ if runNumber <= numRuns
214+ then runTeXProgram verbose program (runNumber + 1) numRuns tmpDir source
198215 else do
199216 let pdfFile = replaceDirectory (replaceExtension file ".pdf") tmpDir
200217 pdfExists <- doesFileExist pdfFile