
Я попытался реализовать метауровень для команд автора и названия, поскольку большинство файлов стилей хотят, чтобы они немного отличались, а я хочу иметь возможность легко изменить файл стиля.
Короче говоря, я заметил, что 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}