\linebreak \\ 导致 \NewEnviron 的 \BODY 内出现错误

\linebreak \\ 导致 \NewEnviron 的 \BODY 内出现错误

我有一些代码,主要基于这个问题的解决方案: 我问的其他问题 代码如下所示,到目前为止,除了以下内容外,其他都有效\\

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[german]{babel}
\usepackage{environ}
\usepackage{etoolbox}


%%Environments
%Liederbuchumgebung
\newenvironment{Liederbuch}[1]
  {\def\liederbuchtmp{#1}\csgdef{LH#1}##1##2{\csuse{lied;#1;##1;##2}}}
  {}
%Liedumgebung
\NewEnviron{Lied}[2]{\csxdef{lied;\liederbuchtmp;#1;#2}{\BODY}}

%Forward to Environments
\newcommand*\LHsong[3][n]{\csuse{lied;#2;#1;#3}}


%use of Liederbuchenv.
\begin{Liederbuch}{Test}
%use of Liederbuchenv.
\begin{Lied}{t}{1}
%content begins here.
Lied Nummer 1, Format t
%Problem occurs here. If you delete the \\ it seems to throw a exhaustive expansion error (which I don't understand)
Hänschen klein, %\\
ging allein %\linebreak
in die weite Welt hinein. %\newline
Stock und Hut, 
steht im gut. 
Ist gar wohlgemut.
\end{Lied}
\begin{Lied}{nt}{2}
Lied Nummer 2, Format nt
\end{Lied}
\begin{Lied}{n}{336}
Lied Nummer 336, Format n
\end{Lied}
\end{Liederbuch}

\begin{document}
\LHsong[t]{Test}{1}
\end{document}

我怎样去\\上班?

答案1

大多数 latex 命令都不安全\xdef(这就是为什么 latex 具有\protect机制和\protected@edef),但在这里你只是想要我认为并且根本\let不需要扩展。\BODY

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[german]{babel}
\usepackage{environ}
\usepackage{etoolbox}


%%Environments
%Liederbuchumgebung
\newenvironment{Liederbuch}[1]
  {\def\liederbuchtmp{#1}\csgdef{LH#1}##1##2{\csuse{lied;#1;##1;##2}}}
  {}
%Liedumgebung
\NewEnviron{Lied}[2]{\global\cslet{lied;\liederbuchtmp;#1;#2}\BODY}

%Forward to Environments
\newcommand*\LHsong[3][n]{\csuse{lied;#2;#1;#3}}


%use of Liederbuchenv.
\begin{Liederbuch}{Test}
%use of Liederbuchenv.
\begin{Lied}{t}{1}
%content begins here.
Lied Nummer 1, Format t
%Problem occurs here. If you delete the \\ it seems to throw a exhaustive expansion error (which I don't understand)
Hänschen klein, \\
ging allein %\linebreak
in die weite Welt hinein. %\newline
Stock und Hut, 
steht im gut. 
Ist gar wohlgemut.
\end{Lied}
\begin{Lied}{nt}{2}
Lied Nummer 2, Format nt
\end{Lied}
\begin{Lied}{n}{336}
Lied Nummer 336, Format n
\end{Lied}
\end{Liederbuch}

\begin{document}
\LHsong[t]{Test}{1}
\end{document}

相关内容