\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}

관련 정보