我尝试为作者和标题命令实现一个元级别,因为大多数样式文件都希望它们有一点不同,并且我希望能够轻松地更改样式文件。
长话短说,我发现amsart
当我将宏插入到时,该类的行为很奇怪\title{}
。它不会抛出错误,但不会将标题大写。但是它仍将以粗体排版。
所以既没有完全没有效果,也没有完全有效果。我也尝试将其放置\expandafter
在我能想到的所有地方,但显然我不太理解这个命令。
\documentclass[a4paper,reqno]{amsart}
\usepackage[utf8]{inputenc}
\begin{document}
\newtoks\mytitleA
\mytitleA={This is a title}
\newcommand{\mytitle}{This is a title}
\newcommand{\myauthor}{This is me}
% toggle the following commands to see that only the last version
% produceses the correct layout
%\title{\the\mytitleA}
%\title{\mytitle}
\title{This is a title}
% for the author I cannot spot a difference
\author{\myauthor}
\author{This is me}
\maketitle
\end{document}
其他样式文件(例如)似乎不会对标题进行不同的排版,如果它嵌套在宏中,至少我无法分辨出区别。因此,或的实现article
可能存在问题。amsart
\title{}
\maketitle
有没有办法解决这个问题或者至少让嵌套宏工作?
答案1
你忘了一个做工作,即
\expandafter\title\expandafter{\the\mytitleA}
当然,\the
前面什么都\mytitleA
不能避免,因为\the
为了传递\toks
寄存器的内容,这是必要的。
有什么问题?默认情况下amsart
只使用\uppercase
(它不应该,但那是另一个问题)。
您可以通过强制使用加载来避免textcase
此问题,以便在完成其工作之前进行完整(受保护)的扩展。amsart
\MakeTextUppercase
\uppercase
使用\toks
登记册
\documentclass[a4paper,reqno]{amsart}
\usepackage{textcase}
\newtoks\mytitleA
\mytitleA={This is a title}
\newcommand{\myauthor}{This is me}
\begin{document}
\title{\the\mytitleA}
\author{\myauthor}
\maketitle
\end{document}
使用命令
\documentclass[a4paper,reqno]{amsart}
\usepackage{textcase}
\newcommand{\mytitle}{This is a title}
\newcommand{\myauthor}{This is me}
\begin{document}
\title{\mytitle}
\author{\myauthor}
\maketitle
\end{document}