Latex 方程式:为符号的所有实例着色

Latex 方程式:为符号的所有实例着色

我(和大多数人)发现,当某些变量被突出显示时,方程式会变得更容易阅读。例如:

$$
0 = \frac{\partial}{\partial\color{blue}{z_l}}\big(\|h(z_{l-1})\cdot w_l-\color{blue}{z_l}\| + \lambda \| h(\color{blue}{z_l})\cdot w_{l+1} - z_{l+1}\| \big) 
$$

具有视觉吸引力: 在此处输入图片描述

我的问题:有没有办法做到这一点,而无需用这些命令明确填充方程式\color?理想情况下,我根本不需要更改方程式,只需在方程式周围定义一个块来处理着色即可。我正在寻找类似定义代码块的方法,您可以在其中自动将所有实例替换z_l\color{blue}{z_l}

需要明确的是,我知道大多数编辑器都有“查找->替换”功能,但这不是我想要的——我想装饰我的方程式而不弄乱方程式代码本身。

答案1

z_l(在 OP 澄清目前只需要对实例进行着色后,编辑/简化了代码)

您可以使用 LuaLaTeX 并采用基于预处理器的方法来实现您的目标,如下例所示。

在此处输入图片描述

% !TeX program = lualatex
\documentclass[letterpaper]{article}
\usepackage{xcolor,mathtools}
\DeclarePairedDelimiter{\norm}{\lVert}{\rVert}

\usepackage{luacode}
% The lua function 'color_zl' does the actual work
\begin{luacode}
function color_zl ( s ) 
  s = string.gsub ( s , "z_l" , "\\textcolor{blue}{%0}" )
  return s
end
\end{luacode}

% The lua function is assigned to 'process_input_buffer' callback:
\newcommand{\ZColorOn}{\directlua{luatexbase.add_to_callback(
  "process_input_buffer", color_zl , "color_zl" )}}
\newcommand{\ZColorOff}{\directlua{luatexbase.remove_from_callback(
  "process_input_buffer", "color_zl" )}}

\begin{document}
\ZColorOn % turn on automatic coloring of "z_l" terms
\[
0 = \frac{\partial}{\partial z_l}\bigl(
          \norm[\big]{h(z_{l-1})\cdot w_l-z_l} 
+ \lambda \norm[\big]{h(z_l)\cdot w_{l+1} - z_{l+1}} \bigr) 
\]

\ZColorOff % turn off automatic coloring of "z_l" terms
\[
0 = \frac{\partial}{\partial z_l}\bigl(
          \norm[\big]{h(z_{l-1})\cdot w_l-z_l} 
+ \lambda \norm[\big]{h(z_l)\cdot w_{l+1} - z_{l+1}} \bigr) 
\]
\end{document}

附录如果你想用蓝色字体全部实例z任何下标,而不仅仅是z_l,您应该通过启用几个模式匹配操作来修改 Lua 函数:

function color_zl ( s ) 
  s = string.gsub ( s , "z_%b{}" , "\\textcolor{blue}{%0}" )
  s = string.gsub ( s , "z_(%w)" , "\\textcolor{blue}{%0}" )
  return s
end

第一个模式%b{}匹配任意内容的一对花括号。第二个模式%w匹配单个字母数字字符,例如l1等。

答案2

试着对此做出自己的定义。作为您的案例的起点,以下是示例:

方程

\documentclass{article}
\usepackage{amsmath,xcolor}

\def\zl{{\ensuremath{\color{blue} z_l}}}

\begin{document}
\[0 = \frac{\partial}{\partial\zl}\big(\|h(z_{l-1})\cdot w_l-\zl\| + \lambda \| h(\zl)\cdot w_{l+1} - z_{l+1}\| \big) \]
\end{document}

答案3

例如,你不需要使用标记(或 Lua)来为数学标记着色

在此处输入图片描述

\documentclass{article}
\usepackage{color}

\mathchardef\zmath\mathcode`z
\mathcode`z="8000

{\makeatletter
\def~{\@ifnextchar_{\zzm}{\zmath}}
\catcode`z\active
\global\let z~
}

\def\zzl{l}
\def\zzm_#1{%
 \def\tmp{#1}%
  \ifx\tmp\zzl
  \textcolor{blue}{\zmath_{l}}%
  \else
    \zmath_{#1}%
  \fi}

\begin{document}
\[
0 = \frac{\partial}{\partial z_l}\bigl(\|h(z_{l-1})\cdot w_l-z_l\| + 
\lambda \| z_l)\cdot w_{l+1} - z_{l+1}\| \big) 
\]
\end{document}

答案4

我已经厌倦了编写代码X_{\mathit{y}}来获取变量 X 后面的正确索引 y。你似乎也遇到了类似的问题。我的解决方案(适合你的情况)是:

\newcommand[2][blue]{\foo}{{\ensuremath{\color{#1}#2}}}

使用方法很简单:

Variable \foo{b} is emphasized blue and variable \foo[red]{r} is emphasized red.

相关内容