我的问题非常类似tabularx X 列类型中的垂直对齐并且似乎有很多类似的问题,所以希望我没有错过某个地方的答案。
但是,我想创建一个新列,它是tabularx
X
列的副本,不同之处在于新列 Y 是一个m
与p
列相比的列(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 的定义,因此您可以分别指定\tabularxcolumn
forX
和\tabularxycolumn
forY
\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}