manu-mannattil / vachart

Generate random Snellen charts for visual acuity tests
The Unlicense
10 stars 4 forks source link

latex is unparseable? #2

Closed slashdottir closed 2 months ago

slashdottir commented 2 months ago

I want this to work, but when I generate the chart latex and try to compile it to pdf via

luatex -interaction=nonstopmode chart.tex

I'm on Macos: Sonoma 14.2.1 I installed BasicTex via: http://www.texts.io/support/0001/ I also installed LuaTex via macports In installed the required font: Optician Sans

Thank you for any clues as I'm not at all familiar with LaTeX

Here is the content of the generated latex with the variable "num" set to 5:

chart.tex:

%! TEX program = XeLaTeX

\documentclass{article}

% Factor = 3m/6m.
% This is obtained by dividing the distance at which the chart is kept
% by 6 m.  Note that this sometimes needs to be slightly tweaked to get
% the required optotype width.
\def\factor{0.5}

\usepackage{fontspec}
\usepackage{graphicx}
\usepackage{color}
\usepackage[pass]{geometry}
\usepackage{longtable}
\setlength\LTpre{0pt} % space before table

\newfontfamily\optsans{Optician-Sans.otf}[LetterSpace=40]
\def\optotype#1#2{\begin{tabular}{c}\resizebox{!}{#1}{\selectfont\optsans#2}\end{tabular}}

% https://tex.stackexchange.com/q/172234
\newcommand{\deflen}[2]{%
  \expandafter\newlength\csname #1\endcsname
  \expandafter\setlength\csname #1\endcsname{#2}%
}

% Length definitions
\deflen{SetA}{247.37pt} % 60 m
\deflen{SetB}{148.422pt} % 36 m
\deflen{SetC}{123.685pt} % 30 m
\deflen{SetD}{98.948pt} % 24 m
\deflen{SetE}{74.211pt} % 18 m
\deflen{SetF}{49.474pt} % 12 m
\deflen{SetG}{24.737pt} % 6 m
\deflen{SetH}{20.614pt} % 5 m
\deflen{SetI}{16.491pt} % 4 m

\definecolor{smoke}{rgb}{0.6,0.6,0.6}
\deflen{acuitylen}{0.25in}
\def\acuity#1#2{\resizebox{!}{\acuitylen}{$#1^{\,\color{smoke}(#2)}$}}

\makeatletter
\def\colorrule#1#2{\color{#1}\leavevmode\leaders\hrule height #2\hfill\kern\z@}
\makeatother

\pagestyle{empty}

\begin{document}

\newgeometry{margin=0.5in}

% Tables

\pagebreak
\begin{center}
\renewcommand*{\arraystretch}{3.5}
\begin{longtable}{rc}
\acuity{6/60}{20/200} & \optotype{\factor\SetA}{F} \\
\acuity{6/36}{20/120} & \optotype{\factor\SetB}{UE} \\
\acuity{6/30}{20/100} & \optotype{\factor\SetC}{PLT} \\
\acuity{6/24}{20/80} & \optotype{\factor\SetD}{RUNF} \\
\acuity{6/18}{20/60} & \optotype{\factor\SetE}{CDLVO} \\
& \colorrule{cyan}{0.65cm} \\
\acuity{6/12}{20/40} & \optotype{\factor\SetF}{NPTERKHU} \\
\acuity{6/6}{20/20} & \optotype{\factor\SetG}{DFKUOELHVCZR} \\
& \colorrule{red}{0.65cm} \\
\acuity{6/5}{20/16} & \optotype{\factor\SetH}{ERCKDOFHZTLVPN} \\
\acuity{6/4}{20/13} & \optotype{\factor\SetI}{TCUFPKZNDREHOLV} \\
\end{longtable}
\end{center}

\pagebreak
\begin{center}
\renewcommand*{\arraystretch}{3.5}
\begin{longtable}{rc}
\acuity{6/60}{20/200} & \optotype{\factor\SetA}{R} \\
\acuity{6/36}{20/120} & \optotype{\factor\SetB}{PH} \\
\acuity{6/30}{20/100} & \optotype{\factor\SetC}{TCR} \\
\acuity{6/24}{20/80} & \optotype{\factor\SetD}{HFKP} \\
\acuity{6/18}{20/60} & \optotype{\factor\SetE}{DNTRC} \\
& \colorrule{cyan}{0.65cm} \\
\acuity{6/12}{20/40} & \optotype{\factor\SetF}{ZFELOUKP} \\
\acuity{6/6}{20/20} & \optotype{\factor\SetG}{CZNREUDFVHTP} \\
& \colorrule{red}{0.65cm} \\
\acuity{6/5}{20/16} & \optotype{\factor\SetH}{VTELZFRPKOHUDC} \\
\acuity{6/4}{20/13} & \optotype{\factor\SetI}{EHFZCNULTRPKDVO} \\
\end{longtable}
\end{center}

