diff --git a/.gitignore b/.gitignore index 3c58b1275..0d262fc41 100644 --- a/.gitignore +++ b/.gitignore @@ -24,8 +24,10 @@ /xc-*/ /em-*/ *.*run +*.katex-css-link /csug/math/ /csug/gifs/ +/csug/katex/ /csug/Makefile /csug/*.aux /csug/*.html @@ -50,6 +52,7 @@ /csug/primdata.ss /release_notes/math/ /release_notes/gifs/ +/release_notes/katex/ /release_notes/Makefile /release_notes/*.tex /release_notes/*.aux diff --git a/BUILDING b/BUILDING index 7b3dc9c88..fe1adc2bc 100644 --- a/BUILDING +++ b/BUILDING @@ -307,7 +307,7 @@ The makefile supports several targets: * `make docs` Runs the build plus generates HTML and PDF versions of the Chez - Scheme Users Guide and the release notes. Unlike the other build + Scheme User's Guide and the release notes. Unlike the other build targets, the documentation is not built in the workarea, but rather in the "csug" and "release_notes" directories (where "configure" is run). @@ -320,6 +320,14 @@ The makefile supports several targets: * ppmtogif and pnmcrop (from Netpbm) + * Optionally, KaTeX (for better math in HTML) + + To use KaTeX but not copy the supporting CSS and font files + (e.g. because you wish to link to a copy already installed on your + system), use `make docs KATEX_CSS=no`. See also the documentation + in the "stex/doc" directory for further details and additional + configuration options. + An X11 installation is not required, but ppmtogif does require an "rgb.txt" file, which it will automatically locate in the common X11 installation locations. If ppmtogif fails because it cannot @@ -330,6 +338,16 @@ The makefile supports several targets: installation, then it might contain an "rgb.txt" in the directory identified by the `VIMRUNTIME` environment variable. + * `make csug` or `make release_notes` + + Like `make docs`, but builds only the Chez Scheme User's Guide or + the release notes, respectively. + + * `sudo make install-docs` (or `install-csug` or `install-release_notes`) + + Like `make docs` (or `make csug` or `make release_notes`, respectively), + but also installs the built documentation. + * `make clean` Removes all built elements from the workarea, and then removes diff --git a/build.zuo b/build.zuo index c21d2caa9..d3784f0aa 100644 --- a/build.zuo +++ b/build.zuo @@ -245,14 +245,26 @@ (define name-sym (string->symbol name)) (define (run-make target) (check-not-kernel-only) + ;; Note: build.bat on Windows does not currently configure these + ;; settings, so only evaluate (hash-ref config ...) when trying to + ;; build a target, not while merely generating the list of targets. + (define install-dir + (hash-ref config install-dir-key)) + (define other-install-dir-key + (car (remove install-dir-key doc-install-dir-keys))) + (define other-install-dir + (hash-ref config other-install-dir-key)) (define (->rel-shell pth) (string->shell (find-relative-path doc-dir pth))) (shell/wait "make" (~a "m=" m) (~a "srcdir=" (->rel-shell (at-source name))) - (~a "installdir=" - (->rel-shell (hash-ref config install-dir-key))) + (~a "installdir=" (->rel-shell install-dir)) (~a "STEXLIB=" (->rel-shell stexlib)) + (~a other-install-dir-key "=" (->rel-shell other-install-dir)) + (~a "rel" other-install-dir-key "=" + (string->shell (find-relative-path install-dir + other-install-dir))) target (hash 'dir doc-dir))) `([:target ,mf-out (,mf-in) diff --git a/csug/csug.css b/csug/csug.css index 083ce260b..b0bca9e86 100644 --- a/csug/csug.css +++ b/csug/csug.css @@ -33,3 +33,5 @@ h1, h2, h3, h4 {font-weight: bold} table.indent {margin-left: 20px} +.schemedisplay { line-height: 1.0625; } +.schemedisplay .katex { font-size: 1em; } diff --git a/csug/csug.stex b/csug/csug.stex index 080101b54..60db1d2cd 100644 --- a/csug/csug.stex +++ b/csug/csug.stex @@ -53,7 +53,7 @@ % Just don't care about small overflows, most of the time: \iflatex -\hfuzz=16.0pt +\hfuzz=26.0pt \fi \iflatex diff --git a/csug/csug8.cls b/csug/csug8.cls index 0fdd1aaea..37ea2823a 100644 --- a/csug/csug8.cls +++ b/csug/csug8.cls @@ -376,7 +376,11 @@ %%% index \newenvironment{theindex} {\if@openright\cleardoublepage\else\clearpage\fi - \begingroup\raggedright\schemeindexsize\footnotesize + \begingroup\raggedright\footnotesize + % tighten spacing for entries: + % may need to adjust this for future changes in stex + \def\scheme##1{\mbox{\fontsize{7}{8}\ttfamily\frenchspacing\spaceskip=0.5\fontdimen2\font plus \fontdimen3\font minus 0.5\fontdimen4\font##1}} + \def\var##1{{\footnotesize\textit{##1}}} \columnseprule \z@ \columnsep 35\p@ \twocolumn[\plainchapterhead{\indexname}]% @@ -457,6 +461,8 @@ \def\categorymodule{module} \def\categoryftype{ftype} +%%% summary of forms +% see also summary.stex and summary.ss \newwrite\forms \openout\forms=\jobname.rfm % \formsummary{sort key}{type}{form}{label} @@ -471,7 +477,11 @@ \hbox to 5pc{#2\ \hfil}% \hfil #3}} \newenvironment{thesummary} - {\begingroup\schemesummarysize\small\bigskip + {\begingroup\small\bigskip% + % tighten spacing to fit entries on one line: + % may need to adjust this for future changes in stex + \def\scheme##1{\mbox{\fontsize{8}{9}\ttfamily\frenchspacing\spaceskip=0.5\fontdimen2\font plus \fontdimen3\font minus 0.5\fontdimen4\font##1}}% + \def\var##1{{\footnotesize\textit{##1}}}% \sfentry{{\slshape Form}}{{\slshape Category}}{{\slshape Page}} \kern3pt\hrule\kern3pt} {\endgroup} diff --git a/csug/scheme.hsty b/csug/scheme.hsty deleted file mode 100644 index c8281c851..000000000 --- a/csug/scheme.hsty +++ /dev/null @@ -1,33 +0,0 @@ -\def\transerr#1{\raw{}} -\def\transin#1{\raw{}} -\def\transout#1{\raw{}} -\def\endtranserr#1{\raw{}} -\def\endtransin#1{\raw{}} -\def\endtransout#1{\raw{}} - -\def\schemeblankline{{\\\\}} -\def\schemelinestart{} -%%% handle numbered lines in scheme.sty and scheme.hsty -%%% ---have scheme-prep produce only \schemelinestart -% following is probably broken until we have tables, I suspect. -% Actually, the right way to fix this may be to use CSS -\def\schemelinestartnumbered#1{\raw{
}#1\raw{
}} - -\def\scheme#1{{\tt #1}} -\def\longcode\schemedisplay{\schemedisplay} -\def\noskip\schemedisplay{\schemedisplay} -\def\schemedisplay{\par\begingroup\tt\hardspaces} -\def\endschemedisplay{\endgroup\par} -\def\schemeindent{} -\def\schatsign{\raw{@}} -\def\schbackslash{\raw{\}} -\def\schcarat{\raw{^}} -\def\schdot{\raw{.}} -\def\schlbrace{\raw{&##123;}} -\def\schrbrace{\raw{&##125;}} -\def\schtilde{\raw{~}} -\def\schunderscore{\raw{_}} -\def\becomes{$\rightarrow$} -\def\is{$\Rightarrow$} -\def\si{\raw{}} -\def\var#1{\emph{#1}} diff --git a/csug/scheme.sty b/csug/scheme.sty deleted file mode 100644 index db437b665..000000000 --- a/csug/scheme.sty +++ /dev/null @@ -1,89 +0,0 @@ -\usepackage{color} -\def\transerr#1{\begingroup\slshape} -\def\transin#1{\begingroup\color{red}} -\def\transout#1{\begingroup\color{blue}} -\def\traceout#1{\begingroup\color{blue}} -\def\endtranserr#1{\endgroup} -\def\endtransin#1{\endgroup} -\def\endtransout#1{\endgroup} -\def\endtraceout#1{\endgroup} - -% this didn't work --- screwed up indentation: -\long\def\showinteraction#1#2{\begin{minipage}[t]{4.375in}#1\end{minipage}\hfill\fbox{\begin{minipage}[t]{2in}#2\end{minipage}}} -% so I resorted to this: -\def\startrepl{\begin{minipage}[t]{4.3in}} % was 4.375 and 2 when interactionwindow = 28 -\def\endrepl{\end{minipage}} -\def\startinteraction{\begin{minipage}[t]{2.2in}\vrule\begin{minipage}[t]{2.2in}\hrule\schemeindent=2pt} -\def\endinteraction{\hrule\end{minipage}\vrule\end{minipage}} - -\font\ninefivett=cmtt9 at 9.5pt -\newskip\ttglue -\ttglue=.5em plus .25em minus .15em -\font\tinyvar=cmti7 -\font\smallvar=cmti9 -\font\summarysizevar=cmti9 -\font\indexsizevar=cmti8 -\font\normalvar=cmti10 at 11pt -\def\schemelarge{% - \def\schemelarger{\fontsize{14}{16}}% - \def\schemesmaller{\fontsize{10}{12}}% - \def\tt{\fontsize{12}{14}\ttfamily}% - \def\var##1{{\normalvar##1\/}}} -\def\schemenormal{% - \def\schemelarger{\fontsize{12}{14}}% - \def\schemesmaller{\fontsize{8}{9}}% - \def\tt{\fontsize{10pt}{11pt}\ttfamily\ninefivett}% - \def\var##1{{\smallvar##1\/}}} -\def\schemesmall{% - \def\schemelarger{\fontsize{10}{12}}% - \def\schemesmaller{\fontsize{6}{7}}% - \def\tt{\fontsize{8}{9}\ttfamily}% - \def\var##1{{\smallvar##1\/}}} -\def\schemesummarysize{% - \def\schemelarger{\fontsize{10}{12}}% - \def\schemesmaller{\fontsize{6}{7}}% - \def\tt{\fontsize{8}{9}\ttfamily}% - \def\var##1{{\summarysizevar##1\/}}} -\def\schemeindexsize{% - \def\schemelarger{\fontsize{10}{12}}% - \def\schemesmaller{\fontsize{6}{7}}% - \def\tt{\fontsize{7}{8}\ttfamily}% - \def\var##1{{\indexsizevar##1\/}}} -\schemenormal - -\newskip\schemeindent -\schemeindent=0pt -{\obeyspaces\global\let =\ } -\def\schtilde{\raisebox{-.5ex}{\hbox{\char`\~}}} -\def\schdot{.} -\def\schcarat{\char`\^} -\def\schbackslash{\char`\\} -\def\schatsign{\char`\@} -\def\schunderscore{\char`\_} -\def\schlbrace{\char`\{} -\def\schrbrace{\char`\}} -\def\scheme#1{\mbox{\tt\frenchspacing\spaceskip=\ttglue#1}} - -\def\schemeblankline{\par\penalty-100\vskip .7\baselineskip} -\def\schemelinestart{{\leavevmode\hbox{\hskip \schemeindent\relax}}} -%%% handle numbered lines in scheme.sty and scheme.hsty -%%% ---have scheme-prep produce only \schemelinestart -\def\schemelinestartnumbered#1{{\leavevmode\hbox{\hbox to 1em {\hfil{\rm #1}} \hskip .5\schemeindent\relax}}} - -\def\noskip\schemedisplay{\begingroup% - \parindent=0pt% - \parskip=0pt% - \def\becomes{\hbox to 2em{\hfil$\rightarrow$\hfil}}% - \def\is{\hbox to 2em{\hfil$\Rightarrow$\hfil}}% - \def\si{\hbox to 2em{\hfil}}% - \interlinepenalty=2000% - \tt\obeyspaces\frenchspacing} -\def\schemedisplay{\beforeschemedisplay\noskip\schemedisplay} -\def\longcode\schemedisplay{\penalty-200\vskip 8pt plus 4pt% - \kern3pt\hrule\kern5pt\nobreak\noskip\schemedisplay} -\def\endschemedisplay{\par\endgroup\afterschemedisplay} -\def\var#1{{\normalsize\textrm{\textit{#1}}}} -\def\raw#1{#1} -\def\beforeschemedisplay{\penalty-100\vskip\parskip\vskip5pt} -\def\afterschemedisplay{\penalty-200\vskip5pt} - diff --git a/makefiles/Makefile-csug.in b/makefiles/Makefile-csug.in index ebaf7176f..e1041d613 100644 --- a/makefiles/Makefile-csug.in +++ b/makefiles/Makefile-csug.in @@ -1,5 +1,7 @@ srcdir=oops-missing-srcdir installdir=oops-missing-installdir +InstallReleaseNotes=oops-missing-InstallReleaseNotes +relInstallReleaseNotes=oops-missing-relInstallReleaseNotes m=oops-missing-m STEXLIB=oops-missing-stexlib # Zuo overrides the above variables when running `make` @@ -17,18 +19,6 @@ DIR=$(shell basename `pwd`) target: canned logcheck1 logcheck2 checklibs $(x).html $(x).pdf -install: target - $(INSTALL) -m 2755 -d $(installdir) - $(INSTALL) -m 0644 --ifdiff *.html *.css $(installdir) - $(INSTALL) -m 0644 --ifdiff csug.pdf $(installdir)/csug10_0.pdf - $(INSTALL) -m 2755 -d $(installdir)/canned - $(INSTALL) -m 0644 --ifdiff canned/* $(installdir)/canned - $(INSTALL) -m 2755 -d $(installdir)/gifs - $(INSTALL) -m 0644 --ifdiff gifs/*.gif $(installdir)/gifs - $(INSTALL) -m 2755 -d $(installdir)/$(mathdir) - $(INSTALL) -m 0644 --ifdiff $(mathdir)/*.gif $(installdir)/$(mathdir) - (cd $(installdir); ln -s -f $(x).html index.html) - # thrice is not enough when starting from scratch logcheck1: $(x).thirdrun @if [ -n "`grep 'Warning: Label(s) may have changed' $(x).log`" ] ; then\ @@ -50,6 +40,35 @@ logcheck2: $(x).thirdrun include $(STEXLIB)/Mf-stex +install: target + $(INSTALL) -m 2755 -d $(installdir) + $(INSTALL) -m 0644 --ifdiff *.html *.css $(installdir) + $(INSTALL) -m 0644 --ifdiff csug.pdf $(installdir)/csug10_0.pdf + $(INSTALL) -m 2755 -d $(installdir)/canned + $(INSTALL) -m 0644 --ifdiff canned/* $(installdir)/canned + $(INSTALL) -m 2755 -d $(installdir)/gifs + $(INSTALL) -m 0644 --ifdiff gifs/*.gif $(installdir)/gifs +ifeq ($(strip $(KATEX)),) + $(INSTALL) -m 2755 -d $(installdir)/$(mathdir) + $(INSTALL) -m 0644 --ifdiff $(mathdir)/*.gif $(installdir)/$(mathdir) +else ifneq ($(strip $(KATEX_CSS)),no) +# if already installed release_notes, share katex.css and fonts + (if $(if $(findstring Windows,$(OS)),[ ! "windows" ],[ -e $(InstallReleaseNotes)/katex/katex.css ] && [ ! -L $(InstallReleaseNotes)/katex ]) ; \ + then \ + (cd $(installdir); ln -s -f $(relInstallReleaseNotes)/katex katex) ; \ + else \ + $(INSTALL) -m 2755 -d $(installdir)/katex/fonts ; \ + $(INSTALL) -m 0644 --ifdiff katex/katex.css $(installdir)/katex/katex.css ; \ + $(INSTALL) -m 0644 --ifdiff katex/fonts/* $(installdir)/katex/fonts ; \ + fi) +endif +ifeq ($(OS),Windows_NT) + cp $(installdir)/$(x).html $(installdir)/index.html +else + (cd $(installdir); ln -s -f $(x).html index.html) +endif + + stexsrc = csug.stex title.stex copyright.stex contents.stex\ preface.stex intro.stex use.stex expeditor.stex debug.stex foreign.stex\ binding.stex control.stex objects.stex numeric.stex io.stex\ @@ -57,7 +76,7 @@ stexsrc = csug.stex title.stex copyright.stex contents.stex\ compat.stex bibliography.stex summary.stex texsrc = ${stexsrc:%.stex=%.tex} -moresrc = tspl4-prep.stex priminfo.ss docond.ss csug8.cls csug8.hcls csug810.clo scheme.sty csug.bib \ +moresrc = tspl4-prep.stex priminfo.ss docond.ss csug8.cls csug8.hcls csug810.clo csug.bib \ setup.ss summary.ss tspl.bst $(stexsrc) $(moresrc): @@ -136,9 +155,14 @@ $(x).hprethirdrun: $(x).hsecondrun cat tspl.haux >> $x.haux touch $(x).hprethirdrun +$(x).hfourthrun: $(x).hprefourthrun +$(x).hprefourthrun: $(x).hthirdrun + cat tspl.haux >> $x.haux + touch $(x).hprefourthrun + $(x).prefirstrun: $(texsrc) csug8.cls csug810.clo -$(x).firstrun: scheme.sty +$(x).firstrun: tspl.aux: ${TSPLdir}/tspl.aux cat ${TSPLdir}/*.aux | grep '\\newlabel' | \ diff --git a/makefiles/Makefile-release_notes.in b/makefiles/Makefile-release_notes.in index 4abe8eb8d..59c0c9ef6 100644 --- a/makefiles/Makefile-release_notes.in +++ b/makefiles/Makefile-release_notes.in @@ -1,5 +1,7 @@ srcdir=oops-missing-srcdir installdir=oops-missing-installdir +InstallCSUG=oops-missing-InstallCSUG +relInstallCSUG=oops-missing-relInstallCSUG m=oops-missing-m STEXLIB=oops-missing-stexlib # Zuo overrides the above variables when running `make` @@ -25,7 +27,7 @@ bib = include $(STEXLIB)/Mf-stex srcs = $(x).stex releasenotes.cls releasenotes.hcls \ - macros.stex releasenotes.css scheme.sty + macros.stex releasenotes.css # define or override suffixes here @@ -42,10 +44,22 @@ install: $x.pdf $x.html fi) $(INSTALL) -m 2755 -d $(installdir)/gifs $(INSTALL) -m 0644 --ifdiff gifs/*.gif $(installdir)/gifs - $(INSTALL) -m 2755 -d $(installdir)/math -rm -rf $(installdir)/$(mathdir) +ifeq ($(strip $(KATEX)),) + $(INSTALL) -m 2755 -d $(installdir)/math $(INSTALL) -m 2755 -d $(installdir)/$(mathdir) if [ -e $(mathdir)/0.gif ] ; then $(INSTALL) -m 0644 $(mathdir)/*.gif $(installdir)/$(mathdir) ; fi +else ifneq ($(strip $(KATEX_CSS)),no) +# if already installed csug, share katex.css and fonts + (if $(if $(findstring Windows,$(OS)),[ ! "windows" ],[ -e $(InstallCSUG)/katex/katex.css ] && [ ! -L $(InstallCSUG)/katex ]) ; \ + then \ + (cd $(installdir); ln -s -f $(relInstallCSUG)/katex katex) ; \ + else \ + $(INSTALL) -m 2755 -d $(installdir)/katex/fonts ; \ + $(INSTALL) -m 0644 --ifdiff katex/katex.css $(installdir)/katex/katex.css ; \ + $(INSTALL) -m 0644 --ifdiff katex/fonts/* $(installdir)/katex/fonts ; \ + fi) +endif # define any dependencies here diff --git a/release_notes/releasenotes.css b/release_notes/releasenotes.css index ef7507d2c..a3958eeb8 100644 --- a/release_notes/releasenotes.css +++ b/release_notes/releasenotes.css @@ -55,3 +55,5 @@ table.indent {margin-left: 20px} .tag{ color: navy; font-weight: bold; } .entity{ color: purple; font-weight: bold; } .errflag{ color: red; font-weight: bold; } +.schemedisplay { line-height: 1.0625; } +.schemedisplay .katex { font-size: 1em; } diff --git a/release_notes/scheme.sty b/release_notes/scheme.sty deleted file mode 100644 index 72e85ee84..000000000 --- a/release_notes/scheme.sty +++ /dev/null @@ -1,47 +0,0 @@ -\usepackage{color} -\def\transerr#1{\begingroup\slshape} -\def\transin#1{\begingroup\color{red}} -\def\transout#1{\begingroup\color{blue}} -\def\endtranserr#1{\endgroup} -\def\endtransin#1{\endgroup} -\def\endtransout#1{\endgroup} - -\newskip\ttglue -\let\ninefivett=\tt % \font\ninefivett=cmtt9 at 9.5pt -\ttglue=.5em plus .25em minus .15em -\newskip\schemeindent -\schemeindent=0pt -{\obeyspaces\global\let =\ } -\def\schtilde{\raisebox{-.5ex}{\hbox{\char`\~}}} -\def\schdot{.} -\def\schcarat{\char`\^} -\def\schbackslash{\char`\\} -\def\schatsign{\char`\@} -\def\schunderscore{\char`\_} -\def\schlbrace{\char`\{} -\def\schrbrace{\char`\}} -\def\scheme#1{\mbox{\ttfamily\ninefivett\frenchspacing\spaceskip=\ttglue#1}} - -\def\schemeblankline{\par\beforeschemedisplay} -\def\schemelinestart{{\leavevmode\hbox{\hskip \schemeindent\relax}}} -%%% handle numbered lines in scheme.sty and scheme.hsty -%%% ---have scheme-prep produce only \schemelinestart -\def\schemelinestartnumbered#1{{\leavevmode\hbox{\hbox to 1em {\hfil{\rm #1}} \hskip .5\schemeindent\relax}}} - -\def\noskip\schemedisplay{\begingroup% - \parindent=0pt% - \parskip=0pt% - \def\becomes{\hbox to 2em{\hfil$\rightarrow$\hfil}}% - \def\is{\hbox to 2em{\hfil$\Rightarrow$\hfil}}% - \def\si{\hbox to 2em{\hfil}}% - \interlinepenalty=2000% - \baselineskip=11pt plus 1pt\ninefivett\obeyspaces\frenchspacing} -\def\schemedisplay{\beforeschemedisplay\noskip\schemedisplay} -\def\longcode\schemedisplay{\penalty-200\vskip 8pt plus 4pt% - \kern3pt\hrule\kern5pt\nobreak\noskip\schemedisplay} -\def\endschemedisplay{\par\endgroup\afterschemedisplay} -\def\var#1{{\normalsize\textrm{\textit{#1}}}} -\def\raw#1{#1} -\def\beforeschemedisplay{\penalty-100\vskip\parskip\vskip5pt} -\def\afterschemedisplay{\penalty-200\vskip5pt} - diff --git a/stex b/stex index 5e4f0ca67..27cddfbf5 160000 --- a/stex +++ b/stex @@ -1 +1 @@ -Subproject commit 5e4f0ca67bac448e19a24c09f12fc16d24cd6b6d +Subproject commit 27cddfbf59a48f3f10092e4dd0e450726b6b2e7c