![问题 MWE 的分析](https://linux22.com/image/346144/%E9%97%AE%E9%A2%98%20MWE%20%E7%9A%84%E5%88%86%E6%9E%90.png)
我正在尝试将样式命令应用于表列的每个单元格。
我定义了一个新命令调用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。
感谢您的帮助。
有关的
答案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}
\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
隐藏了这些内部结构,提供了更易读、更易于维护的界面。