\pagebreak
\begin{center}
\renewcommand*{\arraystretch}{3.5}
\begin{longtable}{rc}
\acuity{6/60}{20/200} & \optotype{\factor\SetA}{P} \\
\acuity{6/36}{20/120} & \optotype{\factor\SetB}{ZC} \\
\acuity{6/30}{20/100} & \optotype{\factor\SetC}{LRT} \\
\acuity{6/24}{20/80} & \optotype{\factor\SetD}{VEUN} \\
\acuity{6/18}{20/60} & \optotype{\factor\SetE}{DFKLZ} \\
& \colorrule{cyan}{0.65cm} \\
\acuity{6/12}{20/40} & \optotype{\factor\SetF}{RCONHUEP} \\
\acuity{6/6}{20/20} & \optotype{\factor\SetG}{VDOFELTHUNKZ} \\
& \colorrule{red}{0.65cm} \\
\acuity{6/5}{20/16} & \optotype{\factor\SetH}{TPOLNHZKFDUECR} \\
\acuity{6/4}{20/13} & \optotype{\factor\SetI}{RODCZLKVNPFHEUT} \\
\end{longtable}
\end{center}

\pagebreak
\begin{center}
\renewcommand*{\arraystretch}{3.5}
\begin{longtable}{rc}
\acuity{6/60}{20/200} & \optotype{\factor\SetA}{Z} \\
\acuity{6/36}{20/120} & \optotype{\factor\SetB}{OP} \\
\acuity{6/30}{20/100} & \optotype{\factor\SetC}{HFD} \\
\acuity{6/24}{20/80} & \optotype{\factor\SetD}{LEPO} \\
\acuity{6/18}{20/60} & \optotype{\factor\SetE}{DKFTV} \\
& \colorrule{cyan}{0.65cm} \\
\acuity{6/12}{20/40} & \optotype{\factor\SetF}{LOPCUERH} \\
\acuity{6/6}{20/20} & \optotype{\factor\SetG}{HZRUCTKVENDF} \\
& \colorrule{red}{0.65cm} \\
\acuity{6/5}{20/16} & \optotype{\factor\SetH}{VPLKZUNFTEHORD} \\
\acuity{6/4}{20/13} & \optotype{\factor\SetI}{FDZRNUKVTELCPOH} \\
\end{longtable}
\end{center}

\pagebreak
\begin{center}
\renewcommand*{\arraystretch}{3.5}
\begin{longtable}{rc}
\acuity{6/60}{20/200} & \optotype{\factor\SetA}{L} \\
\acuity{6/36}{20/120} & \optotype{\factor\SetB}{KO} \\
\acuity{6/30}{20/100} & \optotype{\factor\SetC}{DNV} \\
\acuity{6/24}{20/80} & \optotype{\factor\SetD}{RFKO} \\
\acuity{6/18}{20/60} & \optotype{\factor\SetE}{PZDLN} \\
& \colorrule{cyan}{0.65cm} \\
\acuity{6/12}{20/40} & \optotype{\factor\SetF}{HOKVFTUC} \\
\acuity{6/6}{20/20} & \optotype{\factor\SetG}{VPFZTHENDLKR} \\
& \colorrule{red}{0.65cm} \\
\acuity{6/5}{20/16} & \optotype{\factor\SetH}{ORULVNKFDZPCHE} \\
\acuity{6/4}{20/13} & \optotype{\factor\SetI}{NHVREPLOCDUTZKF} \\
\end{longtable}
\end{center}

\end{document}

resulting errors as noted in chart.log

This is LuaTeX, Version 1.18.0 (TeX Live 2024)  (format=luatex 2024.8.16)  16 AUG 2024 11:50
 restricted system commands enabled.
