我正在尝试使用如下源中的选项创建一个新的列类型,并且所有选项都可以正常工作,除了b
给出以下错误消息的选项:
! Undefined control sequence.
\KV@xcol@b #1->\columncolor
{#1}
当我直接使用时\columncolor}
,如tabularx
下面的第二个,没有问题。为什么?
\documentclass{article}
\usepackage[papersize={90mm,60mm},margin=5mm]{geometry}
\usepackage{array,xkeyval,xcolor,colortbl,tabularx,ragged2e}
\pagestyle{empty}\parindent0pt
% keys for columntype x:
\makeatletter
\define@key{xcol}{w}{\hsize=#1\hsize} % relative width (summarize to 1)
\define@key{xcol}{f}{\leavevmode\color{#1}} % foreground color
\define@key{xcol}{b}{\columncolor{#1}} % background color
\define@key{xcol}{r}[]{\RaggedLeft} % justify right
\define@key{xcol}{l}[]{\RaggedRight} % justify left (the default)
\define@key{xcol}{c}[]{\Centering} % center
\makeatother
\newcolumntype{x}[1]{>{\RaggedRight\setkeys{xcol}{#1}}X}
\begin{document}
% the b=yellow should make \colorcolumn{yellow}, but \columncolor is undefined?
\begin{tabularx}{80mm}[t]{|x{f=blue,b=yellow,w=.7,c}|x{w=.3,r}|}\hline
Hello & World\\\hline
\end{tabularx}
\bigskip
% using \columncolor directly: no problem:
\begin{tabularx}{50mm}[t]{|>{\columncolor{yellow}}x{f=blue,w=.7,r}|x{w=.3}|}\hline
Hello & World\\\hline
\end{tabularx}
\end{document}
答案1
\columncolor
它实际上并不是一个执行的命令,而是一个插入标记位置的标记(事实上,它根本没有被定义为命令)。
你colortbl
发现
\expandafter\CT@extract\the\toks\@tempcnta\columncolor!\@nil
...
\def\CT@extract#1\columncolor#2#3\@nil{%...
因此\CT@extract
需要看到一个明确的\columncolor
标记,而不是隐藏在宏或括号组后面。
这样做的原因有些不明确:-)