
Согласно примеру из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}