问题 MWE 的分析

问题 MWE 的分析

我正在尝试将样式命令应用于表列的每个单元格。

我定义了一个新命令调用minted

\newcommand{\ccode}[1]{\mintinline{c}{#1}}

然后,我在表的标题定义中应用此命令:

\begin{tabular}{| >{\ccode}{l} | l |}

然而,这会导致\ignorespaces输出文件中出现一些随机弹出。

以下是 MWE 和相应的输出。

\documentclass{article}

\usepackage{minted}
\usepackage{collcell}

\newcommand{\ccode}[1]{\mintinline{c}{#1}}

\begin{document}

\begin{tabular}{| >{\ccode}{l} | l |}
    \hline
    int foo (int a, int b) & Foos a and b. \\ \hline
    int bar (int* a, int* b) & Bars a and b. \\ \hline
\end{tabular}

\end{document}

输出文件

有人知道发生了什么吗?这可能与包裹有关吗minted

我在 Ubuntu 14.04 上运行 TeX Live 2013。

感谢您的帮助。


有关的

如何在每个表列上执行命令

\newcolumntype 命令如何工作?

答案1

通常,LaTeX\ignorespaces在单元格的开始和\unskip结束处添加以自动删除单元格内容开始和结束处的空格。

该示例加载了包collcell,但并未使用它。其用法示例如下:

\documentclass{article}

\usepackage{minted}
\usepackage{collcell}

\newcommand{\ccode}[1]{\mintinline{C}{#1}}

\begin{document}

\begin{tabular}{| >{\collectcell{\ccode}}l<{\endcollectcell} | l |}
    \hline
    int foo (int a, int b) & Foos a and b. \\ \hline
    int bar (int* a, int* b) & Bars a and b. \\ \hline
\end{tabular}

\end{document}

结果

PS:我必须使用C(大写)作为语言名称才能获得正确的输出。

问题 MWE 的分析

首先对问题的 MWE 进行一些修改:

  • 大写C作为语言名称,
  • collcell不需要包,但它会加载包array,该包实现<>用于表的列规范。

修改后的 MWE:

\documentclass{article}

\usepackage{array}
\usepackage{minted}

\newcommand{\ccode}[1]{\mintinline{C}{#1}}

\begin{document}

\begin{tabular}{| >{\ccode}l | l |}
    \hline
    int foo (int a, int b) & Foos a and b. \\ \hline
    int bar (int* a, int* b) & Bars a and b. \\ \hline
\end{tabular}

\end{document}

问题中的 MWE 结果

\ccode插入到单元格内容的前面。LaTeX 会自动用 和 包围单元格内容,\ignorespaces\unskip删除单元格开头和结尾的空格。然后第一个单元格变成:

 \ccode \ignorespaces int foo (int a, int b)\unskip

由于缺少花括号, 的参数\ccode是第一个标记\ignorespaces。 其余部分int foo (int a, int )\unskip设置为纯文本。

\unskip可以用作参数的结束标记,并\ignorespaces可以通过将其添加到定义的参数文本中来吸收\ccode

\def\ccode\ignorespaces#1\unskip{\mintinline{C}{#1}}

完整示例:

\documentclass{article}

\usepackage{array}
\usepackage{minted}

\def\ccode\ignorespaces#1\unskip{\mintinline{C}{#1}}

\begin{document}

\begin{tabular}{| >{\ccode}l | l |}
    \hline
    int foo (int a, int b) & Foos a and b. \\ \hline
    int bar (int* a, int* b) & Bars a and b.\\ \hline
\end{tabular}

\end{document}

cellcoll隐藏了这些内部结构,提供了更易读、更易于维护的界面。

相关内容