在环境开始时打开组并在其结束时关闭它

在环境开始时打开组并在其结束时关闭它

我正在尝试通过\input命令从 LaTeX 内部调用一个程序。调用本身运行良好,但我想将所有内容打包在环境中,以使调用更具可读性。

问题是我每次都需要能够提供一些参数。我知道我可以使用带有多个参数的宏来实现这一点,但使用环境似乎更简洁。

\begin{regression}{pathToFile}
    -param1=x
    -param2=y
\end{regression}

我的目标是将上述代码扩展为

\input{|"java -jar pathToProgram -path=pathtoFile-param1=x -param2=y"}

我目前的方法是这样的:

\newenvironment{regression}[1]{\input{|"java -jar pathToProgram -path='#1'}{"}}

\input所以我的想法是在环境开始时 打开命令并在结束时关闭它。

但问题是 Latex 将整个内容解释为\newenvironment命令的一个大参数,就好像没有after-definition 一样。
如何让 LaTeX 只复制命令参数中的花括号\newenvironment,并在环境扩展后仅将它们视为组分隔符?

答案1

你可以这样做environ

\usepackage{environ}

\NewEnviron{regression}[1]{%
  \input{|"java -jar pathToProgram -path=#1 \BODY"}%
}

但我认为这样做没有什么好处

\begin{regression}{pathtoFile}
-param1=x
-param2=y
\end{regression}

超过

\newcommand{\regression}[2]{%
  \input{|"java -jar pathToProgram -path=#1 #2"}%
}

通过电话

\regression{pathtoFile}{
  -param1=x
  -param2=y
}

相关内容