我正在尝试使用以下方法重现此问题xparse
:
\begin{filecontents}{sections/autogen/somefile.tex} % Line to auto-produce
\begin{myotherenvironment}
Do lots of stuff
\end{myotherenvironment}
\end{filecontents} % Line to auto-produce
\input{sections/autogen/somefile.tex} % Line to auto-produce
以上方法效果很好。我尝试同时使用NewDocumentCommand
和NewDocumentEnvironment
,以及同时使用begin
/end
和csname
/ endcsname
。我展示了尝试#2
手动包含 ,之前我只是尝试使用NewDocumentEnvironment
一个必需参数
\NewDocumentCommand \writefile { m m } {%
\typeout{Writing file sections/autogen/#1.tex}%
\csname filecontents*\endcsname{sections/traces/autogen/#1.tex}%
%\begin{filecontents}{sections/traces/autogen/#1.tex}
#2
%\end{filecontents}}%
\csname endfilecontents*\endcsname%
}%
看起来文件正在生成,但是当使用时NewDocumentEnvironment
\end{writefile}
被插入到生成的文件中filecontents
。使用时NewDocumentCommand
似乎有很多问题。
示例输出文件将包含以下内容:
\captionsetup[table]{name=Listing}
\table[H] \footnotesize
\setlength{\tabcolsep}{2pt}
\tabu to \textwidth {|r@{ }l|l|X|} %{|@{ }r@{:}l|l|X[l]|}
\rowfont{\bfseries} & LPS & MTH & SC \\
\lcell 12 & \lpscell #3 & \mthcell #4 & \sccell {\lstinline[style=jt]{foo}}
\lcell 12 & \lpscell #3 & \mthcell #4 & \sccell {\lstinline[style=jt]{foo}}
\lcell 12 & \lpscell #3 & \mthcell #4 & \sccell {\lstinline[style=jt]{foo}}
\endtabu
\endtable
\captionsetup[table]{name=Table}
答案1
任何使用宏的方法都会失败,因为您想要保留内容并使用\lstinline
。
您可以VerbatimOut
从进行利用fancyvrb
。
\documentclass{article}
\usepackage{fancyvrb,xparse}
\usepackage{caption,tabu,listings}
\NewDocumentEnvironment{doubletable}{m}
{\captionsetup[table]{name=Listing}%
\table[htp]
\VerbatimOut{sections/autogen/#1}}
{\endVerbatimOut
\input{sections/autogen/#1}
\label{repeattable@#1}
\endtable}
\NewDocumentCommand{\repeattable}{m}{%
\begingroup\captionsetup[table]{name=Listing,list=no}
\begin{table}[!htp]
\renewcommand{\thetable}{\ref{repeattable@#1}}
\input{sections/autogen/#1}
\end{table}
\endgroup
}
\begin{document}
\begin{doubletable}{1}
\footnotesize
\setlength{\tabcolsep}{2pt}
\begin{tabu} to \textwidth {|r@{ }l|l|X|} %{|@{ }r@{:}l|l|X[l]|}
\rowfont{\bfseries} & LPS & MTH & SC \\
x & y & z & \lstinline{foo}
\end{tabu}
\caption{X}
\end{doubletable}
Repeat it
\repeattable{1}
\end{document}