ghci4luatex : a GHCi session in LuaTeX

Run a GHCi session within a LaTeX document :
- The
ghci
environment evaluates Haskell code without printing anything :
\begin{ghci}
x :: Int
x = 4
y :: Int
y = 5
\end{ghci}
- The
hask
command evaluates any GHCi command and prints in Haskell what GHCi printed :
The sum of $x$ and $y$ when $x = \hask{x}$ and $y = \hask{y}$ is $\hask{x + y}$.
Documentation
You can find the full pdf documentation in here
Quick start
-
Install haskell
and cabal
or stack
-
Install ghci4luatex
by running either
cabal install ghci4luatex
or
stack install ghci4luatex
- Copy
ghci.sty
and dkjson.lua
in the folder containing a main.tex
file with the following content :
\documentclass{article}
\usepackage{ghci}
\begin{document}
\begin{ghci}
x :: Int
x = 5
y :: Int
y = 6
\end{ghci}
The sum of $x$ and $y$ when $x = \hask{x}$ and $y = \hask{y}$ is $\hask{x + y}$.
\end{document}
- Within that folder, run the
ghci4luatex
server :
ghci4luatex
- Open another shell and compile with
luatex
:
latexmk -shell-escape -lualatex main.tex
Use any Haskell library
HaTeX
\begin{ghci}
:set -XOverloadedStrings
\end{ghci}
\begin{ghci}
import Text.LaTeX
import Text.LaTeX.Base.Pretty
printTex = putStrLn . prettyLaTeX
\end{ghci}
\hask{printTex (section "A section using HaTeX")}
Diagrams
\usepackage{svg}
\begin{ghci}
{-# LANGUAGE NoMonomorphismRestriction #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeFamilies #-}
import Diagrams.Prelude hiding (section)
import Diagrams.Backend.SVG
myDia = circle 1 # fc green
\end{ghci}
\begin{ghci}
renderSVG "myDia.svg" (dims2D 400 300) myDia
\end{ghci}
\begin{figure}[h]
\centering
\includesvg[width=0.2\textwidth]{myDia}
\caption{A circle using Diagrams}
\end{figure}
Workflow with lhs2tex
in Visual Studio Code with LaTeX workshop
In this repository, you will find an example that contains a Makefile.
You can take inspiration from this to use make
in a LateX Workshop receipe :
- Install the LaTeX Workshop extension.
- In
settings.json
, add the following
"latex-workshop.latex.recipes": [
{
"name": "ghci4luatex",
"tools": [
"mklatex"
]
}
],
"latex-workshop.latex.outDir": "./build/",
"latex-workshop.latex.tools": [
{
"name": "mklatex",
"command": "make",
"args": [
"latex",
"main=%DOCFILE%"
],
"env": {}
}
],