如何在 tabularx 中使用 fancyvrb Verbatim?

如何在 tabularx 中使用 fancyvrb Verbatim?

使用时tabularp可以Verbatim使用 minipage 在表中插入块

\documentclass[]{article}%
\usepackage{fancyvrb}
\begin{document}    
\begin{tabular}{|p{2in}|p{3in}|}
\hline
col 1 & \begin{minipage}{3in}
         \begin{Verbatim}
             test
         \end{Verbatim}
        \end{minipage}
\\\hline
\end{tabular}    
\end{document}

但是,我在该列中使用tabularx和 而不是Xp但这不起作用

\documentclass[]{article}%
\usepackage{tabularx}
\usepackage{fancyvrb}
\begin{document}

\begin{tabularx}{\paperwidth}{|p{2in}|X|}
\hline
col 1 & \begin{minipage}{4in}
         \begin{Verbatim}
             test
         \end{Verbatim}
        \end{minipage}
\\\hline
\end{tabularx}

\end{document} 

错误是

>pdflatex foo.tex 
This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012/Debian)
 restricted \write18 enabled.
.....
Style option: `fancyvrb' v2.7a, with DG/SPQR fixes, and firstline=lastline fix 
<2008/02/07> (tvz) (/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
)) (./foo.aux)
! Argument of \FV@BeginScanning has an extra }.
<inserted text> 
                \par 
l.14 \end{tabularx}

起初我以为我可能需要{}在迷你页面周围添加额外内容,但这没有帮助

\documentclass[]{article}%
\usepackage{tabularx}
\usepackage{fancyvrb}
\begin{document}

\begin{tabularx}{\paperwidth}{|p{2in}|X|}
\hline
col 1 & {\begin{minipage}{4in}
         \begin{Verbatim}
             test
         \end{Verbatim}
        \end{minipage}
        }
\\\hline
\end{tabularx}

\end{document} 

接下来,我删除了{}并用替换Xp所以现在它与相同tabular,但这也不起作用:

\documentclass[]{article}%
\usepackage{tabularx}
\usepackage{fancyvrb}
\begin{document}

\begin{tabularx}{\paperwidth}{|p{2in}|p{3in}|}
\hline
col 1 & \begin{minipage}{3in}
         \begin{Verbatim}
             test
         \end{Verbatim}
        \end{minipage}       
\\\hline
\end{tabularx}

\end{document} 

接下来,我把它放回去{}并放在p那里,但这也不起作用

\documentclass[]{article}%
\usepackage{tabularx}
\usepackage{fancyvrb}
\begin{document}

\begin{tabularx}{\paperwidth}{|p{2in}|p{3in}|}
\hline
col 1 & {\begin{minipage}{3in}
         \begin{Verbatim}
             test
         \end{Verbatim}
        \end{minipage}       
        }
\\\hline
\end{tabularx}

\end{document} 

问题是:如何Verbatim使用tabularx

假设通过魔术可以实现这一点,我想使用X实际而不是p因为我想告诉它使用所有剩余的空间。

但是minipage它需要宽度,但当它位于一X列中时,我不知道该列的宽度。如何处理 minipage 需要宽度值,但它位于一X列中的情况?

但首先,我想知道是否Verbatim有可能在里面tabularx

答案1

简短的回答是,不可能(如记录所示)tabularx将其主体读取为宏参数,并且不能verbatim在宏中使用。

你能做的是

在此处输入图片描述

\documentclass[]{article}%
\usepackage{tabularx}
\usepackage{fancyvrb}
\newsavebox\mybox
\begin{document}


\begin{lrbox}{\mybox}\begin{minipage}[t]{3in}
         \begin{verbatim}
             test \ $ {
         \end{verbatim}
\end{minipage}\end{lrbox}

\noindent
\begin{tabularx}{\textwidth}{|X|p{3in}|}
\hline
col 1 & \usebox\mybox
\\\hline
\end{tabularx}

\noindent X\dotfill X



\end{document} 

我认为您并不真正想要\paperwidth这样的宽度,而且您必须有一X列,否则tabularx就无法对您提供的目标宽度做任何事情。

答案2

刚刚遇到这个问题。使用我的cprotectinside包:

\documentclass{article}
\usepackage{tabularx}
\usepackage{cprotectinside}
\usepackage{fancyvrb}
\begin{document}

\cprotectinside{@}`
\begin{tabularx}{\textwidth}{|X|p{3in}|}
\hline
col 1 & @\begin{minipage}{3in}
         \begin{Verbatim}
             test \ $ {
         \end{Verbatim}
        \end{minipage}@
\\\hline
\end{tabularx}
`

\end{document} 

与大卫卡莱尔的回答相同的假设适用。

输出正如你所期望的:

输出图像

\verb请注意,这里不能使用正常值,因为tabularx环境会重新定义它以“故意”使其更加受限。但如果你坚持,有一个解决方法,\let\normalverb\verb然后使用\normalverb,请参阅我的其他答案举个例子。

相关内容