我尝试使用 来\isempty
判断宏参数是否为空。使用 时,它运行正常book
,但使用 时,它会给出错误消息beamer
:
! Undefined control sequence.
<write> ...[]{Outline0.0.1.1}{NOT empty}{\Parent2
}% 1
梅威瑟:
%\documentclass{book}
\documentclass{beamer}
\usepackage{xifthen}
\newcommand{\MyMacro}[2][]{
\ifthenelse{\isempty{#1}}{\subsection{empty}}{\subsection{NOT empty}}
}
\begin{document}
\MyMacro[1]{First}
hello
\end{document}
我确实有一个更高级别的单元“部分” \Mysection{title1}{}{title2}
,现在我找到了(可能)原因。看起来有一个“警告”(我正在寻找“未定义”,它跟在“警告”后面)
starting section (./Demo.toc)pdfTeX warning (ext4):
destination with the same identifier (name{Navigation1}) has been already used
, duplicate ignored
<to be read again>
\relax
l.4 ...title1}{}{title2}
pdfTeX warning (ext4): destin
ation with the same identifier (name{page.1}) has been already used, duplicate
ignored
<to be read again>
\relax
l.4 ...title1}{}{title2}
此行指的是我的“部分”。
我的文档包含可打印的源文件,既有“书”的形式,其中最高单位是“章”,也有“投影仪”的形式,其中相同的文本处于“节”级别。这就是为什么我需要使用自己的分段单位,并将其转换为“章”或“节”。这两个本机单位都有可选参数(简称)。
\MEchapter}[2][]{
\section[#1]{#2} % Results in error if #1 empty
\ifthenelse{\isempty{#1}}{\section{#2}}{\section[#1]{#2}} % runs OK
}
也就是说,错误似乎是我试图将一个空参数传递给部分,但方括号是存在的。如果省略方括号,它就可以正常工作。
我看不出有什么理由会这样。
答案1
beamer
为每个部分单元类型定义一个。您的代码中\Parent
没有为您的 -级别 2 定义 - 级别 1。\section
\subsection
要么使用
\newcommand{\MyMacro}[2][]{%
\ifthenelse{\isempty{#1}}{\section{empty}}{\section{NOT empty}}
}
或者
\section{A section}
\MyMacro[1]{First}
hello
明确指定父级。
参考:
答案2
与等相反article
,如果没有父类,该类将不起作用,这就是出现错误消息的原因。book
beamer
\subsection
\section
\Parent2
只需使用\section
之前\MyMacro
(鉴于\MyMacro
确实需要!)
\documentclass{beamer}
\usepackage{xifthen}
\newcommand{\MyMacro}[2][]{%
\ifthenelse{%
\isempty{#1}%
}{%
\subsection{empty}%
}{%
\subsection{NOT empty}%
}%
}
\begin{document}
\section{Foo}
\MyMacro[1]{First}
\MyMacro{First}
hello
\end{document}