\ifdefined 中定义的命令不起作用

\ifdefined 中定义的命令不起作用

这为什么MWE不起作用?

\begin{filecontents*}[overwrite]{myClass.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myClass}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
\LoadClass{article}
\def\fullname#1{\gdef\@fullname{#1}}
%
\ifdefined\@fullname
\def\myTable{%
    \begin{tabular}{ll}
    Some & Text\\
    \@fullname & Text
    \end{tabular}%
}
\else
    \def\myTable{Why not defined?!}
\fi
\end{filecontents*}

\documentclass{myClass}
\begin{document}
    \fullname{Defined}
    \myTable
\end{document}

答案1

按照 OP 的构造,\ifdefined测试是在类加载时执行的。相反,它应该在文档阶段执行。我在这里通过将测试包含在 的定义中来实现这一点\myTable

编辑:我还改变了实际打印出“警告”\else的条件\MyTable,而不仅仅是定义它。

\begin{filecontents*}[overwrite]{myClass.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myClass}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
\LoadClass{article}
\def\fullname#1{\gdef\@fullname{#1}}
%
\newcommand\myTable{%
 \ifdefined\@fullname
    \begin{tabular}{ll}
    Some & Text\\
    \@fullname & Text
    \end{tabular}%
 \else
    Why not defined?!
 \fi
}
\end{filecontents*}

\documentclass{myClass}
\begin{document}
    \fullname{Defined}
    \myTable
\end{document}

在此处输入图片描述

相关内容