这为什么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}