在 xparse 中使用 filecontents

在 xparse 中使用 filecontents

我正在尝试使用以下方法重现此问题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

以上方法效果很好。我尝试同时使用NewDocumentCommandNewDocumentEnvironment,以及同时使用begin/endcsname/ 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}

在此处输入图片描述

相关内容