aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2017-02-25 12:40:53 +0100
committerJohn MacFarlane <jgm@berkeley.edu>2017-02-25 12:43:00 +0100
commit7d0082aa0b631592f38fc9436a3d0dd5426653cf (patch)
treefdf8ceb9696c2c046397c431683a18ce63e5ccf2
parentf1cf8273d5e44d9356f17b589a6429c0f121f449 (diff)
downloadpandoc-7d0082aa0b631592f38fc9436a3d0dd5426653cf.tar.gz
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.
-rw-r--r--src/Text/Pandoc/Readers/LaTeX.hs8
-rw-r--r--test/command/hspace.md56
2 files changed, 61 insertions, 3 deletions
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"]]
+```