From 701f10a502a61647e0ede99b1ed2c187ed168848 Mon Sep 17 00:00:00 2001 From: Georg Baum Date: Mon, 12 Sep 2016 20:56:05 +0200 Subject: [PATCH] Fix data loss with [ in first cell of aligned 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 | 18 ++++++++++++++---- status.22x | 2 ++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/mathed/InsetMathSplit.cpp b/src/mathed/InsetMathSplit.cpp index 515dcb0459..e385e0a09a 100644 --- a/src/mathed/InsetMathSplit.cpp +++ b/src/mathed/InsetMathSplit.cpp @@ -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((ncols() + 1)/2) << '}'; InsetMathGrid::write(ws); if (ws.fragile()) diff --git a/status.22x b/status.22x index d62cd437ef..4a5cecb2cd 100644 --- a/status.22x +++ b/status.22x @@ -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