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.
This commit is contained in:
John MacFarlane 2017-02-25 12:40:53 +01:00
parent f1cf8273d5
commit 7d0082aa0b
2 changed files with 61 additions and 3 deletions

View file

@ -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

56
test/command/hspace.md Normal file
View file

@ -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"]]
```