\beamer@leftmargin インデントに未定義の制御シーケンスがあります

\beamer@leftmargin インデントに未定義の制御シーケンスがあります

例によるとhttp://texdoc.net/texmf-dist/doc/latex/beamer/beameruserguide.pdf#subsubsection.8.2.2次のコードは動作すると思います:

\documentclass{beamer}
\usepackage{lipsum}

\begin{document}

\begin{frame}{E}
\hskip-\beamer@leftmargin
\lipsum[2]
\end{frame}

\end{document}

pdflatex -synctex=1 -interaction=nonstopmode test.texしかし、ログの180行目でsubjエラーが発生してコンパイルが失敗するhttps://pastebin.com/HmRdN0Vc

ここで何が間違っているのか誰か説明できますか?

答え1

@通常、コマンド名の一部にすることはできません。これは、catcode 12 (その他) を持つためです。一方、コマンド名の文字は catcode 11 (文字) を持つ必要があります。解決策は、フレームを で囲んで、\makeatletter ... \makeatothercatcode を@適切に変更することです (こちらも参照)。この質問):

\makeatletter
\begin{frame}{E}
\hskip-\beamer@leftmargin
\lipsum[2]
\end{frame}
\makeatother

フレーム内でこれらのマクロを使用する問題については、beamer通常の段落構築モードではフレームのコンテンツは処理されないようですが、マクロ呼び出しの引数の形式でそのコンテンツが読み込まれます。その時点では、フレーム内のすべての catcode は固定されており、変更できなくなります。\makeatletterしたがって、効果はありません。fragileただし、catcode の変更を含むコンテンツを許可するオプションがあります。

\begin{frame}[fragile]{E}
\makeatletter
\hskip-\beamer@leftmargin
\makeatother
\lipsum[2]
\end{frame}

関連情報