为什么 \par 不结束这个 \centering?

为什么 \par 不结束这个 \centering?

按照这个答案\par应该可以正确结束 的效果\centering。但是在以下情况下,却没有结束。为什么?

\documentclass{article}

\makeatletter
    \newcommand\@mytitle{} % create macro for title
    \newcommand\mytitle[1]{\renewcommand\@mytitle{#1}}
    \newcommand\@myauthor{} % create macro for author
    \newcommand\myauthor[1]{\renewcommand\@myauthor{#1}}
    \newcommand{\articletitle}{%
        \centering%
        \fontsize{18bp}{18bp}\selectfont%
        \@mytitle\par%
        \vspace{\baselineskip}%
        \fontsize{14bp}{14bp}\selectfont%
        \@myauthor\par%
        \fontsize{12bp}{12bp}\selectfont%
        \vspace{2\baselineskip}\par}%
\makeatother

\mytitle{This is my title}
\myauthor{This is the author}

\AtBeginDocument{\articletitle}

\begin{document}
I start writing here
\end{document}

在此处输入图片描述

答案1

\par不是结束的效果\centering,段落的结束就是 TeX 的地方用途设置的值\centering。可以使用组来限制 的效果\centering。分组之后,组之前的设置再次生效。

\begingroup
  \centering
  ...
  \par
\endgroup

或者{\centering ...\par}

答案2

...进一步阐述Heiko 的回答

宏提供了一种匹配某些参数文本的方法 - 这包括实际的宏及其参数或“分隔符” - 吞噬它们,并用宏的替换文本替换它们 - 外部{..内的所有内容}。这非正式地称为扩展,其中输入流找到一些宏,并将其扩展或替换为其他内容。

就您的示例而言,\articletitle具有以下通用形式:

\newcommand{\articletitle}{\centering <stuff>}

有了替换的概念,every\articletitle就纯粹被\centering <stuff>(外部{...内的所有内容})替换。请注意,虽然它似乎\centering包含在宏定义内的某个范围内,但替换文本没有这样的范围。但是,如果你定义了

\newcommand{\articletitle}{{\centering <stuff>}}

替换文本将是{\centering <stuff>}有限范围(或组)跟随宏替换文本的位置。

因此,为了限制\centering宏内部开关或声明(如)的范围,请确保包含必要的分组{... }(或类似的)。

相关内容