我有一个 html 文件,它通过 wkhtmltopdf 转换为 PDF。我想将其转换为 LaTeX,因为它可以更好地处理页脚、分页符等。
我目前遇到的具体问题在于 html 中定义的表。这是一个粗略的 MWE:
<style>
table { width: 100% }
td {
border: 1px solid black;
vertical-align: top;
}
</style>
<table class>
<tr>
<td>
Heading 1 <br>
A <br>
B <br>
C <br>
D
</td>
<td rowspan="2">
Heading 2 <br>
A <br>
B <br>
C <br>
D <br>
E <br>
F <br>
G <br>
H <br>
I <br>
J <br>
K <br>
L <br>
M <br>
N <br>
O <br>
P
</td>
<td>
Heading 3 <br>
A <br>
B <br>
C <br>
D
</td>
<td>
Heading 4 <br>
A <br>
B <br>
C <br>
D <br>
E
</td>
</tr>
<tr>
<td>
Heading 5 <br>
A <br>
B <br>
C <br>
D <br>
E
</td>
<td rowspan="2">
Heading 6 <br>
A <br>
B <br>
C <br>
D <br>
E <br>
F <br>
G <br>
H <br>
I
</td>
<td>
Heading 7 <br>
A <br>
B <br>
C <br>
D <br>
E <br>
F <br>
G
</td>
</tr>
<tr>
<td>
Heading 8 <br>
A <br>
B <br>
C <br>
D <br>
E
</td>
<td>
Heading 9 <br>
A <br>
B <br>
C <br>
D
</td>
<td>
Heading 10 <br>
A <br>
B <br>
C <br>
D <br>
E
</td>
</tr>
</table>
请注意,每行中的单元格都是对齐的,并且当输出大于分配的最小单元格大小时,如在一个合并的单元格中,所有其他单元格都会获得空白空间以保持对齐。
还要注意,项目 A、B、C... 是关键短语,通常足够短以适合其单元格,但偶尔会长到可以填满 2 或 3 行。因此,它们必须能够溢出到其列中的多行上。
我在防止溢出、使文本对齐以及在 LaTeX 中绘制单元格周围的边框方面遇到了一些困难。到目前为止,我所做的最好的工作是使用 minipages 完成以下工作:
\documentclass[]{article}
\usepackage[margin=1cm]{geometry}
\usepackage{multirow}
\begin{document}
\begin{table}[]
\begin{tabular}{|p{4cm}|p{4cm}|p{4cm}|p{4cm}|}
\hline
\begin{tabular}[c]{@{}l@{}}
Heading 1 \\
A \\
B \\
C \\
D
\end{tabular} &
\multirow{2}{*}{
\begin{tabular}[c]{@{}l@{}}
Heading 2 \\
A \\
B \\
C \\
D \\
E \\
F \\
G \\
H \\
I \\
J \\
K \\
L \\
M \\
N \\
O \\
P
\end{tabular}
} &
\begin{tabular}[c]{@{}l@{}}
Heading 3 \\
A \\
B \\
C \\
D
\end{tabular} &
\begin{tabular}[c]{@{}l@{}}
Heading 4 \\
A \\
B \\
C \\
D \\
E
\end{tabular} \\
\hline
\begin{tabular}[c]{@{}l@{}}
Heading 5 \\
A \\
B \\
C \\
D \\
E
\end{tabular} & &
\multirow{2}{*}{
\begin{tabular}[c]{@{}l@{}}
Heading 6 \\
A \\
B \\
C \\
D \\
E \\
F \\
G \\
H \\
I
\end{tabular}
} &
\begin{tabular}[c]{@{}l@{}}
Heading 7 \\
A \\
B \\
C \\
D \\
E \\
F \\
G
\end{tabular} \\
\hline
\begin{tabular}[c]{@{}l@{}}
Heading 8 \\
A \\
B \\
C \\
D \\
E
\end{tabular} &
\begin{tabular}[c]{@{}l@{}}
Heading 9 \\
A \\
B \\
C \\
D
\end{tabular} & &
\begin{tabular}[c]{@{}l@{}}
Heading 10 \\
A \\
B \\
C \\
D \\
E
\end{tabular} \\
\hline
\end{tabular}
\end{table}
\end{document}
尝试向单个单元格添加 \hline 也无助于改善问题。
有没有办法在 LaTeX 中实现 html 输出中显示的布局,同时保留一些 html 特性,如扩大单元格以适应内容、保持给定行中的单元格对齐以及保留边框?(请注意,边框不必出现在每个单独的方块周围,如果它们看起来像标准的 Word 表格,彼此之间有连续的边框,那就更好了。)
还有一点需要注意——外观方面,我很清楚所要求的表格不符合最佳实践。但是,这是客户要求的,所以我不能随意对表格布局进行大范围的重新安排。
答案1
不确定这是否是您要找的内容:
\documentclass[]{article}
\usepackage[margin=1cm]{geometry}
\usepackage{multirow,lipsum,tabularx}
\let\xpar\par
\def\heading#1{\vskip-10pt\textbf{Heading #1}\par}
\newcolumntype{T}{>{\parskip2ex}X}
\begin{document}
\noindent
\begin{tabularx}{\linewidth}{|T|T|T|T|}\hline
\heading A \lipsum[1][1]\lipsum[1][0]\par\lipsum[1][1]\par\lipsum[1][2] &
\multirow{2}{\linewidth}{\parskip2ex plus 2ex minus 1ex
\heading B
\xpar\lipsum[2][1]\lipsum[2][0]\xpar\lipsum[2][1]\xpar\lipsum[2][2]
\lipsum[2][3]\lipsum[2][4]\xpar\lipsum[1][1]
}
&
\heading C \lipsum[3][1]\lipsum[3][0]\par\lipsum[3][3]\par\lipsum[3][2] &
\heading D \lipsum[4][1]\lipsum[4][0]\par\lipsum[4][1]\par\lipsum[4][2] \\\cline{1-1}\cline{3-4}
\heading E \lipsum[5][1]\lipsum[5][0]\par\lipsum[5][1]\par\lipsum[5][2-4] &
& % empty cell
\multirow{2}{\linewidth}{\parskip2ex plus 2ex minus 1ex
\heading G
\xpar\lipsum[6][1]\lipsum[6][0]\xpar\lipsum[6][1]\xpar\lipsum[6][2]
\lipsum[7][1]\lipsum[7][0]\xpar\lipsum[7][1]\xpar\lipsum[7][2]
\lipsum[7][3]\xpar\lipsum[7][4-11]
}
&
\heading H \lipsum[8][1]\lipsum[1][0]\par\lipsum[8][1] \\\cline{1-2}\cline{4-4}
\heading I \lipsum[9][1]\lipsum[9][0]\par\lipsum[9][1] \smallskip & % ending skip
\heading J \lipsum[10][1]\lipsum[10][0]\par\lipsum[10][1]\par\lipsum[10][2] &
& % empty cell
\heading L \lipsum[11][11]\lipsum[11][0]\par\lipsum[11][1]\par\lipsum[11][2] \\\hline
\end{tabularx}
\end{document}
总而言之,该方法只是多行单元格(以便tabularx
轻松修复列的宽度),但这些单元格中的段落有点棘手,因此使用\parbox
特殊的\xpar
(或者,您可以使用带有额外空间的换行符来\\[3ex]
制作假段落)。
还要注意,多行单元格的高度不是根据内部\parbox
内容扩展,而是根据其他单元格的内容扩展,因此如果您在单元格 B 中添加过多文本,它将与单元格 J 重叠。