我想声明一个宏\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}