**chart.tex
(./chart.tex
! Undefined control sequence.
l.3 \documentclass
                {article}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.11 \usepackage
              {fontspec}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.12 \usepackage
              {graphicx}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.13 \usepackage
              {color}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.14 \usepackage
              [pass]{geometry}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.15 \usepackage
              {longtable}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.16 \setlength
             \LTpre{0pt} % space before table
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.16 \setlength\LTpre
                   {0pt} % space before table
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.18 \newfontfamily
                 \optsans{Optician-Sans.otf}[LetterSpace=40]
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.18 \newfontfamily\optsans
                         {Optician-Sans.otf}[LetterSpace=40]
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.22 \newcommand
              {\deflen}[2]{%
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.22 \newcommand{\deflen
                      }[2]{%
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
<recently read> \newlength 

<to be read again> 
\#1 
l.23   \expandafter\newlength\csname #1\endcsname

The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
<recently read> \setlength 

<to be read again> 
\#1 
l.24   \expandafter\setlength\csname #1\endcsname
                                               {#2}%
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! You can't use `macro parameter character #' in horizontal mode.
l.24   \expandafter\setlength\csname #1\endcsname{#
                                                 2}%
Sorry, but I'm not programmed to handle this case;
I'll just pretend that you didn't ask for it.
If you're in the wrong mode, you might be able to
return to the right one by typing `I}' or `I$' or `I\par'.

! Undefined control sequence.
l.28 \deflen
          {SetA}{247.37pt} % 60 m
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.29 \deflen
          {SetB}{148.422pt} % 36 m
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.30 \deflen
          {SetC}{123.685pt} % 30 m
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.31 \deflen
          {SetD}{98.948pt} % 24 m
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.32 \deflen
          {SetE}{74.211pt} % 18 m
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.33 \deflen
          {SetF}{49.474pt} % 12 m
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.34 \deflen
          {SetG}{24.737pt} % 6 m
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.35 \deflen
          {SetH}{20.614pt} % 5 m
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.36 \deflen
          {SetI}{16.491pt} % 4 m
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.38 \definecolor
               {smoke}{rgb}{0.6,0.6,0.6}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.39 \deflen
          {acuitylen}{0.25in}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.42 \makeatletter

The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.44 \makeatother

The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.46 \pagestyle
             {empty}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.48 \begin
         {document}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.50 \newgeometry
               {margin=0.5in}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.55 \pagebreak

The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.56 \begin
         {center}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.57 \renewcommand
                *{\arraystretch}{3.5}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.57 \renewcommand*{\arraystretch
                               }{3.5}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
l.58 \begin
         {longtable}{rc}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
\acuity #1#2->\resizebox 
                         {!}{\acuitylen }{$#1^{\,\color {smoke}(#2)}$}
l.59 \acuity{6/60}{20/200}
                         & \optotype{\factor\SetA}{F} \\
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
\acuity #1#2->\resizebox {!}{\acuitylen 
                                        }{$#1^{\,\color {smoke}(#2)}$}
l.59 \acuity{6/60}{20/200}
                         & \optotype{\factor\SetA}{F} \\
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
\acuity ...sizebox {!}{\acuitylen }{$#1^{\,\color 
                                                  {smoke}(#2)}$}
l.59 \acuity{6/60}{20/200}
                         & \optotype{\factor\SetA}{F} \\
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Misplaced alignment tab character &.
l.59 \acuity{6/60}{20/200} &
                           \optotype{\factor\SetA}{F} \\
I can't figure out why you would want to use a tab mark
here. If you just want an ampersand, the remedy is
simple: Just type `I\&' now. But if some right brace
up above has ended a previous alignment prematurely,
you're probably due for more error messages, and you
might try typing `S' now just to see what is salvageable.

! Undefined control sequence.
\optotype #1#2->\begin 
                       {tabular}{c}\resizebox {!}{#1}{\selectfont \optsans #...
l.59 ...y{6/60}{20/200} & \optotype{\factor\SetA}{F}
                                                   \\
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
\optotype #1#2->\begin {tabular}{c}\resizebox 
                                              {!}{#1}{\selectfont \optsans #...
l.59 ...y{6/60}{20/200} & \optotype{\factor\SetA}{F}
                                                   \\
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
<argument> \factor \SetA 

\optotype ...>\begin {tabular}{c}\resizebox {!}{#1
                                                  }{\selectfont \optsans #2}...
l.59 ...y{6/60}{20/200} & \optotype{\factor\SetA}{F}
                                                   \\
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
\optotype ...ar}{c}\resizebox {!}{#1}{\selectfont 
                                                  \optsans #2}\end {tabular}
l.59 ...y{6/60}{20/200} & \optotype{\factor\SetA}{F}
                                                   \\
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
\optotype ...sizebox {!}{#1}{\selectfont \optsans 
                                                  #2}\end {tabular}
l.59 ...y{6/60}{20/200} & \optotype{\factor\SetA}{F}
                                                   \\
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

[1{/usr/local/texlive/2024basic/texmf-var/fonts/map/pdftex/updmap/pdftex.map}])<
/usr/local/texlive/2024basic/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pf
b></usr/local/texlive/2024basic/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi7.
pfb></usr/local/texlive/2024basic/texmf-dist/fonts/type1/public/amsfonts/cm/cmr1
0.pfb></usr/local/texlive/2024basic/texmf-dist/fonts/type1/public/amsfonts/cm/cm
r7.pfb>
Output written on chart.pdf (1 page, 43185 bytes).

PDF statistics: 24 PDF objects out of 1000 (max. 8388607)
 16 compressed objects within 1 object stream
 0 named destinations out of 1000 (max. 131072)
 1 words of extra memory for PDF output out of 10000 (max. 100000000)
manu-mannattil commented 2 months ago

You'll need XeLaTeX (not PDFLaTeX) because we're using OTF fonts. You'll have to compile it using xelatex -interaction=nonstopmode --shell-escape snellen.tex (or run make as described in the README).