我想global
按照 Mats 的建议,在我维护的包上实现一个选项(这里)。该软件包为sepfootnotes
,建议的修改将允许脚注的内容定义可选地采用全局范围。这将sepfootnotes
与subfiles
软件包兼容。
因此,基本思想是在之前放置一个宏\@namedef
,比如说\sep@scope
,然后让用户将该宏定义为\global
或其他内容以使其保持本地化。
我的问题是:这个其他东西应该是什么?最安全此宏的默认扩展:\relax
?
sepfootnotes.sty(测试版,最小)
\NeedsTeXFormat{LaTeX2e}[1996/06/01]
\ProvidesPackage{sepfootnotes}[2016/07/17 v0.3c Footnotes in separate file]
\DeclareOption{global}{\sep@opt@globaltrue}
\newif\ifsep@opt@global
\ProcessOptions
\newcommand\sep@scope{\relax}
\ifsep@opt@global
\renewcommand\sep@scope{\global}
\fi
\newcommand\sep@namedef[2]{\sep@scope\@namedef{prefix#1}{#2}}
\newcommand\sep@nameuse[1]{\@nameuse{prefix#1}}
\newcommand\sepfootnotecontent{\sep@namedef}
\newcommand\sepfootnote{\sep@nameuse}
\endinput
文档
\documentclass{article}
\usepackage[global]{sepfootnotes}[2016/07/17 v0.3c]
\begin{document}
\begingroup
\sepfootnotecontent{key}{content}
\endgroup
my \sepfootnote{key}
\end{document}
答案1
建议的代码是可以的,尽管更好的默认代码可能是
\newcommand\sep@scope{}
但它引入了四个实际上不需要的 csname(\ifsep@opt@global
,\sep@opt@globaltrue
,\sep@opt@globalfalse
,\sep@scope
替代方案是
\NeedsTeXFormat{LaTeX2e}[1996/06/01]
\ProvidesPackage{sepfootnotes}[2016/07/17 v0.3c Footnotes in separate file]
\newcommand\sep@namedef[2]{\@namedef{prefix#1}{#2}}
\DeclareOption{global}{\renewcommand\sep@namedef[2]{\global\@namedef{prefix#1}{#2}}}
\ProcessOptions
\newcommand\sep@nameuse[1]{\@nameuse{prefix#1}}
\newcommand\sepfootnotecontent{\sep@namedef}
\newcommand\sepfootnote{\sep@nameuse}
\endinput