我正在尝试重新定义\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
如果以递归方式使用,则具有在模式之间切换的标准行为。