我正在尝试在 Texmaker 中创建如下表。
。
这里我面临以下问题。
- 将第 4 至第 6 列标题换行并居中对齐。
- 段落 [第 3 行最后一列] 上的 Hspace 不起作用
- 最后的多行包含来自其前一行的元素。
屏幕截图如下。问题突出显示红色的盒子
以下是完整的代码...请帮我解决这些问题。
\documentclass[12pt,a4paper,titlepage]{report}
\usepackage{array}
\usepackage{booktabs, multicol, multirow}
\usepackage{color, textcomp, listings}
\usepackage{rotating}
\usepackage[table]{xcolor}
\usepackage{pbox}
\begin{document}
% Table generated by Excel2LaTeX from sheet 'All Exp Table'
\begin{table}[!htbp]
\centering
\renewcommand\baselinestretch{1}\normalsize
\renewcommand{\arraystretch}{1.2}
\begin{tabular}{|c|c|c|m{.5 cm}|m {.5 cm}|m{.5 cm}|m {10.5 cm}|}
\hline
{\begin{sideways} {\centering { Rule No} } \end{sideways}}& {\begin{sideways} {\centering { F\_offsetFlag } } \end{sideways}} & {\begin{sideways} {\centering { B\_offsetFlag } } \end{sideways}} & \multicolumn{1}{m {.5 cm}}{\begin{sideways} { F\_offsetDiff Relation MaxBlkSize} \end{sideways}} &
\multicolumn{1}{m {.5 cm}}{\begin{sideways} { B\_offsetDiff (Relation) MaxBlkSize} \end{sideways}} &
\multicolumn{1}{m {.5 cm}}{\begin{sideways} { F\_offsetDiff (Relation) B\_offsetDiff } \end{sideways}} & {\textbf{Action}} \\ \hline
1 & F & F & $<$ & & = & \pbox{10 cm}{writeBlockAndUpdateOffsets(f\_buf,f\_hash,null);} \\ \hline
2 & F & F & = & {} & $>$ & \multicolumn{1}{l} { \pbox{10 cm}{If (hasBlockHashOnHBase(next\_b\_hash)) \\ \hspace{1 cm} byte[] buf = Arrays.copyOfRange(f\_buf, 0, (int)(b\_offset-offset)); \\ \hspace{1 cm} recordBlockAndUpdateOffsets(buf,null,null); \\
Else \\ WriteBlockAndUpdateOffsets(f\_buf,f\_hash,null); } }\\ \hline
3 & F & F & & = & = & \multicolumn{1}{l}{\multirow{2}[4]{*}{writeBlockAndUpdateOffsets(b\_buf,b\_hash,null);}} \\ \cline{1-6}
4 & F & F & & {=} & $>$ & \multicolumn{1}{l}{} \\ \hline
5 & F & T & & {$<$} & = & \pbox{10 cm}{byte[] buf = Arrays.copyOfRange(b\_buf, (maxBlockSize-lastBlkSize), b\_buf.length); \\
recordSuperBlockAndUpdateOffsets (buf,null,b\_hash+","+(maxBlockSize-lastBlkSize)+","+buf.length);} \\ \hline
6 & F & T & & {$<$} & & \pbox{10 cm}{If (offset==0)\\
IncrementBlockAndUpdateOffsets(b\_hash,b\_BlkSize);\\
Else\\
byte[] buf = Arrays.copyOfRange(b\_buf, (maxBlockSize-lastBlkSize), b\_buf.length);\\
recordSuperBlockAndUpdateOffsets(buf,null,b\_hash+","+ (maxBlockSize-lastBlkSize)+","+buf.length); } \\ \hline
9 & T & F & $<$ & {} & = & \multicolumn{1}{l}{\multirow{2}[4]{*}{incrementBlockAndUpdateOffsets(f\_hash,f\_BlkSize);}} \\ \cline{1-6}
10 & T & F & = & {} & & \multicolumn{1}{l}{} \\ \hline
11 & T & F & = & {} & = & \multicolumn{1}{l}{\multirow{2}[4]{10 cm}{{byte[] buf = Arrays.copyOfRange(b\_buf, 0, (maxBlockSize-lastBlkSize));\\ recordBlockAndUpdateOffsets(buf,null,null);\\ incrementBlockAndUpdateOffsets(f\_hash,f\_BlkSize);}}} \\ \cline{1-6}
12 & T & F & $>$ & {} & & \multicolumn{1}{l}{} \\ \hline
13 & T & T & $<$ & {} & = & \multicolumn{1}{l}{\multirow{2}[4]{*}{incrementBlockAndUpdateOffsets(f\_hash,f\_BlkSize);}} \\ \cline{1-6}
14 & T & T & = & {} & $>$ & \multicolumn{1}{l}{} \\ \hline
\end{tabular}%
\caption{}
\label{tab:ImplLogic2}%
\end{table}%
\end{document}
答案1
这里有很多问题。
首先要说明的是:使用时\multicolumn
记得包含所需的任何规则,例如,写成\multicolumn{1}{c|}{...}
而不是简单的c
。如果没有 ,|
垂直线就会有洞。
对于旋转的标签,最好将它们全部视为相同。您的前 6 列都可以是 类型c
。现在需要将标签置于框的中心并进行旋转。最简单的方法是在旋转之前使所有这些框的宽度固定,这样就会应用相同的居中方式。所以我的建议是创建一个通用的方法来执行所有这些操作,并引入一个您可以调整的长度。以下命令\sidewaysc
可以简单地用作\sidewaysc{Text\\ text}
:
\newlength{\sidewaysclen}
\setlength{\sidewaysclen}{6em}
\newcommand{\sidewaysc}[1]{\raisebox{\dimexpr-0.5\sidewaysclen}{%
\begin{sideways}\begin{minipage}{\sidewaysclen}%
\centering #1\end{minipage}\end{sideways}}}
环境sideways
将盒子旋转一个角,对于您的桌子,最好将其向下移动,\raisebox
以便它位于线上的中心。
缺少的\hspace
s 是由于隐式使用了封闭环境。它本质上是一个段落,如果在段落中指定换行符,LaTeX 将忽略下一行开头的空格。有几种方法可以解决这个问题。如果将材料打包在 a 中\parbox
并指定,\raggedright
那么\hspace
s 将被尊重。我建议您使用\quad
和\qquad
对于这些空格,它们等于\hspace{1em}
和\hspace{2em}
,但更容易一致地使用。顺便说一下,\multirow
具有指定宽度的 a 已经以这种方式用 打包了它的参数\raggedright
(至少在默认设置中),因此在那里这种间距是值得尊重的。在下面的例子中,我引入了一个长度变量来指定最后一列的宽度,并且在每次需要在该列中指定\parbox
或\multirow
宽度时使用它。
最后,底部的“重复”文本与\multirow
表格的下一行重叠。该\multirow
命令不会提供所需的垂直空间,因此您应该加宽相应的行,例如使用\\[dimension]
。在您的情况下,您希望在两个连续的行上均匀地执行此操作,这\\[4ex]
似乎是正确的。
\documentclass[12pt,a4paper]{report}
\usepackage{array}
\usepackage{multirow}
\usepackage{rotating}
\usepackage{adjustbox}
\newlength{\sidewaysclen}
\setlength{\sidewaysclen}{6em}
\newcommand{\sidewaysc}[1]{\raisebox{\dimexpr-0.5\sidewaysclen}{%
\begin{sideways}\begin{minipage}{\sidewaysclen}%
\centering #1\end{minipage}\end{sideways}}}
\newlength{\finalcolwd}
\begin{document}
\begin{table}[htp]
\centering
\renewcommand\baselinestretch{1}\normalsize
\renewcommand{\arraystretch}{1.2}
\setlength{\sidewaysclen}{6em}
\setlength{\finalcolwd}{8.8cm}
\begin{adjustbox}{center}
\begin{tabular}{|c|c|c|c|c|c|m{\finalcolwd}|}
\hline
\sidewaysc{Rule No}&\sidewaysc{F\_offsetFlag}&
\sidewaysc{B\_offsetFlag}&
\sidewaysc{F\_offsetDiff\\ Relation\\ MaxBlkSize}&
\sidewaysc{B\_offsetDiff\\ (Relation)\\ MaxBlkSize}&
\sidewaysc{F\_offsetDiff\\ (Relation)\\ B\_offsetDiff}&
\multicolumn{1}{c|}{\textbf{Action}}
\\ \hline
1 & F & F & $<$ & & = &
writeBlockAndUpdateOffsets(f\_buf,f\_hash,null);
\\ \hline
2 & F & F & = & & $>$ &
\parbox{\finalcolwd}{\raggedright\strut
If (hasBlockHashOnHBase(next\_b\_hash))\\
\quad byte[] buf = Arrays.copyOfRange(f\_buf, 0,\\
\qquad (int)(b\_offset-offset));\\
\quad recordBlockAndUpdateOffsets(buf,null,null); \\
Else\\
\quad WriteBlockAndUpdateOffsets(f\_buf,\\
\qquad f\_hash,null);\strut}
\\ \hline
3 & F & F & & = & = &
\multirow{2}{*}{writeBlockAndUpdateOffsets(b\_buf,b\_hash,null);}
\\ \cline{1-6}
4 & F & F & & = & $>$ &
\\ \hline
11 & T & F & = & & = &
\multirow{2}{\finalcolwd}[-3pt]{%
byte[] buf = Arrays.copyOfRange(b\_buf, 0,\\
\quad (maxBlockSize-lastBlkSize));\\
recordBlockAndUpdateOffsets(buf,null,null);\\
incrementBlockAndUpdateOffsets\\
\quad (f\_hash,f\_BlkSize);}
\\[4ex] \cline{1-6}
12 & T & F & $>$ & & &
\\[4ex] \hline
13 & T & T & $<$ & & = &
\multirow{2}{\finalcolwd}{%
incrementBlockAndUpdateOffsets\\
\quad(f\_hash,f\_BlkSize);}
\\ \cline{1-6}
14 & T & T & = & & $>$ & \\ \hline
\end{tabular}
\end{adjustbox}
\caption{Example table}
\label{tab:ImplLogic2}%
\end{table}%
\end{document}
桌子很宽,所以我把它放在一个adjust
盒子里,这样它就可以均匀地伸出到两个边缘。