我必须调整 itemize 环境以适应单独关注,但在这样做时,我以某种方式弄乱了\item
命令,现在它在模式下打印覆盖规范article
。这是一个 MWE:
\documentclass{article}
\usepackage[noxcolor]{beamerarticle}
\let\olditemize\itemize
\let\olditem\item
\let\endolditemize\enditemize
\newenvironment{newitemize}[1][]{%
\let\item\olditem%
\def\Arg{#1}%
\ifx\Arg\empty\olditemize\else\olditemize[#1]\fi%
}{%
\endolditemize%
}
\begin{document}
\begin{frame}
\begin{newitemize}
\item<2-> Why does it print the overlay specification?
\end{newitemize}
\end{frame}
\end{document}
我不明白的是:我先将itemize
列表的所有原始部分保存到olditemize
第一行,然后newitemize
从那里定义。但显然这并没有让我完全回到我刚开始的状态,因为原始版本itemize
没有在article
模式下打印覆盖规范。
有人可以解释一下为什么(以及在哪些方面)我的“newitemize”与标准“itemize”不同吗?
答案1
在这种情况下,您必须让 LaTeX 忽略没有意义的覆盖选项。在其他情况下,它将被打印。
按照我的方式,我重新定义了\item
命令以忽略这个参数(在里面<>
):
\documentclass{article}
\usepackage[noxcolor]{beamerarticle}
\let\olditemize\itemize
\let\olditem\item
\let\endolditemize\enditemize
\makeatletter
\newenvironment{newitemize}[1][]{%
\def\item{\@ifnextchar<
{\WithOverlay}
{\WithoutOverlay}
}
\def\WithOverlay<##1>
{\olditem}
\def\WithoutOverlay
{\olditem}%
\def\Arg{#1}%
\ifx\Arg\empty\olditemize\else\olditemize[#1]\fi%
}{%
\endolditemize%
}
\makeatother
\begin{document}
\begin{frame}
\begin{newitemize}
\item<2-> Why does it print the overlay specification?
\end{newitemize}
\end{frame}
\end{document}
附言:你的问题是为什么。所以,我的回答不是对你的问题(你之前的问题)的建议,而是一种让你了解如何继续下去的方法。(看来你学得很快……祝你 TeXing 愉快!)