]> git.lyx.org Git - features.git/commitdiff
Fix data loss with [ in first cell of aligned
authorGeorg Baum <baum@lyx.org>
Mon, 12 Sep 2016 18:56:05 +0000 (20:56 +0200)
committerGeorg Baum <baum@lyx.org>
Mon, 12 Sep 2016 18:56:05 +0000 (20:56 +0200)
If the first character in the first cell of an aligned math environment is
'[', and the environment does not use top or bottom vertical alignment,
then LyX did write the '[' unprotected so that it got misinterpreted as
optional argument, both when reading the .lyx file in LyX and when reading
the .tex file in LaTeX => data loss!
The fix is to output an empty optional argument in this case, which is
interpreted as default alignment both by LyX and LaTeX. It would also be
possible to output \[ in the first cell instead, but this would be more
difficult to implement.

src/mathed/InsetMathSplit.cpp
status.22x

index 515dcb04591f6490a95d962c029ea9ffbf9cdbd5..e385e0a09ac3c3d735592d5bc7e8620278aff5ae 100644 (file)
@@ -14,7 +14,7 @@
 
 #include "MathData.h"
 #include "MathStream.h"
-#include "MathStream.h"
+#include "MathSupport.h"
 
 #include "FuncRequest.h"
 #include "FuncStatus.h"
@@ -141,9 +141,19 @@ void InsetMathSplit::write(WriteStream & ws) const
                suffix = from_ascii("*");
        ws << "\\begin{" << name_ << suffix << '}';
        bool open = ws.startOuterRow();
-       if (name_ != "split" && name_ != "align" && verticalAlignment() != 'c')
-               ws << '[' << verticalAlignment() << ']';
-       if (name_ == "alignedat")
+       bool const hasArg(name_ == "alignedat");
+       if (name_ != "split" && name_ != "align") {
+               if (verticalAlignment() != 'c')
+                       ws << '[' << verticalAlignment() << ']';
+               else if (!hasArg) {
+                       docstring const first(asString(cell(0)));
+                       // prevent misinterpretation of the first character of
+                       // the first cell as optional argument (bug 10361)
+                       if (!first.empty() && first[0] == '[')
+                               ws << "[]";
+               }
+       }
+       if (hasArg)
                ws << '{' << static_cast<unsigned int>((ncols() + 1)/2) << '}';
        InsetMathGrid::write(ws);
        if (ws.fragile())
index d62cd437efb4f2be9407fea6ba938c15f53cfde4..4a5cecb2cd45ab4e5f67ce7362e9361b1e668360 100644 (file)
@@ -69,6 +69,8 @@ What's new
 
 - Fix LaTeX error with recent LuaTeX versions when using landscape.
 
+- Fix data loss with [ in first cell of aligned environment (bug 10361).
+
 
 * LYX2LYX