git.iko.soy/typeable/pandoc
on master help sign in
Merge pull request #2042 from lierdakil/issue1866
9a79538John MacFarlane
src/Text/Pandoc/Readers/LaTeX.hs+13−3
@@ -239,17 +239,28 @@ block = (mempty <$ comment)
239blocks :: LP Blocks
239blocks :: LP Blocks
240blocks = mconcat <$> many block
240blocks = mconcat <$> many block
241
241
242+getRawCommand :: String -> LP String
243+getRawCommand name' = do
244+ rawargs <- withRaw (skipopts *> option "" dimenarg *> many braced)
245+ return $ '\\' : name' ++ snd rawargs
246+
242blockCommand :: LP Blocks
247blockCommand :: LP Blocks
243blockCommand = try $ do
248blockCommand = try $ do
244 name <- anyControlSeq
249 name <- anyControlSeq
245 guard $ name /= "begin" && name /= "end"
250 guard $ name /= "begin" && name /= "end"
246 star <- option "" (string "*" <* optional sp)
251 star <- option "" (string "*" <* optional sp)
247 let name' = name ++ star
252 let name' = name ++ star
253+ let raw = do
254+ rawcommand <- getRawCommand name'
255+ transformed <- applyMacros' rawcommand
256+ guard $ transformed /= rawcommand
257+ notFollowedBy $ parseFromString inlines transformed
258+ parseFromString blocks transformed
248 case M.lookup name' blockCommands of
259 case M.lookup name' blockCommands of
249 Just p -> p
260 Just p -> p
250 Nothing -> case M.lookup name blockCommands of
261 Nothing -> case M.lookup name blockCommands of
251 Just p -> p
262 Just p -> p
252− Nothing -> mzero
263+ Nothing -> raw
253
264
254inBrackets :: Inlines -> Inlines
265inBrackets :: Inlines -> Inlines
255inBrackets x = (str "[") <> x <> (str "]")
266inBrackets x = (str "[") <> x <> (str "]")
@@ -385,8 +396,7 @@ inlineCommand = try $ do
385 star <- option "" (string "*")
396 star <- option "" (string "*")
386 let name' = name ++ star
397 let name' = name ++ star
387 let raw = do
398 let raw = do
388− rawargs <- withRaw (skipopts *> option "" dimenarg *> many braced)
389− let rawcommand = '\\' : name ++ star ++ snd rawargs
399+ rawcommand <- getRawCommand name'
390 transformed <- applyMacros' rawcommand
400 transformed <- applyMacros' rawcommand
391 if transformed /= rawcommand
401 if transformed /= rawcommand
392 then parseFromString inlines transformed
402 then parseFromString inlines transformed
tests/latex-reader.latex+27
@@ -845,4 +845,31 @@ indented.
845
845
846\$ \% \& \# \_ \{ \}
846\$ \% \& \# \_ \{ \}
847
847
848+\section{Block newcommands}
849+
850+See e.g. issues #1866, #1835
851+
852+\newcommand{\FIG}[3]{
853+ \begin{figure}[h!]
854+ \centering
855+ \includegraphics[width=#2\columnwidth,angle=0]{#1}
856+ \caption{#3}
857+ \label{fig:#1}
858+ \end{figure}
859+}
860+
861+\newcommand{\separator}{\vspace{4em}}
862+
863+\separator
864+
865+\FIG{lalune.jpg}{0.5}{Test caption}
866+
867+\newcommand{\wbal}{The Wikibook about \LaTeX}
868+
869+\wbal is a good resource for learning \LaTeX.
870+
871+\separator with trailing inlines
872+
873+\FIG{lalune.jpg}{0.5}{Test caption} with trailing inlines
874+
848\end{document}
875\end{document}
tests/latex-reader.native+10−1
@@ -372,4 +372,13 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
372 [[Para [Str "And",Space,Str "in",Space,Str "list",Space,Str "items.",Note [Para [Str "In",Space,Str "list."]]]]]
372 [[Para [Str "And",Space,Str "in",Space,Str "list",Space,Str "items.",Note [Para [Str "In",Space,Str "list."]]]]]
373,Para [Str "This",Space,Str "paragraph",Space,Str "should",Space,Str "not",Space,Str "be",Space,Str "part",Space,Str "of",Space,Str "the",Space,Str "note,",Space,Str "as",Space,Str "it",Space,Str "is",Space,Str "not",Space,Str "indented."]
373,Para [Str "This",Space,Str "paragraph",Space,Str "should",Space,Str "not",Space,Str "be",Space,Str "part",Space,Str "of",Space,Str "the",Space,Str "note,",Space,Str "as",Space,Str "it",Space,Str "is",Space,Str "not",Space,Str "indented."]
374,Header 1 ("escaped-characters",[],[]) [Str "Escaped",Space,Str "characters"]
374,Header 1 ("escaped-characters",[],[]) [Str "Escaped",Space,Str "characters"]
375−,Para [Str "$",Space,Str "%",Space,Str "&",Space,Str "#",Space,Str "_",Space,Str "{",Space,Str "}"]]
375+,Para [Str "$",Space,Str "%",Space,Str "&",Space,Str "#",Space,Str "_",Space,Str "{",Space,Str "}"]
376+,Header 1 ("block-newcommands",[],[]) [Str "Block",Space,Str "newcommands"]
377+,Para [Str "See",Space,Str "e.g.",Space,Str "issues",Space,Str "#1866,",Space,Str "#1835"]
378+,RawBlock (Format "latex") "\\vspace{4em}"
379+,Para [RawInline (Format "latex") "\\centering",Image [Str "Test",Space,Str "caption",Span ("",[],[("data-label","fig:lalune.jpg")]) []] ("lalune.jpg","fig:")]
380+,Para [Span ("",[],[]) [Str "The",Space,Str "Wikibook",Space,Str "about",Space,Str "LaTeX"],Str "is",Space,Str "a",Space,Str "good",Space,Str "resource",Space,Str "for",Space,Str "learning",Space,Str "LaTeX."]
381+,RawBlock (Format "latex") "\\vspace{4em}"
382+,Para [Str "with",Space,Str "trailing",Space,Str "inlines"]
383+,Para [RawInline (Format "latex") "\\centering",Image [Str "Test",Space,Str "caption",Span ("",[],[("data-label","fig:lalune.jpg")]) []] ("lalune.jpg","fig:")]
384+,Para [Str "with",Space,Str "trailing",Space,Str "inlines"]]