\AddToShipoutPictureFG* 忽略 \@title 宏

\AddToShipoutPictureFG* 忽略 \@title 宏

我正在尝试制作一个占据整个纸张宽度并放置在页面上 (0, 0) 的彩色框。因此我尝试使用eso-pic

\documentclass{article}

\usepackage[margin=4cm]{geometry}
\usepackage{xcolor}
\usepackage{tcolorbox}
\usepackage{eso-pic}

\makeatletter
\def\@maketitle{
    \newpage \null \vskip .7em\begin{center}\let \footnote \thanks { \Huge \@title \par }\vskip 1.5em{\large \lineskip .5em\begin{tabular}[t]{c}\@author \end{tabular}\par \vskip.5em}\end{center}\par \vskip 1.5em
}
\makeatother

\title{The actual title}
\author{Me}

\begin{document}
\AddToShipoutPictureFG*{%
    \AtPageUpperLeft{%
        \raisebox{-\height}{%
            \begin{tcolorbox}[width=\paperwidth,colupper=white,colback=black,colframe=black,arc=0mm,bottom=4em,top=4em,fontupper=\sffamily\bfseries\centering\Large]%
                \Huge Some Title
            \end{tcolorbox}%
        }%
    }%
}

\maketitle

\end{document}

这非常有效: 在此处输入图片描述

现在,我试图将其放入我的\@maketitle重新定义中。所以我尝试了:

\documentclass{article}

\usepackage[margin=4cm]{geometry}
\usepackage{xcolor}
\usepackage{tcolorbox}
\usepackage{eso-pic}

\makeatletter
\def\@maketitle{
    \newpage \null \vskip .7em\begin{center}\AddToShipoutPictureFG*{%
        \AtPageUpperLeft{%
            \raisebox{-\height}{%
                \begin{tcolorbox}[width=\paperwidth,colupper=white,colback=black,colframe=black,arc=0mm,bottom=4em,top=4em,fontupper=\sffamily\bfseries\centering\Large]%
                    \Huge \@title Test
                \end{tcolorbox}%
            }%
        }%
    }\let \footnote \thanks{\large \lineskip .5em\begin{tabular}[t]{c}\@author \end{tabular}\par \vskip.5em}\end{center}\par \vskip 1.5em
}
\makeatother

\title{The actual title}
\author{Me}

\begin{document}
\maketitle
\end{document}

但它忽略了\@title宏: 在此处输入图片描述

我在这里遗漏了什么?

答案1

你应该看看\maketitle(在article.cls类)。虽然它确实调用\@maketitle(因此也是您的(重新)定义),但它也会\@title在 的末尾清除(等等)\maketitle。为什么这很重要?好吧,您正在页面输出期间设置/打印标题(使用eso-pic's \AddToShipoutPictureFG),但不会立即生效。因此,当您设置标题时,\@title不再包含实际标题(实际上,它已设置为\relax)。

您如何解决这个问题?您可以将其存储在设置标题时使用的\@title另一个宏(例如)中。\@temptitle

在此处输入图片描述

\documentclass{article}

\usepackage[margin=4cm]{geometry}
\usepackage{xcolor}
\usepackage{tcolorbox}
\usepackage{eso-pic}

\makeatletter
\def\@maketitle{%
  \global\let\@temptitle\@title% Make \@title available for use later as \@temptitle
  \newpage \null \vskip .7em\begin{center}\AddToShipoutPictureFG*{%
    \AtPageUpperLeft{%
      \raisebox{-\height}{%
        \begin{tcolorbox}[width=\paperwidth,colupper=white,colback=black,colframe=black,arc=0mm,bottom=4em,top=4em,fontupper=\sffamily\bfseries\centering\Large]%
          \Huge \@temptitle
        \end{tcolorbox}%
      }%
    }%
  }\let \footnote \thanks{\large \lineskip .5em\begin{tabular}[t]{c}\@author \end{tabular}\par \vskip.5em}\end{center}\par \vskip 1.5em
}
\makeatother

\title{The actual title}
\author{Me}

\begin{document}

\maketitle

\end{document}

相关内容