[isabelle-dev] colored TeX-snippets

Makarius makarius at sketis.net
Tue Nov 27 17:18:28 CET 2012

On Tue, 13 Nov 2012, Christian Sternagel wrote:

> I wanted to write an isabellecolor.sty package which just uses some user 
> defined colors (by default the same colors as jEdit) for TeX-snippets.

Note that these editor color schemes are not very persistent of time.  I 
remember when people were imitating the "classic" XEmacs 21.4 + PG 3.x 
scheme in their slides, just before the switch to GNU Emacs 22 + PG 4. 
And of course, the one true style is XEmacs 21.1 + PG 2.x, as seen in this 
screenshot from 1999: 

jEdit default colors are occasionally seen in popular culture, but there 
are many specific Isabelle/jEdit colors and I've recently added plugin 
options to change all that.

> 1) The current document preparation system does not have markups for, e.g., 
> bound variables, free variables, constants, ...
> Thus I applied the trivial patch:
> diff -r 72efd6b4038d src/Pure/Thy/latex.ML
> --- a/src/Pure/Thy/latex.ML     Mon Nov 12 23:24:40 2012 +0100
> +++ b/src/Pure/Thy/latex.ML     Tue Nov 13 16:35:30 2012 +0900
> @@ -182,6 +182,20 @@
>     then ("\\isacommand{", "}")
>   else if s = Isabelle_Markup.keywordN orelse s = Isabelle_Markup.keyword2N
>     then ("\\isakeyword{", "}")
> +  else if s = Isabelle_Markup.constantN
> +    then ("\\isaconstant{", "}")
> +  else if s = Isabelle_Markup.tfreeN
> +    then ("\\isatfree{", "}")
> +  else if s = Isabelle_Markup.tvarN
> +    then ("\\isatvar{", "}")
> +  else if s = Isabelle_Markup.freeN
> +    then ("\\isafree{", "}")
> +  else if s = Isabelle_Markup.skolemN
> +    then ("\\isaskolem{", "}")
> +  else if s = Isabelle_Markup.boundN
> +    then ("\\isabound{", "}")
> +  else if s = Isabelle_Markup.varN
> +    then ("\\isavar{", "}")
>   else Markup.no_output;

The function patched above is Latex.latex_markup and installed via 
Markup.add_mode, so it can be easily changed in user space, by inventing a 
new print mode and including that in the list of active modes when 
producing the document.

There might have been reasons for not having this markup in the output, 
but I can't remember it on the spot.  The Isabelle document preparation 
system is still awaiting many reforms and catching up.

The next big reform will probably expose the XML document tree to some 
user functions to be mangled in arbitrary ways.

> 2) Theory sources (and hence also TeX-snippets from theory sources that are 
> not produced via antiquotations) do not seem to include markup information. 
> Obviously this information is available at some point (e.g., the highlighted 
> source text inside Isabelle/jEdit). Now, my questions:
>  - what are the Isabelle/Scala files that use markup information to color 
> source text in jEdit?
>  - is there already a plan to use the same machinery for document 
> preparation? if not, would there be interest in having such a thing?

That is all part of the next reform.  The document markup is accumulated 
on the Isabelle/Scala side, but document preparation happens in 
Isabelle/ML, so some rethinking is required.  See 
for the interpretation of document markup in terms of GUI metaphors of 
Java Graphics2D, Swing, jEdit.  The latex output works quite differently 
at the moment.

When I get a chance to revisit the document preparation problem, the next 
step will be to re-unify HTML generation with the editor view, probably by 
pulling it to the Scala side.

The Latex part is much harder to change, also because so many smart tricks 
have been devised over the years to achieve certain effects.  Tiny changes 
there easily invoke the wrath of followers of that black art.


More information about the isabelle-dev mailing list