From 0e33060337266bbc49a1af348913e57ae0e8ef86 Mon Sep 17 00:00:00 2001 From: Enrico Forestieri Date: Tue, 21 Aug 2012 01:30:51 +0200 Subject: [PATCH] Fix bug #8305: ^ symbol does not render into upward arrow when using mhchem The mhchem package treats the caret both as a shorthand for \uparrow or as a superscript operator according to whether it is surrounded by spaces or not. The \ce and \cf insets allow inserting spaces but there is no provision for inserting a space after the caret, which is always considered by LyX as a superscript operator. The solution here is to insert a space after the caret if the superscript is empty or an empty brace inset. Mathed does not allow empty superscripts, so an empty brace has to be inserted when working in LyX. On the other hand, when importing latex code, an empty superscript is retained. This has no effect whatsoever for normal latex code, as a space after the caret is ignored. In any case, the output is only changed if an empty brace inset is used as superscript. Specifically, the output is changed from "^{{}}" to "^ {}". (cherry picked from commit f251e0189279147cbf20c4b4ad4ba4256396fd44) --- src/mathed/InsetMathScript.cpp | 13 +++++++++++-- status.20x | 3 +++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/mathed/InsetMathScript.cpp b/src/mathed/InsetMathScript.cpp index 046b679152..f60b09043b 100644 --- a/src/mathed/InsetMathScript.cpp +++ b/src/mathed/InsetMathScript.cpp @@ -15,6 +15,7 @@ #include "DispatchResult.h" #include "FuncRequest.h" #include "FuncStatus.h" +#include "InsetMathBrace.h" #include "InsetMathFont.h" #include "InsetMathScript.h" #include "InsetMathSymbol.h" @@ -547,8 +548,16 @@ void InsetMathScript::write(WriteStream & os) const if (hasDown() /*&& down().size()*/) os << "_{" << down() << '}'; - if (hasUp() /*&& up().size()*/) - os << "^{" << up() << '}'; + if (hasUp() /*&& up().size()*/) { + // insert space if up() is empty or an empty brace inset + // (see bug 8305) + if (os.latex() && (up().size() == 0 || + (up().size() == 1 && up().back()->asBraceInset() && + up().back()->asBraceInset()->cell(0).empty()))) + os << "^ {}"; + else + os << "^{" << up() << '}'; + } if (lock_ && !os.latex()) os << "\\lyxlock "; diff --git a/status.20x b/status.20x index b69d477762..9f07dc6962 100644 --- a/status.20x +++ b/status.20x @@ -116,6 +116,9 @@ What's new - Fix LaTeX output of IPA tone symbols. +- Fix support for mhchem upward arrows, which in mathed are rendered as + empty (brace insets) superscripts (bug 8305). + * USER INTERFACE