LaTeX writer: Fix tables
- [x] Fix a bug introduced in 66378062b6
, which
causes the table caption to repeat across all pages
- [x] Address the issues discussed
[here](https://groups.google.com/forum/#!msg/pandoc-discuss/qMu6_5lYy0o/ZAU7lzAIKw0J)
regarding the extra vertical space.
- [ ] NOTE: This will cause multiline table cells to appear unpadded. See
http://tex.stackexchange.com/questions/34971
- [x] Use [`\tabularnewline`](http://tex.stackexchange.com/questions/78796)
instead of `\\`.
This commit is contained in:
parent
8f2aa45d69
commit
f1d330b7b5
2 changed files with 74 additions and 65 deletions
|
@ -471,12 +471,18 @@ blockToLaTeX (Header level (id',classes,_) lst) =
|
|||
blockToLaTeX (Table caption aligns widths heads rows) = do
|
||||
headers <- if all null heads
|
||||
then return empty
|
||||
else ($$ "\\midrule\\endhead") `fmap`
|
||||
else ($$ "\\midrule\n") `fmap`
|
||||
(tableRowToLaTeX True aligns widths) heads
|
||||
let endhead = if all null heads
|
||||
then empty
|
||||
else text "\\endhead"
|
||||
captionText <- inlineListToLaTeX caption
|
||||
let capt = if isEmpty captionText
|
||||
then empty
|
||||
else text "\\caption" <> braces captionText <> "\\\\"
|
||||
else text "\\caption" <> braces captionText
|
||||
<> "\\tabularnewline\n\\toprule\n"
|
||||
<> headers
|
||||
<> "\\endfirsthead"
|
||||
rows' <- mapM (tableRowToLaTeX False aligns widths) rows
|
||||
let colDescriptors = text $ concat $ map toColDescriptor aligns
|
||||
modify $ \s -> s{ stTable = True }
|
||||
|
@ -484,8 +490,9 @@ blockToLaTeX (Table caption aligns widths heads rows) = do
|
|||
braces ("@{}" <> colDescriptors <> "@{}")
|
||||
-- the @{} removes extra space at beginning and end
|
||||
$$ capt
|
||||
$$ "\\toprule\\addlinespace"
|
||||
$$ "\\toprule"
|
||||
$$ headers
|
||||
$$ endhead
|
||||
$$ vcat rows'
|
||||
$$ "\\bottomrule"
|
||||
$$ "\\end{longtable}"
|
||||
|
@ -512,7 +519,7 @@ tableRowToLaTeX header aligns widths cols = do
|
|||
let scaleFactor = 0.97 ** fromIntegral (length aligns)
|
||||
let widths' = map (scaleFactor *) widths
|
||||
cells <- mapM (tableCellToLaTeX header) $ zip3 widths' aligns cols
|
||||
return $ hsep (intersperse "&" cells) $$ "\\\\\\addlinespace"
|
||||
return $ hsep (intersperse "&" cells) <> "\\tabularnewline"
|
||||
|
||||
-- For simple latex tables (without minipages or parboxes),
|
||||
-- we need to go to some lengths to get line breaks working:
|
||||
|
|
|
@ -1,58 +1,57 @@
|
|||
Simple table with caption:
|
||||
|
||||
\begin{longtable}[c]{@{}rlcl@{}}
|
||||
\caption{Demonstration of simple table syntax.}\\
|
||||
\toprule\addlinespace
|
||||
Right & Left & Center & Default
|
||||
\\\addlinespace
|
||||
\midrule\endhead
|
||||
12 & 12 & 12 & 12
|
||||
\\\addlinespace
|
||||
123 & 123 & 123 & 123
|
||||
\\\addlinespace
|
||||
1 & 1 & 1 & 1
|
||||
\\\addlinespace
|
||||
\caption{Demonstration of simple table syntax.}\tabularnewline
|
||||
\toprule
|
||||
Right & Left & Center & Default\tabularnewline
|
||||
\midrule
|
||||
\endfirsthead
|
||||
\toprule
|
||||
Right & Left & Center & Default\tabularnewline
|
||||
\midrule
|
||||
\endhead
|
||||
12 & 12 & 12 & 12\tabularnewline
|
||||
123 & 123 & 123 & 123\tabularnewline
|
||||
1 & 1 & 1 & 1\tabularnewline
|
||||
\bottomrule
|
||||
\end{longtable}
|
||||
|
||||
Simple table without caption:
|
||||
|
||||
\begin{longtable}[c]{@{}rlcl@{}}
|
||||
\toprule\addlinespace
|
||||
Right & Left & Center & Default
|
||||
\\\addlinespace
|
||||
\midrule\endhead
|
||||
12 & 12 & 12 & 12
|
||||
\\\addlinespace
|
||||
123 & 123 & 123 & 123
|
||||
\\\addlinespace
|
||||
1 & 1 & 1 & 1
|
||||
\\\addlinespace
|
||||
\toprule
|
||||
Right & Left & Center & Default\tabularnewline
|
||||
\midrule
|
||||
\endhead
|
||||
12 & 12 & 12 & 12\tabularnewline
|
||||
123 & 123 & 123 & 123\tabularnewline
|
||||
1 & 1 & 1 & 1\tabularnewline
|
||||
\bottomrule
|
||||
\end{longtable}
|
||||
|
||||
Simple table indented two spaces:
|
||||
|
||||
\begin{longtable}[c]{@{}rlcl@{}}
|
||||
\caption{Demonstration of simple table syntax.}\\
|
||||
\toprule\addlinespace
|
||||
Right & Left & Center & Default
|
||||
\\\addlinespace
|
||||
\midrule\endhead
|
||||
12 & 12 & 12 & 12
|
||||
\\\addlinespace
|
||||
123 & 123 & 123 & 123
|
||||
\\\addlinespace
|
||||
1 & 1 & 1 & 1
|
||||
\\\addlinespace
|
||||
\caption{Demonstration of simple table syntax.}\tabularnewline
|
||||
\toprule
|
||||
Right & Left & Center & Default\tabularnewline
|
||||
\midrule
|
||||
\endfirsthead
|
||||
\toprule
|
||||
Right & Left & Center & Default\tabularnewline
|
||||
\midrule
|
||||
\endhead
|
||||
12 & 12 & 12 & 12\tabularnewline
|
||||
123 & 123 & 123 & 123\tabularnewline
|
||||
1 & 1 & 1 & 1\tabularnewline
|
||||
\bottomrule
|
||||
\end{longtable}
|
||||
|
||||
Multiline table with caption:
|
||||
|
||||
\begin{longtable}[c]{@{}clrl@{}}
|
||||
\caption{Here's the caption. It may span multiple lines.}\\
|
||||
\toprule\addlinespace
|
||||
\caption{Here's the caption. It may span multiple lines.}\tabularnewline
|
||||
\toprule
|
||||
\begin{minipage}[b]{0.13\columnwidth}\centering
|
||||
Centered Header
|
||||
\end{minipage} & \begin{minipage}[b]{0.12\columnwidth}\raggedright
|
||||
|
@ -61,9 +60,21 @@ Left Aligned
|
|||
Right Aligned
|
||||
\end{minipage} & \begin{minipage}[b]{0.30\columnwidth}\raggedright
|
||||
Default aligned
|
||||
\end{minipage}
|
||||
\\\addlinespace
|
||||
\midrule\endhead
|
||||
\end{minipage}\tabularnewline
|
||||
\midrule
|
||||
\endfirsthead
|
||||
\toprule
|
||||
\begin{minipage}[b]{0.13\columnwidth}\centering
|
||||
Centered Header
|
||||
\end{minipage} & \begin{minipage}[b]{0.12\columnwidth}\raggedright
|
||||
Left Aligned
|
||||
\end{minipage} & \begin{minipage}[b]{0.14\columnwidth}\raggedleft
|
||||
Right Aligned
|
||||
\end{minipage} & \begin{minipage}[b]{0.30\columnwidth}\raggedright
|
||||
Default aligned
|
||||
\end{minipage}\tabularnewline
|
||||
\midrule
|
||||
\endhead
|
||||
\begin{minipage}[t]{0.13\columnwidth}\centering
|
||||
First
|
||||
\end{minipage} & \begin{minipage}[t]{0.12\columnwidth}\raggedright
|
||||
|
@ -72,8 +83,7 @@ row
|
|||
12.0
|
||||
\end{minipage} & \begin{minipage}[t]{0.30\columnwidth}\raggedright
|
||||
Example of a row that spans multiple lines.
|
||||
\end{minipage}
|
||||
\\\addlinespace
|
||||
\end{minipage}\tabularnewline
|
||||
\begin{minipage}[t]{0.13\columnwidth}\centering
|
||||
Second
|
||||
\end{minipage} & \begin{minipage}[t]{0.12\columnwidth}\raggedright
|
||||
|
@ -82,15 +92,14 @@ row
|
|||
5.0
|
||||
\end{minipage} & \begin{minipage}[t]{0.30\columnwidth}\raggedright
|
||||
Here's another one. Note the blank line between rows.
|
||||
\end{minipage}
|
||||
\\\addlinespace
|
||||
\end{minipage}\tabularnewline
|
||||
\bottomrule
|
||||
\end{longtable}
|
||||
|
||||
Multiline table without caption:
|
||||
|
||||
\begin{longtable}[c]{@{}clrl@{}}
|
||||
\toprule\addlinespace
|
||||
\toprule
|
||||
\begin{minipage}[b]{0.13\columnwidth}\centering
|
||||
Centered Header
|
||||
\end{minipage} & \begin{minipage}[b]{0.12\columnwidth}\raggedright
|
||||
|
@ -99,9 +108,9 @@ Left Aligned
|
|||
Right Aligned
|
||||
\end{minipage} & \begin{minipage}[b]{0.30\columnwidth}\raggedright
|
||||
Default aligned
|
||||
\end{minipage}
|
||||
\\\addlinespace
|
||||
\midrule\endhead
|
||||
\end{minipage}\tabularnewline
|
||||
\midrule
|
||||
\endhead
|
||||
\begin{minipage}[t]{0.13\columnwidth}\centering
|
||||
First
|
||||
\end{minipage} & \begin{minipage}[t]{0.12\columnwidth}\raggedright
|
||||
|
@ -110,8 +119,7 @@ row
|
|||
12.0
|
||||
\end{minipage} & \begin{minipage}[t]{0.30\columnwidth}\raggedright
|
||||
Example of a row that spans multiple lines.
|
||||
\end{minipage}
|
||||
\\\addlinespace
|
||||
\end{minipage}\tabularnewline
|
||||
\begin{minipage}[t]{0.13\columnwidth}\centering
|
||||
Second
|
||||
\end{minipage} & \begin{minipage}[t]{0.12\columnwidth}\raggedright
|
||||
|
@ -120,28 +128,24 @@ row
|
|||
5.0
|
||||
\end{minipage} & \begin{minipage}[t]{0.30\columnwidth}\raggedright
|
||||
Here's another one. Note the blank line between rows.
|
||||
\end{minipage}
|
||||
\\\addlinespace
|
||||
\end{minipage}\tabularnewline
|
||||
\bottomrule
|
||||
\end{longtable}
|
||||
|
||||
Table without column headers:
|
||||
|
||||
\begin{longtable}[c]{@{}rlcr@{}}
|
||||
\toprule\addlinespace
|
||||
12 & 12 & 12 & 12
|
||||
\\\addlinespace
|
||||
123 & 123 & 123 & 123
|
||||
\\\addlinespace
|
||||
1 & 1 & 1 & 1
|
||||
\\\addlinespace
|
||||
\toprule
|
||||
12 & 12 & 12 & 12\tabularnewline
|
||||
123 & 123 & 123 & 123\tabularnewline
|
||||
1 & 1 & 1 & 1\tabularnewline
|
||||
\bottomrule
|
||||
\end{longtable}
|
||||
|
||||
Multiline table without column headers:
|
||||
|
||||
\begin{longtable}[c]{@{}clrl@{}}
|
||||
\toprule\addlinespace
|
||||
\toprule
|
||||
\begin{minipage}[t]{0.13\columnwidth}\centering
|
||||
First
|
||||
\end{minipage} & \begin{minipage}[t]{0.12\columnwidth}\raggedright
|
||||
|
@ -150,8 +154,7 @@ row
|
|||
12.0
|
||||
\end{minipage} & \begin{minipage}[t]{0.30\columnwidth}\raggedright
|
||||
Example of a row that spans multiple lines.
|
||||
\end{minipage}
|
||||
\\\addlinespace
|
||||
\end{minipage}\tabularnewline
|
||||
\begin{minipage}[t]{0.13\columnwidth}\centering
|
||||
Second
|
||||
\end{minipage} & \begin{minipage}[t]{0.12\columnwidth}\raggedright
|
||||
|
@ -160,7 +163,6 @@ row
|
|||
5.0
|
||||
\end{minipage} & \begin{minipage}[t]{0.30\columnwidth}\raggedright
|
||||
Here's another one. Note the blank line between rows.
|
||||
\end{minipage}
|
||||
\\\addlinespace
|
||||
\end{minipage}\tabularnewline
|
||||
\bottomrule
|
||||
\end{longtable}
|
||||
|
|
Loading…
Add table
Reference in a new issue