aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/templates/default.latex1
-rw-r--r--src/Text/Pandoc/Writers/LaTeX.hs22
-rw-r--r--test/command/5367.md6
-rw-r--r--test/tables.latex99
4 files changed, 79 insertions, 49 deletions
diff --git a/data/templates/default.latex b/data/templates/default.latex
index 80f6a7feb..4cac0a7cc 100644
--- a/data/templates/default.latex
+++ b/data/templates/default.latex
@@ -257,6 +257,7 @@ $highlighting-macros$
$endif$
$if(tables)$
\usepackage{longtable,booktabs}
+\usepackage{calc} % for calculating minipage widths
$if(beamer)$
\usepackage{caption}
% Make caption package work with longtable
diff --git a/src/Text/Pandoc/Writers/LaTeX.hs b/src/Text/Pandoc/Writers/LaTeX.hs
index 28b4efca4..f7775318a 100644
--- a/src/Text/Pandoc/Writers/LaTeX.hs
+++ b/src/Text/Pandoc/Writers/LaTeX.hs
@@ -851,9 +851,6 @@ tableRowToLaTeX :: PandocMonad m
-> [[Block]]
-> LW m (Doc Text)
tableRowToLaTeX header aligns widths cols = do
- -- scale factor compensates for extra space between columns
- -- so the whole table isn't larger than columnwidth
- let scaleFactor = 0.97 ** fromIntegral (length aligns)
let isSimple [Plain _] = True
isSimple [Para _] = True
isSimple [] = True
@@ -861,9 +858,10 @@ tableRowToLaTeX header aligns widths cols = do
-- simple tables have to have simple cells:
let widths' = if all (== 0) widths && not (all isSimple cols)
then replicate (length aligns)
- (scaleFactor / fromIntegral (length aligns))
- else map (scaleFactor *) widths
- cells <- mapM (tableCellToLaTeX header) $ zip3 widths' aligns cols
+ (1 / fromIntegral (length aligns))
+ else widths
+ let numcols = length widths'
+ cells <- mapM (tableCellToLaTeX header numcols) $ zip3 widths' aligns cols
return $ hsep (intersperse "&" cells) <> "\\tabularnewline"
-- For simple latex tables (without minipages or parboxes),
@@ -890,11 +888,12 @@ displayMathToInline :: Inline -> Inline
displayMathToInline (Math DisplayMath x) = Math InlineMath x
displayMathToInline x = x
-tableCellToLaTeX :: PandocMonad m => Bool -> (Double, Alignment, [Block])
+tableCellToLaTeX :: PandocMonad m
+ => Bool -> Int -> (Double, Alignment, [Block])
-> LW m (Doc Text)
-tableCellToLaTeX _ (0, _, blocks) =
+tableCellToLaTeX _ _ (0, _, blocks) =
blockListToLaTeX $ walk fixLineBreaks $ walk displayMathToInline blocks
-tableCellToLaTeX header (width, align, blocks) = do
+tableCellToLaTeX header numcols (width, align, blocks) = do
beamer <- gets stBeamer
externalNotes <- gets stExternalNotes
inMinipage <- gets stInMinipage
@@ -912,9 +911,12 @@ tableCellToLaTeX header (width, align, blocks) = do
AlignCenter -> "\\centering"
AlignDefault -> "\\raggedright"
return $ "\\begin{minipage}" <> valign <>
- braces (text (printf "%.2f\\columnwidth" width)) <>
+ braces (text (printf
+ "(\\columnwidth - %d\\tabcolsep) * \\real{%.2f}"
+ (numcols - 1) width)) <>
halign <> cr <> cellContents <> "\\strut" <> cr <>
"\\end{minipage}"
+-- (\columnwidth - 8\tabcolsep) * \real{0.15}
notesToLaTeX :: [Doc Text] -> Doc Text
notesToLaTeX [] = empty
diff --git a/test/command/5367.md b/test/command/5367.md
index ae8744dd7..18ac764ab 100644
--- a/test/command/5367.md
+++ b/test/command/5367.md
@@ -23,18 +23,18 @@ hello\footnote{doc footnote}
\begin{longtable}[]{@{}c@{}}
\caption[Sample table.]{Sample table.\footnote{caption footnote}}\tabularnewline
\toprule
-\begin{minipage}[b]{0.16\columnwidth}\centering
+\begin{minipage}[b]{(\columnwidth - 0\tabcolsep) * \real{0.17}}\centering
Fruit\footnote{header footnote}\strut
\end{minipage}\tabularnewline
\midrule
\endfirsthead
\toprule
-\begin{minipage}[b]{0.16\columnwidth}\centering
+\begin{minipage}[b]{(\columnwidth - 0\tabcolsep) * \real{0.17}}\centering
Fruit{}\strut
\end{minipage}\tabularnewline
\midrule
\endhead
-\begin{minipage}[t]{0.16\columnwidth}\centering
+\begin{minipage}[t]{(\columnwidth - 0\tabcolsep) * \real{0.17}}\centering
Bans\footnote{table cell footnote}\strut
\end{minipage}\tabularnewline
\bottomrule
diff --git a/test/tables.latex b/test/tables.latex
index 4616448a9..e0be7efdc 100644
--- a/test/tables.latex
+++ b/test/tables.latex
@@ -52,45 +52,57 @@ Multiline table with caption:
\begin{longtable}[]{@{}clrl@{}}
\caption{Here's the caption. It may span multiple lines.}\tabularnewline
\toprule
-\begin{minipage}[b]{0.13\columnwidth}\centering
+\begin{minipage}[b]{(\columnwidth - 3\tabcolsep) * \real{0.15}}\centering
Centered Header\strut
-\end{minipage} & \begin{minipage}[b]{0.12\columnwidth}\raggedright
+\end{minipage} &
+\begin{minipage}[b]{(\columnwidth - 3\tabcolsep) * \real{0.14}}\raggedright
Left Aligned\strut
-\end{minipage} & \begin{minipage}[b]{0.14\columnwidth}\raggedleft
+\end{minipage} &
+\begin{minipage}[b]{(\columnwidth - 3\tabcolsep) * \real{0.16}}\raggedleft
Right Aligned\strut
-\end{minipage} & \begin{minipage}[b]{0.31\columnwidth}\raggedright
+\end{minipage} &
+\begin{minipage}[b]{(\columnwidth - 3\tabcolsep) * \real{0.35}}\raggedright
Default aligned\strut
\end{minipage}\tabularnewline
\midrule
\endfirsthead
\toprule
-\begin{minipage}[b]{0.13\columnwidth}\centering
+\begin{minipage}[b]{(\columnwidth - 3\tabcolsep) * \real{0.15}}\centering
Centered Header\strut
-\end{minipage} & \begin{minipage}[b]{0.12\columnwidth}\raggedright
+\end{minipage} &
+\begin{minipage}[b]{(\columnwidth - 3\tabcolsep) * \real{0.14}}\raggedright
Left Aligned\strut
-\end{minipage} & \begin{minipage}[b]{0.14\columnwidth}\raggedleft
+\end{minipage} &
+\begin{minipage}[b]{(\columnwidth - 3\tabcolsep) * \real{0.16}}\raggedleft
Right Aligned\strut
-\end{minipage} & \begin{minipage}[b]{0.31\columnwidth}\raggedright
+\end{minipage} &
+\begin{minipage}[b]{(\columnwidth - 3\tabcolsep) * \real{0.35}}\raggedright
Default aligned\strut
\end{minipage}\tabularnewline
\midrule
\endhead
-\begin{minipage}[t]{0.13\columnwidth}\centering
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.15}}\centering
First\strut
-\end{minipage} & \begin{minipage}[t]{0.12\columnwidth}\raggedright
+\end{minipage} &
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.14}}\raggedright
row\strut
-\end{minipage} & \begin{minipage}[t]{0.14\columnwidth}\raggedleft
+\end{minipage} &
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.16}}\raggedleft
12.0\strut
-\end{minipage} & \begin{minipage}[t]{0.31\columnwidth}\raggedright
+\end{minipage} &
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.35}}\raggedright
Example of a row that spans multiple lines.\strut
\end{minipage}\tabularnewline
-\begin{minipage}[t]{0.13\columnwidth}\centering
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.15}}\centering
Second\strut
-\end{minipage} & \begin{minipage}[t]{0.12\columnwidth}\raggedright
+\end{minipage} &
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.14}}\raggedright
row\strut
-\end{minipage} & \begin{minipage}[t]{0.14\columnwidth}\raggedleft
+\end{minipage} &
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.16}}\raggedleft
5.0\strut
-\end{minipage} & \begin{minipage}[t]{0.31\columnwidth}\raggedright
+\end{minipage} &
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.35}}\raggedright
Here's another one. Note the blank line between rows.\strut
\end{minipage}\tabularnewline
\bottomrule
@@ -100,33 +112,42 @@ Multiline table without caption:
\begin{longtable}[]{@{}clrl@{}}
\toprule
-\begin{minipage}[b]{0.13\columnwidth}\centering
+\begin{minipage}[b]{(\columnwidth - 3\tabcolsep) * \real{0.15}}\centering
Centered Header\strut
-\end{minipage} & \begin{minipage}[b]{0.12\columnwidth}\raggedright
+\end{minipage} &
+\begin{minipage}[b]{(\columnwidth - 3\tabcolsep) * \real{0.14}}\raggedright
Left Aligned\strut
-\end{minipage} & \begin{minipage}[b]{0.14\columnwidth}\raggedleft
+\end{minipage} &
+\begin{minipage}[b]{(\columnwidth - 3\tabcolsep) * \real{0.16}}\raggedleft
Right Aligned\strut
-\end{minipage} & \begin{minipage}[b]{0.31\columnwidth}\raggedright
+\end{minipage} &
+\begin{minipage}[b]{(\columnwidth - 3\tabcolsep) * \real{0.35}}\raggedright
Default aligned\strut
\end{minipage}\tabularnewline
\midrule
\endhead
-\begin{minipage}[t]{0.13\columnwidth}\centering
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.15}}\centering
First\strut
-\end{minipage} & \begin{minipage}[t]{0.12\columnwidth}\raggedright
+\end{minipage} &
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.14}}\raggedright
row\strut
-\end{minipage} & \begin{minipage}[t]{0.14\columnwidth}\raggedleft
+\end{minipage} &
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.16}}\raggedleft
12.0\strut
-\end{minipage} & \begin{minipage}[t]{0.31\columnwidth}\raggedright
+\end{minipage} &
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.35}}\raggedright
Example of a row that spans multiple lines.\strut
\end{minipage}\tabularnewline
-\begin{minipage}[t]{0.13\columnwidth}\centering
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.15}}\centering
Second\strut
-\end{minipage} & \begin{minipage}[t]{0.12\columnwidth}\raggedright
+\end{minipage} &
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.14}}\raggedright
row\strut
-\end{minipage} & \begin{minipage}[t]{0.14\columnwidth}\raggedleft
+\end{minipage} &
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.16}}\raggedleft
5.0\strut
-\end{minipage} & \begin{minipage}[t]{0.31\columnwidth}\raggedright
+\end{minipage} &
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.35}}\raggedright
Here's another one. Note the blank line between rows.\strut
\end{minipage}\tabularnewline
\bottomrule
@@ -148,22 +169,28 @@ Multiline table without column headers:
\begin{longtable}[]{@{}clrl@{}}
\toprule
\endhead
-\begin{minipage}[t]{0.13\columnwidth}\centering
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.15}}\centering
First\strut
-\end{minipage} & \begin{minipage}[t]{0.12\columnwidth}\raggedright
+\end{minipage} &
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.14}}\raggedright
row\strut
-\end{minipage} & \begin{minipage}[t]{0.14\columnwidth}\raggedleft
+\end{minipage} &
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.16}}\raggedleft
12.0\strut
-\end{minipage} & \begin{minipage}[t]{0.31\columnwidth}\raggedright
+\end{minipage} &
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.35}}\raggedright
Example of a row that spans multiple lines.\strut
\end{minipage}\tabularnewline
-\begin{minipage}[t]{0.13\columnwidth}\centering
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.15}}\centering
Second\strut
-\end{minipage} & \begin{minipage}[t]{0.12\columnwidth}\raggedright
+\end{minipage} &
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.14}}\raggedright
row\strut
-\end{minipage} & \begin{minipage}[t]{0.14\columnwidth}\raggedleft
+\end{minipage} &
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.16}}\raggedleft
5.0\strut
-\end{minipage} & \begin{minipage}[t]{0.31\columnwidth}\raggedright
+\end{minipage} &
+\begin{minipage}[t]{(\columnwidth - 3\tabcolsep) * \real{0.35}}\raggedright
Here's another one. Note the blank line between rows.\strut
\end{minipage}\tabularnewline
\bottomrule