随着array
包我们可以定义一个新列说明符可以在tabular
环境中使用(例如\newcolumntype{A}[{>{\centering \arraybackslash}m{2cm}}
)。
甚至允许用类似的参数定义新的列类型\newcolumntype{B}[1]{>{\centering \arraybackslash}m{#1}}
。
现在我需要让新的列类型参数具有默认值,\newcolumntype{C}[1][2cm]{>{\centering \arraybackslash}m{#1}}
但这会导致编译错误。
所以我问是否有可能\newcolumntype
为命令提供默认参数?
平均能量损失
\documentclass[]{article}
\usepackage{array}
\newcolumntype{A}[1]{>{\centering \arraybackslash}m{#1}}
%\newcolumntype{B}[1]{3cm]{>{\centering \arraybackslash}m{#1}}
\begin{document}
\begin{tabular}{|A{2cm}|A{4cm}|}\hline
column width = 2 cm & column width= 4cm \\\hline
hello world hello world hello world & hello world hello world hello world\\\hline
\end{tabular}
\end{document}
答案1
如果不对包进行大量的修改,您就无法做到这一点array
,添加声明的可能性很简单,但是用于替换定义的列类型的机制没有任何有助于检测可选参数的东西,因此您必须更改该机制,并且在不破坏依赖于它的包(colortbl,tabularx,tabulary,...)的情况下做到这一点可能会很棘手。
如果您接受一个空参数而不是可选参数,这很容易,因此与破坏现有代码的风险相比,这种改变的好处相当令人沮丧,不鼓励添加这样的功能。
\newcolumntype{A}[1]{>{\centering \arraybackslash}m{\if!#1!3cm\else#1\fi}}
允许A{}
使用默认宽度3cm