Add \overleftrightarrow command. This is simply another Style command with custom CSS to make a line with an arrowhead at each end. There were a couple of small issues here: 1. :after is used to fill empty blocks, but I need :after for the right arrowhead. This was resolved by using min-width and min-height. Both are extremely common CSS at this point. 2. The original \overleftarrow and \overrightarrow work upon which this is based do not scale well. I made no effort to fix the scaling issue. The current arrows misalign with the line if the font-size changes even slightly. Using \overleftarrow in the visual test page, where the base font is .8em causes issues. Without using JavaScript to alter inline styles, I think that end users will have to write custom styles if they are using non-standard font sizes. This is no worse than the original implementation, so I feel confident that the \overleftrightarrow is as good as what currently exists for the other arrow types. 3. The collapsed arrowheads for \overleftrightarrow collapse on top of one another when the block is empty. It looks like an asterisk. The min-width could be made larger. This is part of a set of geometric markers that need at least two identifiers underneath. No line segment, ray, or line can be defined without at least two points. Given that the current \over* markers do not have enough space when empty for two characters, I concluded that two space was not necessary here either. The difference, however, is that the single-arrowhead lines do not present a visual miscue when collapsed to a single character width. This would be an easy change. Given the variable width nature of Symbola, I recommend that the min-width be set to 1.5em if this change is desired. Our custom CSS that we apply on top of MathQuill's base CSS for our product does use the 1.5em min-width.
diff --git a/src/commands/math/commands.js b/src/commands/math/commands.js index 7d7cc31..20a18ac 100644 --- a/src/commands/math/commands.js +++ b/src/commands/math/commands.js
@@ -81,6 +81,7 @@ LatexCmds.overline = LatexCmds.bar = bind(Style, '\\overline', 'span', 'class="mq-non-leaf mq-overline"'); LatexCmds.overrightarrow = bind(Style, '\\overrightarrow', 'span', 'class="mq-non-leaf mq-overarrow mq-arrow-right"'); LatexCmds.overleftarrow = bind(Style, '\\overleftarrow', 'span', 'class="mq-non-leaf mq-overarrow mq-arrow-left"'); +LatexCmds.overleftrightarrow = bind(Style, '\\overleftrightarrow', 'span', 'class="mq-non-leaf mq-overarrow mq-arrow-both"'); LatexCmds.overarc = bind(Style, '\\overarc', 'span', 'class="mq-non-leaf mq-overarc"'); // `\textcolor{color}{math}` will apply a color to the given math content, where
diff --git a/src/css/math.less b/src/css/math.less index ac6b777..65ac2e9 100644 --- a/src/css/math.less +++ b/src/css/math.less
@@ -356,9 +356,11 @@ } .mq-overarrow { + min-width: .5em; border-top: 1px solid black; margin-top: 1px; padding-top: 0.2em; + text-align: center; &:before { display: block; @@ -377,5 +379,34 @@ filter: FlipH; -ms-filter: "FlipH"; } + &.mq-arrow-both { + vertical-align: text-bottom; + + &.mq-empty { + min-height: 1.23em; + + &:after { + top: -0.34em; + } + } + &:before{ + -moz-transform: scaleX(-1); + -o-transform: scaleX(-1); + -webkit-transform: scaleX(-1); + transform: scaleX(-1); + filter: FlipH; + -ms-filter: "FlipH"; + } + &:after { + display: block; + position: relative; + top: -2.3em; + font-size: 0.5em; + line-height: 0em; + content: '\27A4'; + visibility: visible; //must override .mq-editable-field.mq-empty:after + text-align: right; + } + } } }