Tabular 中的 Minted 环境

Tabular 中的 Minted 环境

我想用 Tabular 创建一个表并将一个 minted 环境放入其中,就像这里一样:如何将铸造环境嵌入表格环境中?

但是,正如该帖子所示,铸造部分在顶部和底部有一些空格,因此它与“测试”评论的高度不相同。有解决方案吗?如何删除空格?

答案1

minted基于包fancyvrb。因此,可以通过禁用 来删除第一个空格\FV@ListVSpace。末尾的空格是由列 的代码引起的p。在单元格末尾添加了一个最终支柱,它仅包含通常的表格支柱框的深度,旨在到达最后一行的末尾。但是环境minted已经关闭,因此是段落模式。返回垂直模式,最后一个支柱会添加一个带有新行的新段落。

以下示例tabminted基于定义环境minted。它应删除开头和结尾处的空格。根据最后一行的深度(\prevdepth),添加最后的支柱以\vspace获得表格中的正常间距行为。它避免了底线闭合。

\documentclass{article}
\usepackage{minted}
\usepackage{booktabs}

\makeatletter
\newenvironment{tabminted}{%
  \let\FV@ListVSpace\relax  
  \minted
}{%
  \endminted
  \unskip   
  \aftergroup\@tabmintedend
}
\newcommand*{\tabminted@finalstrut}[1]{%
  \ifdim\prevdepth>0pt
    \ifdim\dp#1>\prevdepth
      \vskip\dimexpr(\dp#1)-\prevdepth\relax
    \fi
  \else
    \vskip\dimexpr(\dp#1)\relax
  \fi
}
\newcommand*{\@tabmintedend}{%
  \let\@finalstrut\tabminted@finalstrut
}
\makeatother

\begin{document}

\noindent\begin{tabular}{rp{0.5\textwidth}}
\toprule
A & B\\  
\midrule 
testing &
\begin{tabminted}{c}
int main() {
  printf("hello, world");
  return 0;
}
\end{tabminted}
\\
\bottomrule
\end{tabular}

\end{document}

结果

相关内容