\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 ... \makeatother更改目錄程式碼(另請參閱@這個問題):

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

至於在框架內使用這些巨集的問題,beamer似乎並沒有以正常的段落建構模式處理框架的內容,而是以巨集呼叫的參數形式讀取其內容。此時,框架內的所有目錄程式碼都已固定,無法再更改。\makeatletter因此不會有任何影響。不過,有一個選項fragile允許更改目錄程式碼的內容:

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

相關內容