我们正在向一家期刊提交一篇文章,该期刊要求提供照相排版稿件。格式要求作者栏必须大写,但期刊没有提供样式文件。因此,我们正尝试开发自己的.cls
文件,但遇到了困难。
主要问题涉及包含通常在前导命令中找到的\footnote
或命令(例如)。使用将导致类似以下错误\thanks
\author
\author{Arthur Pewtie \thanks{Chartered Accountancy Firm}}
\MakeUppercase{\@author}
Use of \@xfootnotemark doesn't match its definition
可以通过将 侵入定义 ( ) 来避免这种情况\protect
,\author
但\author{Arthur Pewtie \protect\thanks{Chartered Accountancy Firm}}
随后\MakeUppercase
中的.cls
会使整个脚注大写。
我们寻求authblk
帮助,但它能做的最接近的就是用小型大写字母格式化作者区块。
任何建议都将不胜感激。我们确实希望在文件内解决这个问题.cls
,而不是让作者在.tex
文档中提供文章字段的破解方法。
答案1
我的解决方案使用文本大小写包,它修改\MakeUppercase
并提供一个\NoCaseChange
宏。然后我重新定义为在其参数上\author
使用,并为其参数使用。由于宏的工作方式,我需要定义一个辅助宏来包装\MakeUppercase
\thanks
\NoCaseChange
\uppercase
\thanks
\documentclass{article}
\usepackage[overload]{textcase}
\makeatletter
\def\author#1{\gdef\@author{\MakeUppercase{#1}}}
\let\case@thanks\thanks
\def\thanks#1{\NoCaseChange{\case@thanks{#1}}}
\makeatother
\begin{document}
\title{My title}
\author{My Name\thanks{Thanks to the little people}}
\maketitle
\end{document}
答案2
有一些诡计正在发生。
好的,我来分享一下这个秘密。逻辑如下:
\author
我保存了最初定义和的副本\thanks
。我重新定义
\author
如下:a)我重新定义
\thanks
为仅将其参数的副本保存到中ThanksText
。b)
\setbox0
完成将\thanks
的参数放入\author
的阶段\ThanksText
,无需排版任何内容。c) 然后我
\thanks
通过重新定义宏{}
并丢弃其参数来使宏消失。\author
d)我使用以下参数调用已保存的副本:原始
\MakeUppercase
的#1
,除了\thanks
和它的参数被丢弃,所以\MakeUppercase
不会中断;然后是我检查是否
\ThanksText
已定义。如果已定义,则\thanks
使用 调用已保存的副本\ThanksText
。
\documentclass{article}
\usepackage{etoolbox}
\let\svauthor\author
\let\svthanks\thanks
\def\author#1{%
\def\thanks##1{\gdef\ThanksText{##1}}%
\setbox0=\hbox{#1}%
\def\thanks##1{}%
\svauthor{%
\MakeUppercase{#1}%
\ifdef{\ThanksText}{\svthanks{\ThanksText}}{}}%
}
\begin{document}
\title{My title}
\author{My Name\thanks{Thanks to the little people}}
%\author{My Name}
\maketitle
\end{document}