I would like to create an environment that would allow me to have parts of a document in "Handwriting mode".
So the objective would be to be able to type the following in the source code :
\begin{Handwriting}
This text should look like it is Hand written
$This \cdot equation = \ as \times \ well$
\end{Handwriting}
from another thread I tried
\usepackage{mathpazo}
\usepackage[version=3]{mhchem}
\usepackage{amsmath}
\usepackage{siunitx}
\newenvironment{Handwriting}{\fontfamily{augie}\selectfont}{\par}
but this does not help for the equation.
I suspect the use of the mathastext package could help but I did not figure out how yet.
Bonus question that makes matters a bit more complicated is : would it be possible to use the "Chalkduster" font instead of "augie" ?
Thank you for you help, Clément
ACCEPTED]
Example with
mathastext
[1]:
\documentclass{article}
\usepackage{mathpazo}
\usepackage[version=3]{mhchem}
\usepackage{amsmath}
\usepackage{siunitx}
\usepackage[subdued]{mathastext}% no italic for Augie anyhow
\MTfamily{augie}
\Mathastext[augie]
\newenvironment{Handwriting}{\MTversion{augie}}{\par}
\begin{document}
This test is normal, and math too ($x^n+y^n = z^n$).
\begin{Handwriting}
This text should look like it is Hand written.
This equation as well:
\[x^n + y^n = z^n\]
\end{Handwriting}
\end{document}
Here is with Chalkduster, hence Unicode engines, which is not at all mathastext ballpark.
I added defaultmathsizes option to keep standard sizes for scriptsize (even if mathastext is "subdued", without this option it will make use of larger size in subscripts and superscripts).
Caution: you probably want to use mathspec or unicode-math which should provide the needed things. I have little experience with them (I rarely use unicode engines). Notice that user level interface is very often in LaTeX2e made "preamble-only", for example \DeclareMathSymbol macro, hence one has to use TeX engine primitives.
\documentclass{article}
\usepackage[no-math]{fontspec}
\usepackage{amsmath}
%\usepackage{siunitx}
\newfontfamily\Chalkduster[NFSSFamily=Chalkduster]{Chalkduster}
\usepackage[subdued, defaultmathsizes]{mathastext}
\MTfamily{Chalkduster}
\Mathastext[Chalkduster]
\newenvironment{Handwriting}{\MTversion{Chalkduster}\MTdonotfixfonts
% adjust some additional glyphs
\Umathchardef\prod 1 \symmtoperatorfont `∏\relax % mathop
\Umathchardef\sum 1 \symmtoperatorfont `∑\relax % mathop
% \Umathchardef\in 3 \symmtoperatorfont `∈\relax % not in CHALKDUSTER?
\Umathchardef\int 1 \symmtoperatorfont `∫\relax % mathop
\Umathchardef\neq 3 \symmtoperatorfont `≠\relax % mathrel
%
% This syntax works with luatex not with xelatex
% \Umathcodenum`∏=\prod
% \Umathcodenum`∑=\sum
% \Umathcodenum`∫=\int
% \Umathcodenum`≠=\neq
% So we repeat
\Umathcode`∏ = 1 \symmtoperatorfont `∏\relax % mathop
\Umathcode`∑ = 1 \symmtoperatorfont `∑\relax % mathop
\Umathcode`∫ = 1 \symmtoperatorfont `∫\relax % mathop
\Umathcode`≠ = 3 \symmtoperatorfont `≠\relax % mathrel
}{\par}
\begin{document}
This text is normal, and math too
\[x^n + y^n = (z^n - w^n) = \sum_{ij} a_{ij} \neq \prod_{p\in P} (1 - \frac1p) =
\int \sqrt{1+x^2} dx\]
\begin{Handwriting}
This text should look like it is Hand written.
These equations as well:
\[x^n + y^n = (z^n - w^n) = \sum_{ij} a_{ij} \neq \prod_{p\in P} (1 - \frac1p) =
\int \sqrt{1+x^2} dx\]
\[x^n + y^n = (z^n - w^n) = ∑_{ij} a_{ij} ≠ ∏_{p\in P} (1 - \frac1p) =
∫\sqrt{1+x^2} dx\]
\end{Handwriting}
\end{document}
% Local variables:
% TeX-engine: xetex
% End:
The above would produce strange output when compiled with lualatex if the \MTdonotfixfonts were omitted (with xelatex, this macro does nothing). Perhaps the \MTfixmathfonts macro dating back to 2016/05/03 of mathastext is obsoleted due to change with font handling on lua side. (untested, I don't use LuaTeX)
As one can see, the square root sign was left untouched (I guess one needs a genuine OpenType math font for all such extensible symbols). And the ELEMENT OF ∈ seems to be missing from Chalkduster. (it seems to have glyphs in a private area I don't know how to access)
Attention to no-math option for fontspec. (I vaguely remember polyglossia loads fontspec so this many need in that case some \PassOptionsToPackage right after \documentclass).
greek and Greek at once? instead of doing one letter at a time with: \Umathchardef\mu 1 \symmtoperatorfont μ\relax % greek` \Umathchardef\sigma 1 \symmtoperatorfont σ\relax % greek` \Umathchardef\gamma 1 \symmtoperatorfont γ\relax % greek` etc... - JPMD
Here is a sample with unicode-math. This would work with
any TrueType or OpenType font.
[1]
\documentclass[varwidth, preview]{standalone}
\usepackage[math-style=upright]{unicode-math}
\defaultfontfeatures{Scale=MatchUppercase}
% Kalam is a free font by the Indian Type Foundry, available at:
% https://github.com/itfoundry/kalam
\setmainfont{Kalam}[
Scale = 1.0 ,
UprightFont = *-Regular ,
BoldFont = *-Bold ,
Extension = .ttf ]
\setmathfont{GFS Neohellenic Math}
\setmathfont[range={"00-"FF,
"03C0, "2013-"2014, "2018-"201A, "201C-"201E, "2021-"2022,
"2026, "2030, "2039-"203A, "2044, "20AC, "20BA, "20BD,
"2113, "2122, "2126, "212E, "2202, "2206, "220F, "2211,
"2212, "2215, "221E, "222B, "2246, "2260, "2264, "2265,
"25CA, up/{Latin,latin,num}}]{Kalam-Regular.ttf}
\setmathfont[range=bfup/{Latin,latin,num}]{Kalam-Bold.ttf}
\begin{document}
Kalam is a free font from the Indian Type Foundry.
\[ \lim_{t \to \infty} \frac{\partial}{\partial t}
\int_0^{2 \muppi} \frac{t^2}{2} \mathop{\symup{d}t} \leq
\sum_{i=1}^N \frac{\muppi i}{\sqrt 2} \approx \increment \symbfup{v}t \]
\end{document}
Unfortunately, that shows off almost all the font’s mathematical repertoire. Another you might try, from the same source, is Tillana.
Apologies; you requested an environment, and this doesn’t set up an environment. Sorry about that.
In a future version of unicode-math, you might be able to write:
\newfontfamily\handwritingfamily{Kalam}[
Scale = MatchUppercase ,
UprightFont = *-Regular ,
BoldFont = *-Bold ,
Extension = .ttf ]
\setmathfont[version=handwriting,
Scale=MatchUppercase]{GFS Neohellenic Math}
\setmathfont[version=handwriting,
Scale=MatchUppercase,
range={"00-"FF,
"03C0, "2013-"2014, "2018-"201A, "201C-"201E, "2021-"2022,
"2026, "2030, "2039-"203A, "2044, "20AC, "20BA, "20BD,
"2113, "2122, "2126, "212E, "2202, "2206, "220F, "2211,
"2212, "2215, "221E, "222B, "2246, "2260, "2264, "2265,
"25CA, up/{Latin,latin,num}}
]{Kalam-Regular.ttf}
\setmathfont[version=handwriting,
Scale=MatchUppercase,
range=bfup/{Latin,latin,num}
]{Kalam-Bold.ttf}
\newenvironment{handwriting}{\handwritingfamily%
\mathversion{handwriting%
\setoperatorfont{\handwritingfamily}}}
However, as of October 2018, the manual warns, “Note there are currently open issues regarding the interaction between the version and the range features, so please proceed with caution.”
At present, \setmathfont[ version=handwriting, Scale=MatchUppercase ]{Kalam} compiles, but the output will lack any math symbols missing from the font (and I am not aware of any handwriting fonts with an OpenType MATH table). GFS Neohellenic Math is the most handwriting-like OpenType math font I know of.
version and range features compatibility? Thanks! - JPMD
version and the range features, so please proceed with caution.” - Davislor
Since @Davislor's solution for the in-document command is not functioning and is unlikely to work in the future (see
Ulrike Fischers answer to another question
[1]), I attempted to adapt @Davislor's answer to work with \immediate\write, \write18 and --shell-escape.
This approach produces the desired result:

To achieve this, we define a new counter and a new environment in the main document:
% Counter for unique filenames
\newcounter{handwritingfontenv}
\setcounter{handwritingfontenv}{0}
% Environment gets written to a file and then included as graphic
\NewDocumentEnvironment{handwriting}{o +b}{%
% #1: additional preambel settings for the standalone file
\stepcounter{handwritingfontenv}%
\newwrite\tempfile
\immediate\openout\tempfile=handwritingfontenv-\detokenize\expandafter{\jobname}-\thehandwritingfontenv.tex
\immediate\write\tempfile{
\noexpand\input{handwritingfonts-preamble}
\IfNoValueF{#1}{
\unexpanded{#1}
}
\noexpand\begin{document}
\unexpanded{#2}
\noexpand\end{document}
}
\immediate\closeout\tempfile
\immediate\write18{lualatex --interaction=batchmode handwritingfontenv-\detokenize\expandafter{\jobname}-\thehandwritingfontenv.tex}
\includegraphics{handwritingfontenv-\detokenize\expandafter{\jobname}-\thehandwritingfontenv.pdf}
}
This allows us to use @Davislor's working answer while incorporating handwriting within a document that uses different text and math fonts. The font (and other) settings of the handwriting environment should be stored inside the file handwritingfonts-preamble.
Here's what mine looks like:
% handwritingfonts-preamble.tex
\documentclass[varwidth, preview]{standalone}
\usepackage{amsmath}
\usepackage{siunitx}
\sisetup{
mode=text,
unit-mode=text,
reset-text-family=false
}
\usepackage{fontspec}
\usepackage[math-style=upright]{unicode-math}
\usepackage[h]{esvect}
\defaultfontfeatures{Scale=1.1}
% Kalam is a free font by the Indian Type Foundry, available at:
% https://github.com/itfoundry/kalam
\usepackage{mathfont}
\mathfont{Kalam}
\setmainfont{Kalam}[
Scale = MatchUppercase ,
UprightFont = *-Regular ,
BoldFont = *-Bold,
LetterSpace=2,
Scale=1.1]
\setmathfont{GFS Neohellenic Math}
\setmathfont[range={"00-"FF,
"03C0, "2013-"2014, "2018-"201A, "201C-"201E, "2021-"2022,
"2026, "2030, "2039-"203A, "2044, "20AC, "20BA, "20BD,
"2113, "2122, "2126, "212E, "2202, "2206, "220F, "2211,
"2212, "2215, "221E, "222B, "2246, "2260, "2264, "2265,
"25CA, up/{Latin,latin,num}}
]{Kalam-Regular}
\setmathfont[range=bfup/{Latin,latin,num}
]{Kalam-Bold}
\setmathrm{Kalam-Regular}
Putting it all together:
\documentclass{article}
\usepackage{standalone}
\usepackage{graphicx}
\usepackage{parskip}
\usepackage{fontspec}
\usepackage{amsmath}
\usepackage{siunitx}
% For correct vector length
\usepackage[h]{esvect}
% font family definitions
\setmainfont{Lato}[
Extension = .ttf,
UprightFont = *-Regular,
BoldFont = *-Black,
ItalicFont = *-Italic,
BoldItalicFont = *-BlackItalic,
LetterSpace=2,
Scale=1.1
]
\RequirePackage{unicode-math}
\setmathfont{LeteSansMath}
\RequirePackage{realscripts}
% Counter for unique filenames
\newcounter{handwritingfontenv}
\setcounter{handwritingfontenv}{0}
% Environment gets written to a file and then included as graphic
\NewDocumentEnvironment{handwriting}{o +b}{%
% #1: additional preambel settings for the standalone file
\stepcounter{handwritingfontenv}%
\newwrite\tempfile
\immediate\openout\tempfile=handwritingfontenv-\detokenize\expandafter{\jobname}-\thehandwritingfontenv.tex
\immediate\write\tempfile{
\noexpand\input{handwritingfonts-preamble}
\IfNoValueF{#1}{
\unexpanded{#1}
}
\noexpand\begin{document}
\unexpanded{#2}
\noexpand\end{document}
}
\immediate\closeout\tempfile
\immediate\write18{lualatex --interaction=batchmode handwritingfontenv-\detokenize\expandafter{\jobname}-\thehandwritingfontenv.tex}
\includegraphics{handwritingfontenv-\detokenize\expandafter{\jobname}-\thehandwritingfontenv.pdf}
}
\begin{document}
This text is normal, and math too. It has german Ümläütß. This is a greek math test: \(\alpha β \gamma δ\)
These equations as are normal too:
\[
x + y^n = (z^n - w^n) = \sum_{ij} a_{ij} \neq \prod_{p \epsilon P} \left(1 - \frac1p \right) = \int \sqrt{1+x^2} dx
\]
\[
x^n + y^n = (z^n - w^n) = ∑_{ij} a_{ij} ≠ ∏_{p\in P} (1 - \frac1p) = ∫\sqrt{1+x^2} dx
\]
\[
\lim_{t \to \infty} \frac{\partial}{\partial t}
\int_0^{2 \muppi} \frac{t^2}{2} \mathop{\symup{d}t} \leq
\sum_{i=1}^N \frac{\muppi i}{\sqrt 2} \approx \increment \symbfup{v}t
\]
This is an inline math example: \(\vv{F} = m \cdot a = \qty{12}{\newton}\) some text after.
\vspace{1em}
\begin{handwriting}
This text is Hand written, and math too. It has german Ümläütß. This is a greek math test: \(\alpha β \gamma δ\)
These equations as well:
\[
x + y^n = (z^n - w^n) = \sum_{ij} a_{ij} \neq \prod_{p \epsilon P} \left(1 - \frac1p \right) = \int \sqrt{1+x^2} dx
\]
\[
x^n + y^n = (z^n - w^n) = ∑_{ij} a_{ij} ≠ ∏_{p\in P} (1 - \frac1p) = ∫\sqrt{1+x^2} dx
\]
\[
\lim_{t \to \infty} \frac{\partial}{\partial t}
\int_0^{2 \muppi} \frac{t^2}{2} \mathop{\symup{d}t} \leq
\sum_{i=1}^N \frac{\muppi i}{\sqrt 2} \approx \increment \symbfup{v}t
\]
\[
\sin(\alpha_k) = \frac{\lambda}{b}
\]
This is an inline math example: \(\vv{F} = m \cdot a = \qty{12}{\newton}\) some text after.
\end{handwriting}
\vspace{1em}
This text and math should be normal again:
\[
x^n + y^n = (z^n - w^n) = \sum_{ij} a_{ij} \neq \prod_{p\in P} \left(1 - \frac1p \right) = \int \sqrt{1+x^2} dx
\]
This is an inline math example: \(\vv{F} = m \cdot a = \qty{12}{\newton}\) some text after.
\end{document}
This setup yields the output shown above.
Another example with the duckuments package for 1:1 comparison:
\documentclass{article}
\usepackage{standalone}
\usepackage{graphicx}
\usepackage{parskip}
\usepackage{fontspec}
\usepackage{amsmath}
% font family definitions
\setmainfont{Lato}[
Extension = .ttf,
UprightFont = *-Regular,
BoldFont = *-Black,
ItalicFont = *-Italic,
BoldItalicFont = *-BlackItalic,
LetterSpace=2,
Scale=1.1
]
\RequirePackage{unicode-math}
\setmathfont{LeteSansMath}
\RequirePackage{realscripts}
% Counter for unique filenames
\newcounter{handwritingfontenv}
\setcounter{handwritingfontenv}{0}
% Environment gets written to a file and then included as graphic
\NewDocumentEnvironment{handwriting}{o +b}{%
% #1: additional preambel settings for the standalone file
\stepcounter{handwritingfontenv}%
\newwrite\tempfile
\immediate\openout\tempfile=handwritingfontenv-\detokenize\expandafter{\jobname}-\thehandwritingfontenv.tex
\immediate\write\tempfile{
\noexpand\input{handwritingfonts-preamble}
\IfNoValueF{#1}{
\unexpanded{#1}
}
\noexpand\begin{document}
\unexpanded{#2}
\noexpand\end{document}
}
\immediate\closeout\tempfile
\immediate\write18{lualatex --interaction=batchmode handwritingfontenv-\detokenize\expandafter{\jobname}-\thehandwritingfontenv.tex}
\includegraphics{handwritingfontenv-\detokenize\expandafter{\jobname}-\thehandwritingfontenv.pdf}
}
\usepackage{duckuments}
\begin{document}
\blindduck[maths=both]
\begin{handwriting}[\usepackage{duckuments}]
\blindduck[maths=both]
\end{handwriting}
\end{document}
Sadly the equation numbering has the wrong font, but I am at loss here for the moment.
EDIT
I made some stupid mistakes in the last version of my answer. Most importantly i didn't use \setmainfont in the standalone preamble, which was causing the number of the equation numbering to be off and made it necessary to redefine all math operators.
Also I found out that it works loading the mathfont package together with unicode-math. mathfont makes it possible for some math characters like ( and ) but also \sum, \prod and \int to be resized. That has the side effect of them becoming way to bold. But I like the outcome better this way.
EDIT 2
The environment above still needs the separate preamble and most importantly: The standalone documents are not aware of the \linewidth and font size. So I edited the environment to pass the fontsize and linewidth to the standalone. Also I added some lua code to have all the standalones in a separate subfolder and to check if the pdfs are present so they only get compiled, if they are not already there. This saves a lot of time, but also means that the standalone pdf files have to be deleted by hand, when changes are made to the content of the handwriting environment. This can be done by deleting the subfolder.
\documentclass[a4paper,11pt]{article}
\usepackage{standalone}
\usepackage{graphicx}
\usepackage{parskip}
\usepackage{geometry}
\geometry{margin={2.4cm,2.4cm}}
\usepackage{fontspec}
\usepackage{amsmath}
\usepackage{siunitx}
% For correct vector length
\usepackage[h]{esvect}
% font family definitions
\setmainfont{Lato}[
Extension = .ttf,
UprightFont = *-Regular,
BoldFont = *-Black,
ItalicFont = *-Italic,
BoldItalicFont = *-BlackItalic,
LetterSpace=2,
Scale=1.1
]
\usepackage{unicode-math}
\setmathfont{LeteSansMath}
\usepackage{realscripts}
\newcommand{\handwritingpkgs}{%
\unexpanded{%
\usepackage{parskip}
\usepackage{amsmath}
\usepackage{siunitx}
\sisetup{%
mode=text,
unit-mode=text,
reset-text-family=false
}
\usepackage{fontspec}
% Kalam is a free font by the Indian Type Foundry, available at:
% https://github.com/itfoundry/kalam
\usepackage{mathfont}
\mathfont{Kalam}
\usepackage[math-style=upright]{unicode-math}
\usepackage[h]{esvect}
\defaultfontfeatures{Scale=1.1}
\setmainfont{Kalam}[
Scale = MatchUppercase ,
UprightFont = *-Regular ,
BoldFont = *-Bold,
LetterSpace=2,
Scale=1.1]
\setmathfont{GFS Neohellenic Math}
\setmathfont[range={"00-"FF,
"03C0, "2013-"2014, "2018-"201A, "201C-"201E, "2021-"2022,
"2026, "2030, "2039-"203A, "2044, "20AC, "20BA, "20BD,
"2113, "2122, "2126, "212E, "2202, "2206, "220F, "2211,
"2212, "2215, "221E, "222B, "2246, "2260, "2264, "2265,
"25CA, up/{Latin,latin,num}}
]{Kalam-Regular}
\setmathfont[range=bfup/{Latin,latin,num}
]{Kalam-Bold}
\setmathrm{Kalam-Regular}
}
}
% Counter for unique filenames
\newcounter{handwritingfontenv}
\setcounter{handwritingfontenv}{0}
% For checking if the files exist
\directlua{lfs = require "lfs"}
\newif\ifpdffileexists
% Create the output directory, if needed
\directlua{
lfs = require "lfs"
function ensure_dir_exists(dir)
if not lfs.isdir(dir) then
lfs.mkdir(dir)
end
end
}
\edef\outputdir{handwriting} % Define output directory
\NewDocumentEnvironment{handwriting}{o +b}{%
\stepcounter{handwritingfontenv}%
% Create output directory if needed
\directlua{ensure_dir_exists("\outputdir")}%
% Define filenames with path
\edef\filenamebase{\detokenize\expandafter{\jobname}-handwritingfontenv-\thehandwritingfontenv}%
\edef\pdffilename{\outputdir/\filenamebase.pdf}%
% Check if PDF exists
\directlua{
if lfs.attributes("\pdffilename") then
tex.sprint("\\pdffileexiststrue")
else
tex.sprint("\\pdffileexistsfalse")
end
}%
\ifpdffileexists%
% Skip compilation if PDF exists
\else%
\newwrite\tempfile%
\immediate\openout\tempfile=\outputdir/\filenamebase.tex%
\immediate\write\tempfile{%
\noexpand\documentclass[varwidth=\the\linewidth, preview, \f@size pt]{standalone}%
\handwritingpkgs%
\IfNoValueF{#1}{\unexpanded{#1}}%
\noexpand\begin{document}%
\unexpanded{#2}%
\noexpand\end{document}%
}%
\immediate\closeout\tempfile%
% Compile with output directory
\immediate\write18{
cd \outputdir && lualatex --interaction=batchmode \filenamebase.tex && cd ..
}%
\fi%
% Include PDF from subdirectory
\includegraphics{\pdffilename}%
}{}
\begin{document}
This text is normal, and math too. It has german Ümläütß. This is a greek math test: \(\alpha β \gamma δ\)
These equations as are normal too:
\[
x + y^n = (z^n - w^n) = \sum_{ij} a_{ij} \neq \prod_{p \epsilon P} \left(1 - \frac1p \right) = \int \sqrt{1+x^2} dx
\]
\[
x^n + y^n = (z^n - w^n) = ∑_{ij} a_{ij} ≠ ∏_{p\in P} (1 - \frac1p) = ∫\sqrt{1+x^2} dx
\]
\[
\lim_{t \to \infty} \frac{\partial}{\partial t}
\int_0^{2 \muppi} \frac{t^2}{2} \mathop{\symup{d}t} \leq
\sum_{i=1}^N \frac{\muppi i}{\sqrt 2} \approx \increment \symbfup{v}t
\]
This is an inline math example: \(\vv{F} = m \cdot a = \qty{12}{\newton}\) some text after.
\vspace{1em}
\begin{handwriting}
This text is Hand written, and math too. It has german Ümläütß. This is a greek math test: \(\alpha β \gamma δ\)
These equations as well:
\[
x + y^n = (z^n - w^n) = \sum_{ij} a_{ij} \neq \prod_{p \epsilon P} \left(1 - \frac1p \right) = \int \sqrt{1+x^2} dx
\]
\[
x^n + y^n = (z^n - w^n) = ∑_{ij} a_{ij} ≠ ∏_{p\in P} (1 - \frac1p) = ∫\sqrt{1+x^2} dx
\]
\[
\lim_{t \to \infty} \frac{\partial}{\partial t}
\int_0^{2 \muppi} \frac{t^2}{2} \mathop{\symup{d}t} \leq
\sum_{i=1}^N \frac{\muppi i}{\sqrt 2} \approx \increment \symbfup{v}t
\]
\[
\sin(\alpha_k) = \frac{\lambda}{b}
\]
This is an inline math example: \(\vv{F} = m \cdot a = \qty{12}{\newton}\) some text after.
\end{handwriting}
\vspace{1em}
This text and math should be normal again:
\[
x^n + y^n = (z^n - w^n) = \sum_{ij} a_{ij} \neq \prod_{p\in P} \left(1 - \frac1p \right) = \int \sqrt{1+x^2} dx
\]
This is an inline math example: \(\vv{F} = m \cdot a = \qty{12}{\newton}\) some text after.
\end{document}
One problem still is, that the compilation failes, if compiled for the first time. But subsequend compilations work without errors. (only with --shell-escape though.)
\NewEnviron{handwriting}{...\BODY...} by \NewDocumentEnvironement{handwriting}{+b}{...#1...}{}. It's included in LaTeX kernel and need no package. See the user guide. - jlab
augie. Ok, I will make an answer. - user4686Bandbalmost look the same. It is very ugly font. - Display Name