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
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. - user4686B
andb
almost look the same. It is very ugly font. - Display Name