环境中的 Renewcommand 不会持续存在

环境中的 Renewcommand 不会持续存在

我希望能够通过另一个命令更改环境命令的行为。它们应该一直更改到环境结束。这就是我所想的,如果我在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{

相关内容