使用时tabular
,p
可以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
和 而不是X
。p
但这不起作用
\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}
接下来,我删除了{}
并用替换X
,p
所以现在它与相同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
,请参阅我的其他答案举个例子。