From 7d0082aa0b631592f38fc9436a3d0dd5426653cf Mon Sep 17 00:00:00 2001 From: John MacFarlane <jgm@berkeley.edu> Date: Sat, 25 Feb 2017 12:40:53 +0100 Subject: [PATCH] LaTeX reader: allow hspace and vspace to count as raw block or inline. Previously we would refuse to parse anything as raw inline if it was in the blockCommands list. Now we allow exceptions if they're listed under ignoreInlines in inlineCommands. This should make it easier e.g. to include an \hspace between two side-by-side raw LaTeX tables. --- src/Text/Pandoc/Readers/LaTeX.hs | 8 +++-- test/command/hspace.md | 56 ++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 test/command/hspace.md diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs index a13a0c54e..18c240e27 100644 --- a/src/Text/Pandoc/Readers/LaTeX.hs +++ b/src/Text/Pandoc/Readers/LaTeX.hs @@ -445,7 +445,6 @@ inlineCommand :: PandocMonad m => LP m Inlines inlineCommand = try $ do (name, raw') <- withRaw anyControlSeq guard $ name /= "begin" && name /= "end" - guard $ not $ isBlockCommand name exts <- getOption readerExtensions star <- option "" (string "*") let name' = name ++ star @@ -461,7 +460,7 @@ inlineCommand = try $ do else ignore rawcommand (lookupListDefault mzero [name',name] inlineCommands <* optional (try (string "{}"))) - <|> raw + <|> (guard (not (isBlockCommand name)) >> raw) unlessParseRaw :: PandocMonad m => LP m () unlessParseRaw = getOption readerExtensions >>= @@ -648,7 +647,10 @@ inlineCommands = M.fromList $ ] ++ map ignoreInlines -- these commands will be ignored unless --parse-raw is specified, -- in which case they will appear as raw latex blocks: - [ "index" ] + [ "index" + , "hspace" + , "vspace" + ] mkImage :: PandocMonad m => [(String, String)] -> String -> LP m Inlines mkImage options src = do diff --git a/test/command/hspace.md b/test/command/hspace.md new file mode 100644 index 000000000..5d5c7171b --- /dev/null +++ b/test/command/hspace.md @@ -0,0 +1,56 @@ +`\hspace` and `\vspace` should count as both block and inline. + +Here they need to be inline: +``` +% pandoc -f markdown+raw_tex -t native +\begin{figure} +\includegraphics{lalune.jpg} +\caption{lalune \hspace{2em} \vspace{1em} bloo} +\end{figure} +^D +[RawBlock (Format "latex") "\\begin{figure}\n\\includegraphics{lalune.jpg}\n\\caption{lalune \\hspace{2em} \\vspace{1em} bloo}\n\\end{figure}"] +``` + +Here block: +``` +% pandoc -f markdown+raw_tex -t native +\begin{tabular}[t]{cc|c} +\(P\) & \(Q\) & \(P\wedge Q\)\\ +\hline +T & T &\\ +T & F &\\ +F & T &\\ +F & F &\\ +\end{tabular} +\hspace{1em} +\begin{tabular}[t]{cc|c} +\(P\) & \(Q\) & \(P\vee Q\)\\ +\hline +T & T &\\ +T & F &\\ +F & T &\\ +F & F &\\ +\end{tabular} +^D +[RawBlock (Format "latex") "\\begin{tabular}[t]{cc|c}\n\\(P\\) & \\(Q\\) & \\(P\\wedge Q\\)\\\\\n\\hline\nT & T &\\\\\nT & F &\\\\\nF & T &\\\\\nF & F &\\\\\n\\end{tabular}\\hspace{1em}\\begin{tabular}[t]{cc|c}\n\\(P\\) & \\(Q\\) & \\(P\\vee Q\\)\\\\\n\\hline\nT & T &\\\\\nT & F &\\\\\nF & T &\\\\\nF & F &\\\\\n\\end{tabular}"] +``` + +``` +% pandoc -f markdown+raw_tex -t native +hi\hspace{1em}there +^D +[Para [Str "hi",RawInline (Format "tex") "\\hspace{1em}",Str "there"]] +``` + +``` +% pandoc -f markdown+raw_tex -t native +hi + +\hspace{1em} + +there +^D +[Para [Str "hi"] +,RawBlock (Format "latex") "\\hspace{1em}" +,Para [Str "there"]] +```