如何在 Latex 中创建复杂表格

如何在 Latex 中创建复杂表格

我尝试制作这样的表格,但无法让第一列的文本居中。这是我的代码,有人能给我提示吗?

\documentclass[11pt,a4paper,oneside]{book}
\usepackage{amsmath,amsxtra,amssymb,latexsym, amscd,amsthm}
\usepackage{longtable}
\usepackage{multirow}
\usepackage[left=1.5cm,right=1.5cm,top=1.5cm,bottom=1.5cm]{geometry}
\usepackage{arydshln}

\begin{document}
\thispagestyle{empty}

\begin{longtable}{||c|c|p{0.75cm}||}
\hline\hline
\multirow{4}{*}{\parbox{.08\textwidth}{\centering 1 \\ (1 diem)}} & \parbox{.8\textwidth}{dong 1a \\ dong 1b\\ dong 1c} & \parbox{.07\textwidth}{0.25} \\ \cdashline{2-3}
& \parbox{.8\textwidth}{dong 2a \\ dong 2b\\ dong 2c}  & \parbox{.07\textwidth}{0.25} \\ \cdashline{2-3}
& \parbox{.8\textwidth}{dong 3a \\ dong 3b\\ dong 3c \\ dong n} & \parbox{.07\textwidth}{0.25} \\ \cdashline{2-3}
& \parbox{.8\textwidth}{dong 4a \\ dong 4b\\ dong 4c \\ dong n \\ dong n+1} & \parbox{.07\textwidth}{0.25}\\ \hline\hline
\end{longtable}
\end{document} 

答案1

对于大多数问题,您都可以在@Johannes_B 的评论中得到建议。考虑到这些建议,您可以将表格写成:

\documentclass[11pt,a4paper,oneside]{book}
%\usepackage{amsmath,amsxtra,amssymb,latexsym, amscd,amsthm}
\usepackage{array,longtable,multirow}
\usepackage[left=1.5cm,right=1.5cm,top=1.5cm,bottom=1.5cm]{geometry}
\usepackage{arydshln}

\begin{document}
\thispagestyle{empty}

\begin{longtable}{||c|m{.8\textwidth}|>{\centering\arraybackslash}m{0.75cm}||}
    \hline\hline
\multirow{14}{.08\textwidth}{\centering 1 \\ (1 diem)}
    &   dong 1a \newline dong 1b\newline dong 1c
        &   0.25                                        \\  \cdashline{2-3}
    &   dong 2a \newline dong 2b\newline dong 2c  
        &   0.25                                        \\  \cdashline{2-3}
    &   dong 3a \newline dong 3b\newline dong 3c \newline dong n 
        &   0.25                                        \\  \cdashline{2-3}
    &   dong 4a \newline dong 4b\newline 
        dong 4c \newline dong n \newline dong n+1
        &   0.25                                        \\ 
    \hline\hline
\end{longtable}
\end{document} 
\begin{longtable}{||c|m{.8\textwidth}|>{\centering\arraybackslash}m{0.75cm}||}
    \hline\hline
\multirow{14}{.08\textwidth}{\centering 1 \\ (1 diem)}
    &   dong 1a \newline dong 1b\newline dong 1c
        &   0.25                                        \\  \cdashline{2-3}
    &   dong 2a \newline dong 2b\newline dong 2c  
        &   0.25                                        \\  \cdashline{2-3}
    &   dong 3a \newline dong 3b\newline dong 3c \newline dong n 
        &   0.25                                        \\  \cdashline{2-3}
    &   dong 4a \newline dong 4b\newline 
        dong 4c \newline dong n \newline dong n+1
        &   0.25                                        \\ 
    \hline\hline
\end{longtable}
\end{document} 

这使:

在此处输入图片描述

在上面的代码中我使用了m{...}来自数组包的列类型,这简化了最后一列的设置。

我要指出的是,使用包的最优雅的方式就是multirow计算多行单元格应该跨越的行数。在放置单元格内容时,它multirow不是很准确,实际上它提供了可选参数来上下移动其内容:

\multirow{nrows}[bigstruts]{width}[fixup]{text}

其中bigstruts主要用于如果您已经使用bigstrut.sty并且fixup是用于微调单元格内容的垂直位置的长度。

由于您使用,longtable您可能希望将表格拆分成多个页面。可能会出现问题,如何拆分多行单元格。恐怕这不可能自动完成。因此,您将被迫手动拆分更多单元格,或者找到设计表格的其他方法。

附录:如果真正使用长表,我建议按如下方式重新格式化表:

在此处输入图片描述

这里没有multirow单元格问题,第一行将始终出现在表格的顶部......

\documentclass[11pt,a4paper,oneside]{book}
%\usepackage{amsmath,amsxtra,amssymb,latexsym, amscd,amsthm}
\usepackage{array,longtable,multirow}
\usepackage[left=1.5cm,right=1.5cm,top=1.5cm,bottom=1.5cm]{geometry}
\usepackage{arydshln}

\usepackage{caption}% <-- new

\begin{document}
\thispagestyle{empty}

\begin{longtable}{||m{.8\textwidth}
                   |>{\centering\arraybackslash}m{0.75cm}||}
\caption{For final form of table it have to be complied at list twice (usually three times).}
    \label{table1}                                                      \\
    \hline\hline
\multicolumn{2}{||c||}{1 (1 diem)}      \\
    \hline
\endfirsthead
\captionsetup{textformat =continued}
    \hline
\multicolumn{2}{||c||}{1 (1 diem)}      \\
    \hline
\endhead
    \hline
\multicolumn{2}{r}{continued on the next page}
\endfoot
    \hline\hline
\endlastfoot
% table content
dong 1a \newline dong 1b\newline dong 1c
        &   0.25                                        \\  \hdashline
dong 2a \newline dong 2b\newline dong 2c  
        &   0.25                                        \\  \hdashline
dong 3a \newline dong 3b\newline dong 3c \newline dong n 
        &   0.25                                        \\  \hdashline
dong 4a \newline dong 4b\newline 
                 dong 4c \newline dong n \newline dong n+1
        &   0.25                                        \\ 
\end{longtable}
\end{document} 

相关内容