重新定义 \emph 为粗体和斜体

重新定义 \emph 为粗体和斜体

我正在尝试重新定义\emph命令,使文本除了斜体之外还加粗,但是当我使用

\newcommand{\bfemph}[1]{\textbf{\emph{#1}}}

\renewcommand{\emph}[1]{\bfemph{#1}}

我收到一条错误消息。第一个命令定义\bfemph可以自行运行,但第二个命令定义却不行。

我将非常感激您对此提供的帮助。

答案1

使用最新的 Latex,你只需

\DeclareEmphSequence{\bfseries\itshape}

对于嵌套,\emph您可以提供额外的声明,用\DeclareEmphSequence逗号分隔。

答案2

与其\emph根据自身的副本进行重新定义,不如从头开始重新定义,使用标准定义作为模型;标准定义非常简单:

% latex.ltx, line 3744:
\DeclareTextFontCommand{\emph}{\em}

因为只有它\em才能完成最艰难的工作。所以我们可以简单地做

\documentclass[11pt]{article}

\let\emph\relax % there's no \RedeclareTextFontCommand
\DeclareTextFontCommand{\emph}{\bfseries\em}

\begin{document}

Here is \emph{emphasized text with something \emph{emphasized} inside}

\end{document}

在此处输入图片描述

但是,双重强调实在是太多了:斜体已经足够突出了。以这种方式重新定义的好处\emph是,您可以简单地注释掉这两行并恢复默认设置。

为什么你的想法行不通?因为有了这些定义,当 TeX 发现

\emph{text}

它将其改变为

\bfemph{text}

然后变成

\textbf{\emph{text}}

反过来又变成了

{<expansion of \textbf>\emph{text}}

抱歉,无限循环:\emph将重新启动机器。

答案3

您不能单独定义命令,而您基本上就是这么做的。最简单的解决方案就是使用以下命令textit

\documentclass[11pt]{article}

\newcommand{\bfemph}[1]{\textbf{\textit{#1}}}
\renewcommand{\emph}[1]{\bfemph{#1}}

\begin{document}
Text \bfemph{Text2} \emph{Text3}
\end{document} 

当然你不需要该bfemph命令:

\documentclass[11pt]{article}

\renewcommand{\emph}[1]{\textbf{\textit{#1}}}

\begin{document}
Text \emph{Text3}
\end{document}

此解决方案没有emph如果以递归方式使用,则具有在模式之间切换的标准行为。

相关内容