我正在尝试基于列类型 c 创建横向列类型。目前它看起来像这样:
我想将表达式“长单词”放在列的垂直中间,并消除删除文本文本文本...字段的错误。我搜索并尝试过,但没有成功。
这是我的最小工作示例:
\documentclass[11pt, a4paper]{article}
\usepackage{lmodern}
\usepackage{array}
\usepackage{graphicx}
\usepackage{multirow}
\usepackage{tabularx}
\usepackage{rotating}
\newcolumntype{R}{>{\begin{sideways}}c<{\end{sideways}}}
\begin{document}
\begin{tabularx}{\textwidth}{|R|X|}
\hline
\rotatebox{270}{1234} & text\\
\hline
long word & text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text \\
\hline
\end{tabularx}
\end{document}
答案1
这里有两件事你可以做来获得你想要的效果。
第一种是重新定义\tabularxcolumn
。当您调用X
列类型时,tabularx
会将该列转换为类型p{...}
列。您可以更改此行为。
\renewcommand{\tabularxcolumn}[1]{m{#1}}
得到一个parbox
居中的。请参阅文档以tabularx
了解更多详细信息。
第二种方法是不使用rotating
包,而是使用graphicx
包的势来定义旋转发生的点。这种方法的缺点是它graphicx
不提供sideways
您使用的环境。因此,为此,您将定义一个新的sideways
环境。
下面是一个 MWE,它说明了这一点:
\documentclass{article}
%%--------------------
\usepackage{graphicx}
\makeatletter
\newsavebox{\ingo@sideways@box}
\newenvironment{ingosideways}
{\begin{lrbox}{\ingo@sideways@box}}
{\end{lrbox}\rotatebox[origin=c]{90}{\usebox{\ingo@sideways@box}}}
\makeatother
%%--------------------
%%\usepackage{rotating}
\usepackage{array}
\usepackage{tabularx}
\newcolumntype{R}{>{\begin{ingosideways}}c<{\end{ingosideways}}}
%%--------------------
\usepackage{lipsum}
\pagestyle{empty}
\begin{document}
{\renewcommand{\tabularxcolumn}[1]{m{#1}}%
\begin{tabularx}{\textwidth}{| R | X |}\hline
\rotatebox[origin=c]{-90}{1234} & text \\\hline
{This is a very long entry for this column} & {\let\par\relax\lipsum[1-2]} \\\hline
\end{tabularx}}
\end{document}
我已将重新定义括在一个组内,以便重新定义不会对文档中以后 \tabularxcolumn
使用环境产生不利影响。tabularx
此外,这里的使用也lipsum
带来了一些错误白色空间使得居中看起来不平衡:正确的我还临时\par
在调用的范围内重新定义了此lipsum
。在您自己的文档中,您不需要进行此更正!
答案2
如果tabularx
不是必须的话,我建议使用以下套餐cals
:
\documentclass{article}
\usepackage{cals}
\usepackage{rotating}
\usepackage{lipsum}
\begin{document}
\begin{calstable}
\colwidths{{1.1cm}{12cm}}
\brow
\alignC\cell{1234}
\alignL\cell{text}
\erow
\brow
\alignC\cell{\vfil\begin{sideways}long word\end{sideways}}
\alignL\cell{\lipsum[1-2]}
\erow
\end{calstable}
\end{document}