[texhax] very long nested expressions in math-mode

Douglas Lewan d_lewan2000 at yahoo.com
Tue Oct 18 20:35:12 CEST 2005


You might want to consider this reference:

http://research.microsoft.com/users/lamport/proofs/proofs.html

--- Torsten Anders <torstenanders at gmx.de> wrote:

> Dear all,
> 
> Firstly, I should mention that I am new to this
> list. I read the FAQ 
> and quite some docomentation to find an answer to my
> problem, without 
> success unfortunately. Nevertheless, I apologise in
> case I missed 
> something obvious.
> 
> I want to transform program source examples into
> mathematical notation 
> in Latex (tetex, i.e. incl. AMS packages), because
> that way the 
> examples become more concise and better to
> communicate. Because the 
> source is based on functional and logic programming,
> the available 
> algorithm packages are less suited -- the result is
> too easily misread 
> as procedural programming. Instead, I would prefer
> to write plain math 
> expressions.
> 
> In short, my problem is that I need to write rather
> long expressions 
> (e.g. highly nested and with long variable names for
> 
> comprehensibility). Thus, line breaks are
> inevitable. Naturally, the 
> continued expression should be indented to indicate
> the nested 
> structure of the expression. That is, I don't what
> to mechanically 
> indent by a certain amount (e.g. by \quad), but the
> indentation should 
> depend on the indentation depth of the surrounding,
> e.g., function 
> call. For instance, a short dummy example may read
> like this:
> 
> xs = find(map([1, 2, 3],
>                          f : f(x) = x^3),
>                isEven)
> 
> The most easy way to do something like this is
> probably to use 
> mono-space fonts in some verbatim environment.
> However, I would prefer 
> to write my example in Latex's math mode: e.g., I
> would prefer to use 
> signs like \vee, \wedge, \bigwedge etc.
> 
> To avoid getting lost in my own long Latex examples,
> I would like to 
> define some suitable Latex command, e.g., to get the
> example above I 
> would like to write something like
> 
> $xs = \Apply{find}{\Apply{map}{[1,2,3], \\ f : f(x)
> = x^3}, \\ isEven}$
> 
> So far I did not find a way to define \Apply as
> above and get a 
> suitable output. In the following, I present a few
> of my attempts to 
> set my examples. However, none of what I came up
> with so far is really 
> satisfying. Perhaps anybody here can help me..
> 
> Here comes my first naive attempt to define \Apply:
> 
> \newcommand{\Apply}[2]{\ensuremath{#1 (
> \begin{aligned}[t] #2 
> \end{aligned} ) }}
> 
> which is called
> 
> $xs = \Apply{find}{&\Apply{map}{&[1,2,3], \\ &f :
> f(x) = x^3}, \\ 
> &isEven}$
> 
> The additional '&' makes the code slightly less
> readable, but the 
> actual problem is that everything after the aligned
> environment (i.e. 
> the comma and the cloing parenthesis) 'go back' on
> the original line 
> like
> 
> xs = find(map([1, 2, 3],	 ),)
>                          f : f(x) = x^3
>                isEven
> 
> Next try:
> 
> \newcommand{\Apply}[3]{\ensuremath{#1 (
> \begin{aligned}[t] #2 ) #3 
> \end{aligned} }}
> 
> $xs = \Apply{find}{&\Apply{map}{&[1,2,3], \\ &f :
> f(x) = x^3}{,} \\ 
> &isEven}{}$
> 
> This results in the desired output, but for complex
> examples with 
> parenthesis/brackets/curly braces in the third
> \Apply argument this 
> becomes very hard to read and the editor (i.e.
> emacs) can't help 
> anymore.
> 
> To avoid the problem that after a box -- which
> starts at the current 
> line but introduces some line breaks -- the current
> line is _not_ 
> continued I tried to center the whole expression:
> 
> \newcommand{\Apply}[2]{\ensuremath{#1 \left(
> \begin{aligned} #2 
> \end{aligned} \right) }}
> 
> $xs = \Apply{find}{&\Apply{map}{&[1,2,3], \\ &f :
> f(x) = x^3}, \\ 
> &isEven}$
> 
> The structure of the resulting expression is still
> clearly readable and 
> the code is also more easy to write. However, this
> layout can also 
> easily be misread: instead surrounding the arguments
> of a function call 
> the parenthesis look more like a binom (and reducing
> the gap between 
> the function name and the parenthesis does not
> really overcome that).  
> :-P
> 
> Does anybody have a better idea how to set very long
> nested 
> expressions? Any help is most appreciated!
> 
> Best wishes,
> Torsten
> 
> --
> Torsten Anders
> Sonic Arts Research Centre
> Queen's University Belfast (UK)
> www.torsten-anders.de
> 
> _______________________________________________
> TeX FAQ: http://www.tex.ac.uk/faq
> TeX newsgroup:
> http://groups.google.com/groups?group=comp.text.tex
> Mailing list archives:
> http://tug.org/pipermail/texhax/
> More links: http://tug.org/begin.html
> 
> Automated subscription management:
> http://tug.org/mailman/listinfo/texhax
> Human mailing list managers: postmaster at tug.org
> 



More information about the texhax mailing list