Don't allow labels to overlap the equations in SVG mode. Resolves issue #596. Some situations still may not be optimal.
This commit is contained in:
parent
a9ab53ece8
commit
b9e428e2cf
|
@ -331,17 +331,33 @@ MathJax.Hub.Register.StartupHook("SVG Jax Ready",function () {
|
|||
if (indent.indentshiftfirst !== MML.INDENTSHIFT.INDENTSHIFT) {indent.indentshift = indent.indentshiftfirst}
|
||||
if (indent.indentshift === "auto" || indent.indentshift === "") {indent.indentshift = "0"}
|
||||
var shift = SVG.length2em(indent.indentshift,mu,SVG.cwidth);
|
||||
var labelshift = SVG.length2em(values.minlabelspacing,mu,SVG.cwidth);
|
||||
if (this.displayIndent !== "0") {
|
||||
var dIndent = SVG.length2em(this.displayIndent,mu,SVG.cwidth);
|
||||
shift += (indent.indentAlign === MML.INDENTALIGN.RIGHT ? -dIndent: dIndent);
|
||||
var labelspace = SVG.length2em(values.minlabelspacing,mu,SVG.cwidth);
|
||||
var labelW = labelspace + C[LABEL].w, labelshift = 0, tw = svg.w;
|
||||
var dIndent = SVG.length2em(this.displayIndent,mu,SVG.cwidth);
|
||||
var s = (CALIGN[LABEL] === MML.INDENTALIGN.RIGHT ? -1 : 1);
|
||||
if (indent.indentalign === MML.INDENTALIGN.CENTER) {
|
||||
var dx = (SVG.cwidth-tw)/2; shift += dIndent;
|
||||
if (labelW + s*labelshift > dx + s*shift) {
|
||||
indent.indentalign = CALIGN[LABEL];
|
||||
shift = s*(labelW + s*labelshift); tw += labelW + Math.max(0,shift);
|
||||
}
|
||||
} else if (CALIGN[LABEL] === indent.indentalign) {
|
||||
if (dIndent < 0) {labelshift = s*dIndent; dIndent = 0}
|
||||
shift += s*dIndent; if (labelW > s*shift) shift = s*labelW; shift += labelshift;
|
||||
tw += s*shift;
|
||||
} else {
|
||||
shift -= s*dIndent;
|
||||
if (tw - s*shift + labelW > SVG.cwidth) {
|
||||
shift = s*(tw + labelW - SVG.cwidth);
|
||||
if (s*shift > 0) {tw = SVG.cwidth + s*shift; shift = 0}
|
||||
}
|
||||
}
|
||||
var eqn = svg; svg = this.SVG();
|
||||
svg.w = svg.r = SVG.cwidth; svg.hasIndent = true;
|
||||
svg.Align(C[LABEL],CALIGN[LABEL],labelshift,0);
|
||||
svg.hasIndent = true;
|
||||
svg.w = svg.r = Math.max(tw,SVG.cwidth);
|
||||
svg.Align(C[LABEL],CALIGN[LABEL],0,0,labelshift);
|
||||
svg.Align(eqn,indent.indentalign,0,0,shift);
|
||||
svg.tw += C[LABEL].w + shift +
|
||||
(indent.indentalign === MML.INDENTALIGN.CENTER ? 8 : 4)*labelshift;
|
||||
svg.tw = tw;
|
||||
}
|
||||
|
||||
this.SVGsaveData(svg);
|
||||
|
|
Loading…
Reference in New Issue
Block a user