将带有一个参数的宏转换为 switch

将带有一个参数的宏转换为 switch

使用该包array,我想使用以下命令为我的表定义一个新的列类型

\newcolumntype{U}{>{\switchon}{l}<{\switchoff}}

但是,我想要使用的命令不是开关,而是一个简单的一元宏,例如\emph\textsc,因此我必须定义\switchon如下

{\switchon some text}

相当于

\macro{some text}

(如果必须这样,我可以忍受\switchon some text \switchoff但我认为这没有必要。)

将开关转换为宏(例如\em\emph非常简单,但我该如何反过来做呢?

编辑

看来,我还必须解决这个问题,它似乎不允许显式\switchoff(因为我需要支持 X 列类型,tabularx而且它似乎不能很好地与 一起工作newcolumntype):

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

其中\theswitch必须有一些\lowercase和其他字体宏的(合理的)组合。\lowercase没有“切换”版本(我认为)这让事情变得有点复杂。

答案1

您可以使用该collcell包将单元格内容提供给宏:

\usepackage{collcell}

\newcolumntype{U}{>{\collectcell\macro}{l}<{\endcollectcell}}

然后\macro将接收单元格内容作为唯一参数,即#1


如果宏应该简单\emph,或者\textsc您可以直接使用“切换”版本。对于\emph它将是\em,对于\textsc它是\scshape。参见例如http://www.cl.cam.ac.uk/~rf10/pstex/latexcommands.htm查找此类宏的表格。

答案2

定义如下宏

\def\switchon#1\switchoff{\foo{#1}}

也许。

相关内容