From 9e52c7693e4c660bb4fbad4884a64442a40b4982 Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Wed, 18 Apr 2018 13:22:29 +0200 Subject: [PATCH] Add support for rotated longtabulars (via [pdf]lscape) Fixes: #9194 See #9194 for why we use an earlier file format change here. (cherry picked from commit feab528fd1555065592284603d8443b71f534a7a) --- lib/chkconfig.ltx | 2 + lib/doc/LaTeXConfig.lyx | 64 ++++++++++++++++++++++++++++++++ lib/lyx2lyx/lyx_2_3.py | 26 ++++++++++++- src/LaTeXFeatures.cpp | 9 +++++ src/frontends/qt4/GuiTabular.cpp | 22 ++++++----- src/insets/InsetTabular.cpp | 18 +++++++-- status.23x | 2 + 7 files changed, 128 insertions(+), 15 deletions(-) diff --git a/lib/chkconfig.ltx b/lib/chkconfig.ltx index 3fd95722bf..4adc56ac3a 100644 --- a/lib/chkconfig.ltx +++ b/lib/chkconfig.ltx @@ -334,6 +334,7 @@ \TestPackage{listings} \TestPackage[lithuanian.ldf]{lithuanian} \TestPackage{longtable} +\TestPackage{lscape} \TestPackage{luainputenc} \TestPackage{mathdots} \TestPackage{mathrsfs} @@ -348,6 +349,7 @@ \TestPackage{nomencl} \TestPackage{paralist} \TestPackage{pdfcolmk} +\TestPackage{pdflscape} \TestPackage{polyglossia} \TestPackage{pdfcomment} \TestPackage{pdfpages} diff --git a/lib/doc/LaTeXConfig.lyx b/lib/doc/LaTeXConfig.lyx index 2fbba56ab9..b99b340187 100644 --- a/lib/doc/LaTeXConfig.lyx +++ b/lib/doc/LaTeXConfig.lyx @@ -5918,6 +5918,38 @@ natbib You'll need to have jurabib version 0.6 at least. \end_layout +\begin_layout Subsection +lscape +\end_layout + +\begin_layout Description +Found: +\begin_inset Info +type "package" +arg "lscape" +\end_inset + + +\end_layout + +\begin_layout Description +CTAN: +\series medium + +\family typewriter +\series default +macros/latex/contrib/graphics/ +\end_layout + +\begin_layout Description +Notes: The package +\family sans +lscape +\family default + is used to turn specific contents (longtables particularly) to landscape + mode with DVI/PS output. +\end_layout + \begin_layout Subsection mslapa \end_layout @@ -6031,6 +6063,38 @@ jurabib instead). \end_layout +\begin_layout Subsection +pdflscape +\end_layout + +\begin_layout Description +Found: +\begin_inset Info +type "package" +arg "pdflscape" +\end_inset + + +\end_layout + +\begin_layout Description +CTAN: +\series medium + +\family typewriter +\series default +macros/latex/contrib/oberdiek/ +\end_layout + +\begin_layout Description +Notes: The package +\family sans +pdflscape +\family default + is used to turn specific contents (longtables particularly) to landscape + mode with PDF output. +\end_layout + \begin_layout Section Packages required by modules \end_layout diff --git a/lib/lyx2lyx/lyx_2_3.py b/lib/lyx2lyx/lyx_2_3.py index a39aaadd09..9a395687df 100644 --- a/lib/lyx2lyx/lyx_2_3.py +++ b/lib/lyx2lyx/lyx_2_3.py @@ -2256,6 +2256,30 @@ def revert_minted(document): document.header.pop(i) +def revert_longtable_lscape(document): + " revert the longtable landcape mode to ERT " + i = 0 + regexp = re.compile(r'^setEnabled(setwidth); tabularWidthUnitLC->setEnabled(setwidth); - rotateTabularAngleSB->setEnabled(rotateTabularCB->isChecked()); + rotateTabularAngleSB->setEnabled(rotateTabularCB->isChecked() + && !longTabularCB->isChecked()); rotateCellAngleSB->setEnabled(rotateCellCB->isChecked()); bool const enable_valign = @@ -258,11 +259,8 @@ void GuiTabular::enableWidgets() const // longtables and tabular* cannot have a vertical alignment TableAlignLA->setDisabled(is_tabular_star || longtabular); TableAlignCO->setDisabled(is_tabular_star || longtabular); - // longtable cannot be rotated (with rotating package) - // FIXME: Add support for [pdf]lscape - rotateTabularCB->setDisabled(longtabular); - rotateTabularLA->setDisabled(longtabular); - // this one would also be disabled with [pdf]lscape + // longtable cannot be rotated with rotating package, only + // with [pdf]lscape, which only supports 90 deg. rotateTabularAngleSB->setDisabled(longtabular); // FIXME: This Dialog is really horrible, disabling/enabling a checkbox @@ -743,12 +741,16 @@ void GuiTabular::paramsToDialog(Inset const * inset) rotateCellAngleSB->setValue(90); } - rotateTabularCB->setChecked(tabular.rotate != 0); - if (rotateTabularCB->isChecked()) - rotateTabularAngleSB->setValue(tabular.rotate != 0 ? tabular.rotate : 90); - longTabularCB->setChecked(tabular.is_long_tabular); + rotateTabularCB->setChecked(tabular.rotate != 0); + if (rotateTabularCB->isChecked()) { + if (longTabularCB->isChecked()) + rotateTabularAngleSB->setValue(90); + else + rotateTabularAngleSB->setValue(tabular.rotate != 0 ? tabular.rotate : 90); + } + borders->setTop(tabular.topLine(cell)); borders->setBottom(tabular.bottomLine(cell)); borders->setLeft(tabular.leftLine(cell)); diff --git a/src/insets/InsetTabular.cpp b/src/insets/InsetTabular.cpp index 2037b76707..26397ea62a 100644 --- a/src/insets/InsetTabular.cpp +++ b/src/insets/InsetTabular.cpp @@ -2731,8 +2731,12 @@ void Tabular::latex(otexstream & os, OutputParams const & runparams) const if (!TexRow::isNone(pos)) os.texrow().start(pos); - if (rotate != 0 && !is_long_tabular) - os << "\\begin{turn}{" << convert(rotate) << "}\n"; + if (rotate != 0) { + if (is_long_tabular) + os << "\\begin{landscape}\n"; + else + os << "\\begin{turn}{" << convert(rotate) << "}\n"; + } if (is_long_tabular) { os << "\\begin{longtable}"; @@ -2882,8 +2886,12 @@ void Tabular::latex(otexstream & os, OutputParams const & runparams) const os << "\\end{tabular}"; } - if (rotate != 0 && !is_long_tabular) - os << breakln << "\\end{turn}"; + if (rotate != 0) { + if (is_long_tabular) + os << breakln << "\\end{landscape}"; + else + os << breakln << "\\end{turn}"; + } if (!TexRow::isNone(pos)) os.texrow().start(pos); @@ -3428,6 +3436,8 @@ void Tabular::validate(LaTeXFeatures & features) const features.require("booktabs"); if (is_long_tabular) features.require("longtable"); + if (rotate && is_long_tabular) + features.require("lscape"); if (needRotating()) features.require("rotating"); for (idx_type cell = 0; cell < numberofcells; ++cell) { diff --git a/status.23x b/status.23x index 1662e82627..65eacbb3f5 100644 --- a/status.23x +++ b/status.23x @@ -20,6 +20,8 @@ What's new - It possible to anonymize document's content for bug submissions via buffer-anonymize lfun (bug 7259). +- Support rotation of multi-page tables via (pdf)lscape (bug 9194). + * TEX2LYX IMPROVEMENTS