我希望能够通过另一个命令更改环境命令的行为。它们应该一直更改到环境结束。这就是我所想的,如果我在newcommand
环境内部创建一个,然后renew
用另一个命令来执行它。但事实证明,它在下次调用时会以某种方式恢复到旧定义。
这个技巧的目的是指定一种新的表格布局。我怎样才能使新定义持久化?
这是一个例子。
这两行看起来都应该像最上面的一行。以下是代码。
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\makeatletter
\newenvironment{score}{%
% Define commands
\newcommand{\chords}[1]{
\end{tabular}\par
\begin{tabular}{@{}l*{8}{@{}l}}
& ##1 \\[-0.2em]
}
\newcommand{\nolyrics}{
\renewcommand{\chords}[1]{
\end{tabular}\par
\begin{tabular}{@{}l@{}ll*{3}{|*{2}{l}}}
& ####1 \\[-0.2em]
}
}
% Layout
\begin{tabular}{@{}l}
}{
\end{tabular}
}
\makeatother
\begin{document}
\begin{score}
\nolyrics % Specifies a new layout for the score
\chords{Fm && D && A && B & C} % This is fine
\chords{D && E && D/F && C} % This is not similarly laid out
\end{score}
\end{document}
答案1
表格中的每个单元格组成一个组。因此,这本质上相当于
\begingroup
\nolyrics rededefines \chords
execute new \chords
\chords ends the current cell (inserts a & + \\) and thus the group
\endgroup
\begingroup
execute original \chords
...
你可以\renewcommand
使用\gdef\chords####1{