我正在尝试使用kvoptions
pacakage 来允许将关键选项传递给我的样式文件。以下是样式文件的 MWE:
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{test}
\newcommand{\rtitle}{TITLE}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{
family=EL,
prefix=EL@
}
\DeclareStringOption[TITLE]{rtitle}
\ProcessKeyvalOptions*
\ifx\EL@rtitle\@empty
\PackageWarningNoLine{\@currname}{Running title is not passed to `rtitle'}
\else
\renewcommand{\rtitle}{\EL@rtitle}
\fi
\makeatletter
\def\@xfootnote[#1]{%
\protected@xdef\@thefnmark{#1}%
\@footnotemark\@footnotetext}
\makeatother
\RequirePackage{fancyhdr}
\fancyhf{}
\fancyhead[L]{\rtitle}
\pagestyle{fancy}
\endinput
这是 tex 文件:
\documentclass[11pt,letterpaper]{article}
\usepackage[rtitle = {A\ TEST\ TITLE}]{test}
\begin{document}
Some random text.\footnote[*]{Some footnote with a special marker.}
\end{document}
问题就在这里。我尝试通过直接使用 \DeclareStringOption 生成的宏而不是使用 \newcommand{\rtitle}{TITLE} 来简化样式文件:
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{test}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{
family=EL,
prefix=EL@
}
\DeclareStringOption[TITLE]{rtitle}
\ProcessKeyvalOptions*
\ifx\EL@rtitle\@empty
\PackageWarningNoLine{\@currname}{Running title is not passed to `rtitle'}
\fi
\makeatletter
\def\@xfootnote[#1]{%
\protected@xdef\@thefnmark{#1}%
\@footnotemark\@footnotetext}
\makeatother
\RequirePackage{fancyhdr}
\fancyhf{}
\fancyhead[L]{\EL@rtitle}
\pagestyle{fancy}
\endinput
这样修改样式文件之后,再编译tex文件会出现错误,提示控制序列未定义。
EL@rtitle
直接使用fancyheader 中的宏有什么问题?
谢谢!
编辑:我意识到与宏存在冲突
\makeatletter
\def\@xfootnote[#1]{%
\protected@xdef\@thefnmark{#1}%
\@footnotemark\@footnotetext}
\makeatother
如果我删除这部分,那么一切都会正常。但是,我应该如何修复这个宏(除了更改顺序)?我仍然需要使用带有特殊标记的脚注。
答案1
软件包文件第二个版本中的错误是因为您\makeatother
在脚注部分之后发出了 ,因此@
不是有效的宏名,并且该命令\fancyhead[L]{\EL@rtitle}
基本上读作\fancyhead[L]{\EL @rtitle}
。由未定义的命令! Undefined control sequence
引发。\EL
默认情况下,在包文件中, 的 catcode@
是“字母”,因此您不需要使用\makeatletter
和\makeatother
,所以我认为最好的解决方案就是删除它们:
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{test}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{
family=EL,
prefix=EL@
}
\DeclareStringOption[TITLE]{rtitle}
\ProcessKeyvalOptions*
\ifx\EL@rtitle\@empty
\PackageWarningNoLine{\@currname}{Running title is not passed to `rtitle'}
\fi
% \makeatletter
\def\@xfootnote[#1]{%
\protected@xdef\@thefnmark{#1}%
\@footnotemark\@footnotetext}
% \makeatother
\RequirePackage{fancyhdr}
\fancyhf{}
\fancyhead[L]{\EL@rtitle}
\pagestyle{fancy}
\endinput