如何在表格定义中使用命令?

如何在表格定义中使用命令?

在表格定义中使用命令会导致错误! Missing $ inserted。在这种情况下,\,调用自定义命令时会出现问题。相同的命令在表格定义之外可以正常工作,那么如何在参数中使用命令?

梅威瑟:

\documentclass{article}

\usepackage{calc}
\usepackage{array}

\newcommand{\comtest}[1]{
\begin{tabular}{p{\widthof{#1}}}
#1
\end{tabular}
}

\begin{document}

\setlength\fboxsep{0pt}
\setlength\fboxrule{0.5pt}

\fbox{\comtest{Text\,}}

\end{document}

编辑:我需要使用表格中段落宽度的宽度测量值,以便我可以指定垂直居中多个单元格。下面是一个不太刻意的例子。为简洁起见,删除了填充修饰符。

\documentclass{article}

\usepackage{calc}
\usepackage{array}

%produces an image and following text vertically centered
% [image command, image width, text]
\newcommand{\vcenteredimagetext}[3]{{
\begin{tabular}{@{}>{\centering}m{#2}@{}@{\ }>{\centering\arraybackslash}m{\widthof{#3}}@{}}
#1&#3\\
\end{tabular}
}}

\begin{document}

\vcenteredimagetext{\rule{0.5in}{0.5in}}{0.5in}{\bf{Text}}
\bf{Text}

\end{document}

编辑#2:决定\raisebox选择这里而不是进一步寻求对此方法的修复。

答案1

有趣的....

你真的不想这样做,因为它会计算表格每一行的宽度(你的例子只有一行,但是......)你可以这样做

\documentclass{article}

\usepackage{calc}
\usepackage{array}
\newlength\zz
\newcommand{\comtest}[1]{
\setlength{\zz}{\widthof{#1}}
\begin{tabular}{p{\zz}}
#1
\end{tabular}
}

\begin{document}

\setlength\fboxsep{0pt}
\setlength\fboxrule{0.5pt}


\fbox{\comtest{Text\,}}

\end{document}

从而避免了这种情况,并且有效。

然而可以说你应该起作用的是被声明为一个强命令但它在代码未被激活的\,地方被扩展,因此它选择了错误的(数学模式)。\protect


为了使原始代码正常工作:

\documentclass{article}

\usepackage{calc}
\usepackage{array}

\makeatletter
\def\zzz#1{#1}
\def\@classz{\@classx
   \@tempcnta \count@
   \prepnext@tok
  \def\zzz##1{\unexpanded{\zzz}{\unexpanded{##1}}}%
   \@addtopreamble{\ifcase \@chnum
      \hfil
      \d@llarbegin
      \insert@column
      \d@llarend \hfil \or
      \hskip1sp\d@llarbegin \insert@column \d@llarend \hfil \or
      \hfil\hskip1sp\d@llarbegin \insert@column \d@llarend \or
   $\vcenter
   \@startpbox{\expandafter\zzz\expandafter{\@nextchar}}\insert@column \@endpbox $\or
   \vtop \@startpbox{\expandafter\zzz\expandafter{\@nextchar}}\insert@column \@endpbox \or
   \vbox \@startpbox{\expandafter\zzz\expandafter{\@nextchar}}\insert@column \@endpbox
  \fi}%
\prepnext@tok}

\makeatother


\newcommand{\comtest}[1]{
\begin{tabular}{p{\widthof{#1}}}
#1
\end{tabular}
}

\begin{document}

\setlength\fboxsep{0pt}
\setlength\fboxrule{0.5pt}

%\tracingall
\fbox{\comtest{Text\,}}

\end{document}

相关内容