定义一个 \emph 行为不同的宏

定义一个 \emph 行为不同的宏

我想声明一个宏\myemph,将其参数设置为斜体。\emph在 中使用时\myemph,应使用粗体。但\emph在 之外使用时\myemph,仍应使用斜体:

\emph{italic, \emph{upright}} % as usual
\myemph{italic, \emph{bold and italic}} % new command

(目前,我不关心嵌套\emph\myemph

我尝试声明下面的宏。这似乎工作正常。但是,当我在章节标题中使用它时,我遇到了奇怪的错误:

\documentclass{article}

\makeatletter
\NewCommandCopy\org@emph\emph
\DeclareTextFontCommand{\bfemph}{\bfseries}
\newcommand{\myemph}[1]{\textit{\RenewCommandCopy\emph\bfemph#1\RenewCommandCopy\emph\org@emph}}
\makeatother

\begin{document}

\myemph{italic, \emph{bold and italic}} % works

\section{\myemph{Section}} % error

\end{document}

(我不确定定义是否\bfemph比仅仅使用有什么好处\textbf。)

我得到的错误是:Argument of \@sect has an extra }。我该如何定义\myemph才能使其在该环境中也能工作?

答案1

您可以\emph使用 来更改其功能\DeclareEmphSequence{<font change command list>}。您可以\myemph通过将其括在组中来将其限制为您的命令:

在此处输入图片描述

\documentclass{article}

\DeclareRobustCommand{\myemph}[1]{%
  \begingroup
    \DeclareEmphSequence{\itshape,\bfseries}%
    \emph{#1}%
  \endgroup}

\begin{document}

\myemph{italic, \emph{bold and italic}} % works

\section{\myemph{Section}} % error

\end{document}

相关内容