我(和大多数人)发现,当某些变量被突出显示时,方程式会变得更容易阅读。例如:
$$
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
匹配单个字母数字字符,例如l
、1
等。
答案2
答案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.