Sequência de controle indefinida no recuo \beamer@leftmargin

Sequência de controle indefinida no recuo \beamer@leftmargin

De acordo com o exemplo dehttp://texdoc.net/texmf-dist/doc/latex/beamer/beameruserguide.pdf#subsubsection.8.2.2o seguinte código que acho que deve funcionar:

\documentclass{beamer}
\usepackage{lipsum}

\begin{document}

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

\end{document}

No entanto, a compilação pdflatex -synctex=1 -interaction=nonstopmode test.texfalha com erro subj na linha 180 do loghttps://pastebin.com/HmRdN0Vc.

Alguém pode explicar o que está errado aqui?

Responder1

@normalmente não pode fazer parte de um nome de comando porque possui catcode 12 (outro), enquanto os caracteres do nome de comando precisam ter catcode 11 (letra). A solução é envolver seu quadro \makeatletter ... \makeatotherpara alterar o código de gato @corretamente (veja tambémessa questão):

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

Quanto à questão de usar essas macros dentro do quadro, beamernão parece processar o conteúdo do quadro no modo normal de construção de parágrafo, mas lê seu conteúdo na forma de argumento de uma chamada de macro. Nesse momento, todos os catcodes dentro do quadro são fixos e não podem mais ser alterados. \makeatletterportanto, não terá nenhum efeito. Porém, existe uma opção fragilepara permitir conteúdos com alterações de catcode:

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

informação relacionada