使用自己的命令换行

使用自己的命令换行

为了将视觉外观与语义分离,我定义了一个新命令来设置描述参数的单词的样式:

\newcommand{\param}[1]{\texttt{#1}}

是否可以使用此命令自动换行表中的列?我正在寻找类似常见的

\newcolumntype{C}{ >{ \( }c<{ \) } }

仅使用我自己的命令,需要一对括号而不是圆括号

\newcolumntype{P}{ >{ \param\{ }l<{ \} }

显然括号不起作用,因为它们会弄乱\newcolumntype定义。

我还希望能够从此行为中排除某个单元格,以便以不同的方式设置表头样式。siunitx处理和S类型列的方式类似。在那里,您可以通过将它们包装在 中来排除某个单元格{brackets}


我意识到在这种情况下,我可以通过将整个列切换为等宽字体来实现这一点

\newcolumntype{P}{ >{\tt}l }

并将标题切换为普通字体\normalfont{header}。但这会将视觉呈现固定为等宽字体。我稍后可能会决定将\param宏的外观更改为类似这样\newcommand{\param}[1]{Parameter \texttt{#1}},列类型不会自动适应。这首先违背了使用特殊列类型的目的。


示例表:

\documentclass{article}
\usepackage{booktabs,siunitx}
\newcolumntype{P}{ >{\tt}l }

\begin{document}
\begin{tabular}{PsS[table-figures-integer=4,table-figures-decimal=1]}
    \toprule
    {Parameter}  & {Unit} & {Value} \\
    \midrule
    MIN\_RADIUS  & \mm    & 8.3     \\
    PENALTY      &  -     & 1000    \\
    \bottomrule
\end{tabular}
\end{document}

示例表

答案1

你想使用collcell。但是请注意,此技巧对或 之类的列{...}不起作用。用作解决方法。PSs\multicolumn{1}{l}{...}

\documentclass{article}
\usepackage{booktabs,siunitx,collcell}

\newcommand{\param}[1]{\texttt{#1}}
\newcolumntype{P}{ >{\collectcell\param}l<{\endcollectcell} }

\begin{document}

\begin{tabular}{PsS[table-format=4.1]}
\toprule
\multicolumn{1}{l}{Parameter}  & {Unit} & {Value} \\
\midrule
MIN\_RADIUS  & \mm   & 8.3     \\
PENALTY      & {--}  & 1000    \\
\bottomrule
\end{tabular}

\bigskip
\renewcommand{\param}[1]{\textit{#1}}

\begin{tabular}{PsS[table-format=4.1]}
\toprule
\multicolumn{1}{l}{Parameter}  & {Unit} & {Value} \\
\midrule
MIN\_RADIUS  & \mm   & 8.3     \\
PENALTY      & {--}  & 1000    \\
\bottomrule
\end{tabular}

\end{document}

第二个表已使用修改后的\param宏进行排版,以显示它仅依赖于的当前定义\param

在此处输入图片描述

相关内容