PDF: Only run latex twice if \tableofcontents is present.

Note:  This will pick up on \tableofcontents even if it's
in a verbatim environment.  But the worst that can happen is
that the document takes a bit longer to build.
This commit is contained in:
John MacFarlane 2012-02-07 22:00:22 -08:00
parent 328c91e307
commit 12aa83f70e

View file

@ -43,6 +43,7 @@ import System.IO (hClose)
import Control.Concurrent (putMVar, takeMVar, newEmptyMVar, forkIO) import Control.Concurrent (putMVar, takeMVar, newEmptyMVar, forkIO)
import Text.Pandoc.UTF8 as UTF8 import Text.Pandoc.UTF8 as UTF8
import Control.Monad (unless) import Control.Monad (unless)
import Data.List (isInfixOf)
tex2pdf :: String -- ^ tex program (pdflatex, lualatex, xelatex) tex2pdf :: String -- ^ tex program (pdflatex, lualatex, xelatex)
-> String -- ^ latex source -> String -- ^ latex source
@ -55,7 +56,9 @@ tex2pdf' :: FilePath -- ^ temp directory for output
-> String -- ^ tex source -> String -- ^ tex source
-> IO (Either ByteString ByteString) -> IO (Either ByteString ByteString)
tex2pdf' tmpDir program source = do tex2pdf' tmpDir program source = do
let numruns = 2 -- should suffice for toc and hyperrefs let numruns = if "\\tableofcontents" `isInfixOf` source
then 2
else 1
(exit, log', mbPdf) <- runTeXProgram program numruns tmpDir source (exit, log', mbPdf) <- runTeXProgram program numruns tmpDir source
let msg = "Error producing PDF from TeX source." let msg = "Error producing PDF from TeX source."
case (exit, mbPdf) of case (exit, mbPdf) of