
根據範例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}