大写整个 \newenvironment

大写整个 \newenvironment

我尝试使用以下代码将整个新环境大写,但没有成功:

\newenvironment{upc}{
   \MakeUppercase\bgroup
}
{
   \egroup
}

以下是一个例子:

\begin{upc}
    23 Harrogate Dr. Foo, PA 17036 \\
    717.576.----- \quad [email protected]
\end{upc}

但情况并没有改变。

答案1

该包environ允许在宏中捕获环境体:

\documentclass{article}
\usepackage{environ}

\NewEnviron{upc}{\MakeUppercase{\BODY}}

\begin{document}
\begin{upc}
  \noindent
  23 Harrogate Dr. Foo, PA 17036 \\
  717.576.--- \quad [email protected]
\end{upc}
\end{document}

结果

居中版本。 之后\centering,宏\\不再健壮,需要以 为前缀\protect。 以下示例无需通过包进行\\健壮。\robustifyetoolbox

结尾也很重要,因为 TeX 使用段落结尾处的\par设置。如果段落结尾在环境之后,则的设置将丢失并使用先前的设置。\centering\centering

\documentclass{article}
\usepackage{environ}
\usepackage{etoolbox}

\NewEnviron{upc}{%
  \par
  \centering
  \robustify\\%
  \MakeUppercase{\BODY}%
  \par
}

\begin{document}
\begin{upc}
  23 Harrogate Dr. Foo, PA 17036 \\
  717.576.---\quad [email protected]
\end{upc}
\end{document}

居中结果

相关内容