如何检查 \maketitle 命令的字段是否为空

如何检查 \maketitle 命令的字段是否为空

有些人知道,我插入命令 \maketitle 的标签,它包含字段 ()@author、@date、\thanks 和 \title)。一切正常,但对于 @thanks,它显示该变量为空,但变量不为空。我尝试使用 tl_if_empty ctf|ntf|Ntf,但它修复了这个问题,但显示不为空的 @author 和 @thanks,即使我的文档中没有它。请帮帮我,我该如何正确检查这个变量是否为空。例如,如果我没有 author,变量 @author 应该是空的。感谢大家的帮助。

\documentclass{article}
\usepackage{tagpdf}
\tagpdfsetup{tabsorder=structure,uncompress,activate-all,add-new-tag=Title/P,interwordspace=true,tagunmarked=false,log/all}
\pagestyle{empty}
\ExplSyntaxOn
\prop_set_from_keyval:Nn \l__kozlovskiy_data_of_title_prop
  {
    @author = H1 ,
    @date   = H1 ,
    @thanks = H1 ,
    @title  = H1 ,
  }
  \makeatletter
\DeclareRobustCommand\thanks[1]{\footnotemark
    \protected@xdef\orig@@thanks{\orig@@thanks
        \protect\footnotetext[\the\c@footnote]{#1}}}
\makeatother
\cs_new_protected:Npn \kozlovskiy_maketitle:
  {
    \tagstructbegin{tag=Title}
\prop_map_inline:Nn \l__kozlovskiy_data_of_title_prop{
\cs_set_eq:cc { orig@##1 } { ##1 }
\tl_if_empty:cTF{##1}
{
\use:c { orig@##1 }
}
{
\cs_gset_protected:cpn { ##1 } {
\tagstructbegin{tag=##2}
\tagmcbegin{tag=##2}
\use:c { orig@##1 } 
\tagmcend
\tagstructend
}
}
}
\__kozlovskiy_original_maketitle:
    \tagstructend
  }
\cs_new_eq:NN \__kozlovskiy_original_maketitle: \maketitle
\cs_gset_protected:Npn \maketitle { \kozlovskiy_maketitle: }
\ExplSyntaxOff
%
\author{alexandr Kozlovskiy}
\date{\today}
\title{test document%
  \thanks{Alexandr Kozlovskiy}
  }
\begin{document}
\tagstructbegin{tag=Document}
\maketitle
\tagstructbegin{tag=P}
\tagmcbegin{tag=P}
Test
\tagmcend
\tagstructend
\tagstructend
\end{document}

答案1

\thanks不会像\author\date\title那样存储其内容。相反,它会出现在这些命令的参数中,然后在输出标题时生成脚注。默认行为是使用\@thanks一系列\footnotemark命令填充宏,这不会发生直到标题是排版的,因此在命令中看不到任何内容,直到\author等设置的值被展开。目前还不完全清楚你想要完成什么,但我怀疑你的部分困难在于不想深入研究代码,其中\maketitle不仅包括\@thanks填充的位置,还包括\@thanks清除的位置。

相关内容