Неопределенная последовательность управления на отступе \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завершается ошибкой subj на строке 180 журнала.https://pastebin.com/HmRdN0Vc.

Кто-нибудь может объяснить, что здесь не так?

решение1

@обычно не может быть частью имени команды, поскольку имеет catcode 12 (другое), в то время как символы имени команды должны иметь catcode 11 (буква). Решение состоит в том, чтобы обернуть ваш фрейм, \makeatletter ... \makeatotherчтобы изменить catcode @должным образом (см. такжеэтот вопрос):

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

Что касается проблемы использования этих макросов внутри фрейма, beamerпохоже, не обрабатывает содержимое фрейма в обычном режиме построения абзаца, а считывает его содержимое в виде аргумента вызова макроса. В этот момент все catcodes внутри фрейма фиксированы и больше не могут быть изменены. \makeatletterтаким образом, не будет иметь никакого эффекта. fragileОднако есть возможность разрешить содержимое с изменениями catcode:

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

Связанный контент