有没有办法“breakeline”一个新命令?(只修改 \textbf 颜色)

有没有办法“breakeline”一个新命令?(只修改 \textbf 颜色)

我修改了我的 tex 文件,所以我正在寻找一个 textbf 灰色。现在,新创建的命令不会在文档末尾换行。(与 \colorbox{}{} 存在同样的问题)

我发现了这个:(来自:使用 \textbf{} 时更改一般颜色

  • \let\oldtextbf\textbf \renewcommand{\textbf}[1]{
    \textcolor{gray}{\oldtextbf{#1}} }

但在数学模式上出现了问题,因为我做了很多这样的事情:$ \textbf{something} $

我的 tex 代码非常大,所以我不想改成这样:$ \text{ \textbf{something} } $

所以我改变了上面的新命令,并解决了之前的问题:

  • \let\oldtextbf\textbf \renewcommand{\textbf}[1]{ \text{ \textcolor{gray}{\oldtextbf{#1}} } }

我的(真正)问题是:现在,新的 \textbf{} 命令在到达文档末尾时不会“断行”,因此行会超出文档范围。

为什么?我漏掉了什么参数?有没有办法指定一个断行的命令?

(抱歉我的英语不好,我稍后会编辑文本)

答案1

字体命令有钩子。例如,要将某些内容加粗,可以使用bfseries钩子:

\documentclass{article}

\usepackage{xcolor}
\AddToHook{bfseries}{\color{gray}}

\begin{document}
This is some very long text that should hit the end of the line \textbf{but in
gray and bold and very elegant} no longer gray.

$\textbf{Example}$. no longer gray
\end{document}

在此处输入图片描述

答案2

您不需要无条件地将内容装箱,而是\text可以检查是否处于数学模式,\mathcolor如果是,则使用\textcolor

\documentclass{article}

\usepackage{xcolor}

\NewCommandCopy\oldtextbf\textbf
\renewcommand\textbf[1]{\relax\ifmmode\mathcolor{gray}{\oldtextbf{#1}}\else\textcolor{gray}{\oldtextbf{#1}}\fi}

\begin{document}
This is some very long text that should hit the end of the line \textbf{but in
gray and bold and very elegant}.

$\textbf{Example}$.
\end{document}

相关内容