我想在包中的调用verbatim
中使用环境。ExecuteMetaData
catchfilebetweentags
用例是,我的计量经济学软件创建了一个固定宽度的表格,但我暂时还不想将其转换为合适的表格。我可以将这个固定宽度的表格包装在标签中,并将其发送到日志文件。我还想将表格包装起来,verbatim
以便表格更清晰易读,但当我添加 verbatim 环境时,我收到错误Runaway argument?
。我想使用该catchfilebetweentags
包,这样我就可以避免手动修剪每个表格的页眉和页脚(或计算行号)。
我可以以某种方式将固定宽度类型与catchfilebetweentags
包结合起来吗?
这是我的 MWE。
\documentclass{article}
\usepackage{catchfilebetweentags}
\begin{document}
\ExecuteMetaData[inner]{table}
\end{document}
其中inner.tex
如下。
%<*table>
\begin{verbatim}
col1 col2
1 2
3 4
\end{verbatim}
%</table>
答案1
我没有使用catchfilebetweentags
包,而是调整了我的readarray
包来实现这个技巧,甚至使用了本来会被寻找的标签catchfilebetweentags
。它能够处理每个输入文件的多个表,并穿插任何文本(我认为)。
%
为了处理标签中的搜索,我暂时使用了$
注释字符。我不认为这会搞砸事情,但如果它$
出现在您的表格数据中,可能会发生这种情况。在这种情况下,您可能希望选择其他替换。
已编辑(2016 年 12 月),消除了对已停用的内部readarray
包命令的依赖\record<romannumeral record index>
。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{readarray}[2016-11-07]
\newcounter{row}\global\newcounter{column}\newcounter{rcrd}
%\usepackage{catchfilebetweentags}
\usepackage{ifthen}
\parindent 0in
\def\switchcodes{%
\edef\tmp{\matchcode}%
\edef\matchcode{\altmatchcode}%
\edef\altmatchcode{\tmp}%
\if T\printit\def\printit{F}\else\def\printit{T}\fi%
}
\def\printit{F}
\catcode`\%=12
\catcode`\$=14
\newcommand\extracttables[1]{\bgroup\ttfamily$
\catcode`\%=12
\def\matchcode{%<*table>}
\def\altmatchcode{%</table>}
\readrecordarray{#1}\MyArray
\catcode`\$=14
\setcounter{rcrd}{0}$
\whiledo{\value{rcrd} < \nrecords}{$
\stepcounter{rcrd}$
\ifthenelse{\equal{\MyArray[\arabic{rcrd}]}{\matchcode}}{$
\switchcodes\rule{10ex}{.2ex}\\$
}{\if T\printit\MyArray[\arabic{rcrd}]~\\\fi}$
}$
\catcode`\%=14$
\catcode`\$=3$
\egroup\vspace{-\baselineskip}$
}
\catcode`\%=14
\catcode`\$=3 %
\begin{document}
%\ExecuteMetaData[inner]{table}
Testing...
\extracttables{inner.tex}
Back to normal text
\end{document}
以下是我用于 inner.tex 的内容。请注意,它包含多个表格。提取表格时,我在其上方和下方放置规则,以将其与文档的其余部分区分开来。
this is
my document prior to
%<*table>
col1 col2
1 2
3 4
%</table>
and my
document after
the table
%<*table>
col3 col4
1 8
3 47
%</table>
and $ then some more
then
some more
ps 它实际上并不是逐字逐句地执行,而只是\ttfamily
。如果逐字逐句地执行是必要的,请告诉我,我想我可以扩展解决方案。