git.iko.soy/typeable/pandoc
on master help sign in
LaTeX writer: Add unique labels to figures.

git-svn-id: https://pandoc.googlecode.com/svn/trunk@1895 788f1e2b-df1e-0410-8736-df70ead52e1b

commitbe344321227a33c9a3f3e2031b88045f5159d1ff authorfiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b> dateTue 16 Mar 2010, 06:45 (17 years ago) parent26b41ce
2 files changed+12−5
src/Text/Pandoc/Writers/LaTeX.hs+11−4 tests/writer.latex+1−1
src/Text/Pandoc/Writers/LaTeX.hs+11−4
@@ -40,6 +40,7 @@ import Text.PrettyPrint.HughesPJ hiding ( Str )
4040data WriterState =
4141 WriterState { stInNote :: Bool -- @True@ if we're in a note
4242 , stOLLevel :: Int -- level of ordered list nesting
43+ , stUsedIdents :: [String] -- identifiers used already
4344 , stOptions :: WriterOptions -- writer options, so they don't have to be parameter
4445 , stVerbInNote :: Bool -- true if document has verbatim text in note
4546 , stEnumerate :: Bool -- true if document needs fancy enumerated lists
@@ -56,8 +57,8 @@ data WriterState =
5657writeLaTeX :: WriterOptions -> Pandoc -> String
5758writeLaTeX options document =
5859 evalState (pandocToLaTeX options document) $
59− WriterState { stInNote = False, stOLLevel = 1, stOptions = options,
60− stVerbInNote = False, stEnumerate = False,
60+ WriterState { stInNote = False, stOLLevel = 1, stUsedIdents = [],
61+ stOptions = options, stVerbInNote = False, stEnumerate = False,
6162 stTable = False, stStrikeout = False, stSubscript = False,
6263 stUrl = False, stGraphics = False,
6364 stLHS = False, stBook = False }
@@ -133,8 +134,14 @@ blockToLaTeX (Plain lst) = do
133134blockToLaTeX (Para [Image txt (src,tit)]) = do
134135 capt <- inlineListToLaTeX txt
135136 img <- inlineToLaTeX (Image txt (src,tit))
136− return $ text "\\begin{figure}[htb]" $$ text "\\centering" $$ img $$
137− (text "\\caption{" <> capt <> char '}') $$ text "\\end{figure}\n"
137+ st <- get
138+ let usedIdents = stUsedIdents st
139+ let lab = uniqueIdent txt usedIdents
140+ put $ st{ stUsedIdents = lab : usedIdents }
141+ return $ text "\\begin{figure}[htb]" $$
142+ text "\\centering" $$ img $$
143+ (text "\\caption{" <> capt <> text ("}\\label{" ++ lab ++ "}")) $$
144+ text "\\end{figure}\n"
138145blockToLaTeX (Para lst) = do
139146 st <- get
140147 let opts = stOptions st
tests/writer.latex+1−1
@@ -812,7 +812,7 @@ From ``Voyage dans la Lune'' by Georges Melies (1902):
812812\begin{figure}[htb]
813813\centering
814814\includegraphics{lalune.jpg}
815−\caption{lalune}
815+\caption{lalune}\label{lalune}
816816\end{figure}
817817
818818Here is a movie \includegraphics{movie.jpg} icon.