This file records noteworthy changes.
+1.0.10 (<date>)
+* Powers of indexed objects are now parenthesized correctly in LaTeX output.
+
1.0.9 (11 June 2002)
* simplify_indexed() now raises/lowers dummy indices to canonicalize the index
variance. This allows some simplifications that weren't possible before,
{
GINAC_ASSERT(seq.size() > 0);
- if (is_of_type(c, print_tree)) {
+ if (is_a<print_tree>(c)) {
c.s << std::string(level, ' ') << class_name()
<< std::hex << ", hash=0x" << hashvalue << ", flags=0x" << flags << std::dec
} else {
- bool is_tex = is_of_type(c, print_latex);
+ bool is_tex = is_a<print_latex>(c);
const ex & base = seq[0];
- bool need_parens = is_ex_exactly_of_type(base, add) || is_ex_exactly_of_type(base, mul)
- || is_ex_exactly_of_type(base, ncmul) || is_ex_exactly_of_type(base, power)
- || is_ex_of_type(base, indexed);
+
+ if (precedence() <= level)
+ c.s << (is_tex ? "{(" : "(");
if (is_tex)
c.s << "{";
- if (need_parens)
- c.s << "(";
- base.print(c);
- if (need_parens)
- c.s << ")";
+ base.print(c, precedence());
if (is_tex)
c.s << "}";
printindices(c, level);
+ if (precedence() <= level)
+ c.s << (is_tex ? ")}" : ")");
}
}
exvector::const_iterator it=seq.begin() + 1, itend = seq.end();
- if (is_of_type(c, print_latex)) {
+ if (is_a<print_latex>(c)) {
// TeX output: group by variance
bool first = true;
// functions overriding virtual functions from base classes
public:
void print(const print_context & c, unsigned level = 0) const;
+ unsigned precedence(void) const {return 55;}
bool info(unsigned inf) const;
ex eval(int level = 0) const;
exvector get_free_indices(void) const;
#include "constant.h"
#include "inifcns.h" // for log() in power::derivative()
#include "matrix.h"
+#include "indexed.h"
#include "symbol.h"
#include "print.h"
#include "archive.h"
} else {
+ bool is_tex = is_a<print_latex>(c);
+
if (exponent.is_equal(_ex1_2)) {
- if (is_a<print_latex>(c))
- c.s << "\\sqrt{";
- else
- c.s << "sqrt(";
+ c.s << (is_tex ? "\\sqrt{" : "sqrt(");
basis.print(c);
- if (is_a<print_latex>(c))
- c.s << '}';
- else
- c.s << ')';
+ c.s << (is_tex ? '}' : ')');
} else {
- if (precedence() <= level) {
- if (is_a<print_latex>(c))
- c.s << "{(";
- else
- c.s << "(";
- }
+ if (precedence() <= level)
+ c.s << (is_tex ? "{(" : "(");
basis.print(c, precedence());
if (is_a<print_python>(c))
c.s << "**";
else
c.s << '^';
- if (is_a<print_latex>(c))
+ if (is_tex)
c.s << '{';
exponent.print(c, precedence());
- if (is_a<print_latex>(c))
+ if (is_tex)
c.s << '}';
- if (precedence() <= level) {
- if (is_a<print_latex>(c))
- c.s << ")}";
- else
- c.s << ')';
- }
+ if (precedence() <= level)
+ c.s << (is_tex ? ")}" : ")");
}
}
}