]> git.lyx.org Git - features.git/commitdiff
Fix LaTeX output of fixed-width cells with decimal separator
authorJuergen Spitzmueller <spitz@lyx.org>
Sat, 22 Oct 2016 10:13:36 +0000 (12:13 +0200)
committerJuergen Spitzmueller <spitz@lyx.org>
Sat, 22 Oct 2016 17:27:53 +0000 (19:27 +0200)
This follows Uwe's suggestions (and discharges my own).

The result is not ideal, but there is currently no ideal solution.

Fixes: #9568
src/insets/InsetTabular.cpp
status.22x

index d5ce1c55470346dc342910050947469711bc8b6a..62fe6c56a7ceeab0e1a70bf04e7af2bc215a4892 100644 (file)
@@ -1032,7 +1032,7 @@ bool Tabular::updateColumnWidths()
                        idx_type const i = cellIndex(r, c);
                        if (columnSpan(i) == 1) {
                                if (getAlignment(i) == LYX_ALIGN_DECIMAL
-                                       && cell_info[r][c].decimal_width!=0)
+                                       && cell_info[r][c].decimal_width != 0)
                                        new_width = max(new_width, cellInfo(i).width
                                                + max_dwidth[c] - cellInfo(i).decimal_width);
                                else
@@ -2735,6 +2735,7 @@ void Tabular::latex(otexstream & os, OutputParams const & runparams) const
                        os << column_info[c].align_special;
                } else {
                        if (!column_info[c].p_width.zero()) {
+                               bool decimal = false;
                                switch (column_info[c].alignment) {
                                case LYX_ALIGN_LEFT:
                                        os << ">{\\raggedright}";
@@ -2749,24 +2750,49 @@ void Tabular::latex(otexstream & os, OutputParams const & runparams) const
                                case LYX_ALIGN_BLOCK:
                                case LYX_ALIGN_LAYOUT:
                                case LYX_ALIGN_SPECIAL:
+                                       break;
                                case LYX_ALIGN_DECIMAL:
+                                       os << ">{\\raggedleft}";
+                                       decimal = true;
                                        break;
                                }
 
+                               char valign = 'p';
                                switch (column_info[c].valignment) {
                                case LYX_VALIGN_TOP:
-                                       os << 'p';
+                                       // this is the default
                                        break;
                                case LYX_VALIGN_MIDDLE:
-                                       os << 'm';
+                                       valign = 'm';
                                        break;
                                case LYX_VALIGN_BOTTOM:
-                                       os << 'b';
+                                       valign = 'b';
                                        break;
-                       }
-                               os << '{'
-                                  << from_ascii(column_info[c].p_width.asLatexString())
-                                  << '}';
+                               }
+                               os << valign;
+
+                               // Fixed-width cells with alignment at decimal separator
+                               // are output as two cells of half the width with the decimal
+                               // separator as column sep. This effectively puts the content
+                               // centered, which differs from the normal decimal sep alignment
+                               // and is not ideal, but we cannot do better ATM (see #9568).
+                               // FIXME: Implement proper decimal sep alignment, e.g. via siunitx.
+                               if (decimal) {
+                                       docstring const halffixedwith =
+                                               from_ascii(Length(column_info[c].p_width.value() / 2,
+                                                                 column_info[c].p_width.unit()).asLatexString());
+                                       os << '{'
+                                          << halffixedwith
+                                          << '}'
+                                          << "@{\\extracolsep{0pt}" << column_info[c].decimal_point << "}"
+                                          << valign
+                                          << '{'
+                                          << halffixedwith
+                                          << '}';
+                               } else
+                                       os << '{'
+                                          << from_ascii(column_info[c].p_width.asLatexString())
+                                          << '}';
                        } else {
                                switch (column_info[c].alignment) {
                                case LYX_ALIGN_LEFT:
index 783cb6a05b6b88b192d13a8c031ba60a83fa4597..11bba18f398e2d3d0b61f25dc910f4c0092887e0 100644 (file)
@@ -48,6 +48,8 @@ What's new
 
 * DOCUMENT INPUT/OUTPUT
 
+- Fix LaTeX output of fixed-width cells with decimal separator (bug 9568).
+
 - Do not hardcode required packages for Note inset.
 
 - Make *-lyxformat-* backup files use .lyx~ extension.