A solution with hf-tikz
(requires two compilation runs):
\documentclass[dvipsnames]{article}
\usepackage{amsmath}
\usepackage[customcolors]{hf-tikz}
\definecolor{My}{RGB}{0,31,63}
\definecolor{MyConst}{RGB}{128,128,128}
\definecolor{MyFunc}{RGB}{0,75,107}
\definecolor{MyIndep}{RGB}{127,55,0}
\definecolor{MySubst}{RGB}{250,230,230}
\newcommand{\const}[1]{{\color{MyConst}\mathrm{#1}}} % normal constant
\newcommand{\uconst}[1]{\mathrm{#1}} % universal mathematical constant
\newcommand{\var}[1]{{\color{MyIndep}#1}} % independent variable
\newcommand{\subst}[1]{{\colorbox{MySubst}#1}} % substitution
\hfsetfillcolor{Lavender!50}
\hfsetbordercolor{white}
\begin{document}
\[
\color{My}
{\color{MyFunc}\Psi} =
\const{\Psi_{_0}}\;
\uconst{e}^{\uconst{i} \left(
\tikzmarkin{a}(0.01,-0.175)(-0.015,0.3)\frac{p}{\const{\hbar}}\tikzmarkend{a}
\var{x} - \tikzmarkin{b}(0.01,-0.175)(-0.015,0.3)\frac{E}{\const{\hbar}}\tikzmarkend{b}\var{t} \right) }
\]
\end{document}
The result:
Remarks:
- it is better to use
\[ \]
rather than $$ $$
;
- the package allows you to not set in math mode the text inside a
\colorbox
: one just have to declare where the delimiters of the box should be positioned.
From version 0.3 of the package, things are a bit more user-friendly as shown in hf-tikz doesn't box around equation. The above code can be written thanks to styles as:
\documentclass[dvipsnames]{article}
\usepackage{amsmath}
\usepackage[customcolors]{hf-tikz}
\definecolor{My}{RGB}{0,31,63}
\definecolor{MyConst}{RGB}{128,128,128}
\definecolor{MyFunc}{RGB}{0,75,107}
\definecolor{MyIndep}{RGB}{127,55,0}
\definecolor{MySubst}{RGB}{250,230,230}
\newcommand{\const}[1]{{\color{MyConst}\mathrm{#1}}} % normal constant
\newcommand{\uconst}[1]{\mathrm{#1}} % universal mathematical constant
\newcommand{\var}[1]{{\color{MyIndep}#1}} % independent variable
\newcommand{\subst}[1]{{\colorbox{MySubst}#1}} % substitution
% available from version 0.3
\tikzset{offset def/.style={
above left offset={-0.015,0.3},
below right offset={0.01,-0.175},
},
hl/.style={
offset def,
set fill color=Lavender!50,
set border color=white,
}
}
\begin{document}
\[
\color{My}
{\color{MyFunc}\Psi} =
\const{\Psi_{_0}}\;
\uconst{e}^{\uconst{i} \left(
\tikzmarkin[hl]{a}\frac{p}{\const{\hbar}}\tikzmarkend{a}
\var{x} - \tikzmarkin[hl]{b}\frac{E}{\const{\hbar}}\tikzmarkend{b}\var{t} \right) }
\]
\end{document}
Procedure to get .png output
After reading the comments below, here is a way to get a .png
. The standalone
class here really helps since it has a png
class option.
Save as test.tex
:
\documentclass[dvipsnames,png, border=2pt]{standalone}
\usepackage{amsmath}
\usepackage[customcolors]{hf-tikz}
\definecolor{My}{RGB}{0,31,63}
\definecolor{MyConst}{RGB}{128,128,128}
\definecolor{MyFunc}{RGB}{0,75,107}
\definecolor{MyIndep}{RGB}{127,55,0}
\definecolor{MySubst}{RGB}{250,230,230}
\newcommand{\const}[1]{{\color{MyConst}\mathrm{#1}}} % normal constant
\newcommand{\uconst}[1]{\mathrm{#1}} % universal mathematical constant
\newcommand{\var}[1]{{\color{MyIndep}#1}} % independent variable
\newcommand{\subst}[1]{{\colorbox{MySubst}#1}} % substitution
\hfsetfillcolor{Lavender!50}
\hfsetbordercolor{white}
\begin{document}
$
\color{My}
{\color{MyFunc}\Psi} =
\const{\Psi_{_0}}\;
\uconst{e}^{\uconst{i} \left(
\tikzmarkin{a}(0.01,-0.175)(-0.015,0.3)\frac{p}{\const{\hbar}}\tikzmarkend{a}
\var{x} - \tikzmarkin{b}(0.01,-0.175)(-0.015,0.3)\frac{E}{\const{\hbar}}\tikzmarkend{b}\var{t} \right) }
$
\end{document}
and compile with:
pdflatex -shell-escape test.tex
This will create
- test.pdf
- test.png
perfectly cropped.
Best Answer
Here is a ConTeXt solution, in case someone is interested. The vim module uses the vim editor to provide syntax highlighting, which has support for a huge number of languages, so there is no need to create your own parsing style.
which gives
The vim module automatically caches the result, so there is no considerable performance penalty.