环境 {after} 部分中的命令行为异常

环境 {after} 部分中的命令行为异常

以最简单的形式,我试图做一个包装文件内容环境的环境,并在文件写入后做一些事情。

\usepackage[autocompile]{gregoriotex}
\newenvironment{chant}{
  \filecontents[overwrite]{chant.gabc}
}{
  \endfilecontents
  \gregorioscore{chant}
}

使用方式如下:

\begin{document}
  \begin{greg}
  (c3)V. Ju(h)be(h) dom(h)ne(g_') be(h)ne(h)dí(h)ce(d)re.(d.) (::)
  \end{greg}
\end{document}

在某种程度上,一切都运行良好。

  • chant.gabc 已写入。
  • Gregorio 解析 gabc 文件并写入chant-5_2_1.gtex

但是,当生成 PDF 时,PDF 输出文件中会出现一行文字:

\input chant-5_2_1.gtex\relax

这显然只是将命令序列写成文字字符串。这应该是插入吟唱分数的命令。如果我将其放在\gregorioscore{chant}环境定义之外,它就会正确地写入吟唱分数。

那么我在 {after} 部分做错了什么,导致它将命令序列写为文字字符串,而不是解释它,有没有办法让它正确打印实际的吟唱分数?

答案1

filecontents 更改了 catcodes 并且由于您没有组,因此这些更改仍然有效。

\documentclass{article}
\usepackage[autocompile]{gregoriotex}
\newenvironment{chant}{
  \begingroup
  \filecontents[overwrite]{chant.gabc}
}{
  \endfilecontents
  \endgroup
  \gregorioscore{chant}
}
\begin{document}
  \begin{chant}
  (c3)V. Ju(h)be(h) dom(h)ne(g_') be(h)ne(h)dí(h)ce(d)re.(d.) (::)
  \end{chant}
\end{document}

相关内容