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.
This commit is contained in:
Georg Baum 2016-09-12 20:56:05 +02:00
parent ca018b237a
commit 701f10a502
2 changed files with 16 additions and 4 deletions

View 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())

View 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