将 tabularx X 列复制为新的垂直居中列

将 tabularx X 列复制为新的垂直居中列

我的问题非常类似tabularx X 列类型中的垂直对齐并且似乎有很多类似的问题,所以希望我没有错过某个地方的答案。

但是,我想创建一个新列,它是tabularx X列的副本,不同之处在于新列 Y 是一个mp列相比的列(X默认情况下,如文档中所述)。

\tabularxcolumn - X 的默认定义是 p{#1}。

\def\tabularxcolumn#1{p{#1}}

所以我想定义一个新的列类型,例如

\newcolumntype{Y}{>{\centering\arraybackslash}X}

然后将 Y 列类型转换为m而不是p当前的类型。这样我就可以保留 X 的原始定义。如果我使用

\renewcommand{\tabularxcolumn}[1]{>{\small}m{#1}}

然后 X 被更改为m不需要的列。我需要类似

\renewcommand{Y}[1]{>{\small}m{#1}}

但那不起作用。

谢谢你的帮助,

答案1

您需要修补第二个类似 X 的列类型,这只是复制了 X 的定义,因此您可以分别指定\tabularxcolumnforX\tabularxycolumnforY

在此处输入图片描述

\documentclass[a4paper]{article}
\addtolength\textwidth{5cm}
\addtolength\oddsidemargin{-3cm}
\usepackage{etoolbox,tabularx}
\tracingtabularx
\makeatletter
\newcolumntype{Y}{}
\def\tabularxycolumn#1{m{#1}}
\def\TX@newycol{\newcol@{Y}[0]}
\patchcmd\TX@endtabularx
  {\expandafter\TX@newcol}%
  {\expandafter\TX@newycol\expandafter{\tabularxycolumn{\TX@col@width}}%
   \expandafter\TX@newcol}
  {}
  {}
\patchcmd\TX@endtabularx
  {\def\NC@rewrite@X}%
  {\def\NC@rewrite@Y{\NC@rewrite@X}%
   \def\NC@rewrite@X}
  {}
  {}
\makeatother
\begin{document}


\begin{tabularx}{6cm}{XXc}
aa aaa aaa aaa aaa aaa&
bb bb bb bb bb bb bb bb bb bb bb bb bb bb b &
aa aaa
\end{tabularx}
\begin{tabularx}{6cm}{XYc}
aa aaa aaa aaa aaa aaa&
bb bb bb bb bb bb bb bb bb bb bb bb bb bb b &
aa aaa
\end{tabularx}
\begin{tabularx}{6cm}{YYc}
aa aaa aaa aaa aaa aaa&
bb bb bb bb bb bb bb bb bb bb bb bb bb bb b &
aa aaa
\end{tabularx}
\end{document}

相关内容