以最简单的形式,我试图做一个包装文件内容环境的环境,并在文件写入后做一些事情。
\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}