mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 10:58:52 +00:00
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 feab528fd1
)
This commit is contained in:
parent
33e1ead22f
commit
9e52c7693e
@ -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}
|
||||
|
@ -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
|
||||
|
@ -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'^<features rotate=\"90\"\s.*islongtable=\"true\"\s.*$', re.IGNORECASE)
|
||||
while True:
|
||||
i = find_re(document.body, regexp, i)
|
||||
if i == -1:
|
||||
return
|
||||
|
||||
document.body[i] = document.body[i].replace(" rotate=\"90\"", "")
|
||||
lay = get_containing_layout(document.body, i)
|
||||
if lay == False:
|
||||
document.warning("Longtable has not layout!")
|
||||
i += 1
|
||||
continue
|
||||
begcmd = put_cmd_in_ert("\\begin{landscape}")
|
||||
endcmd = put_cmd_in_ert("\\end{landscape}")
|
||||
document.body[lay[2] : lay[2]] = endcmd + ["\\end_layout"]
|
||||
document.body[lay[1] : lay[1]] = ["\\begin_layout " + lay[0], ""] + begcmd
|
||||
|
||||
add_to_preamble(document, ["\\usepackage{pdflscape}"])
|
||||
i = lay[2]
|
||||
|
||||
|
||||
##
|
||||
# Conversion hub
|
||||
#
|
||||
@ -2301,7 +2325,7 @@ convert = [
|
||||
]
|
||||
|
||||
revert = [
|
||||
[543, [revert_minted]],
|
||||
[543, [revert_minted, revert_longtable_lscape]],
|
||||
[542, [revert_mathnumberingname]],
|
||||
[541, [revert_mathnumberpos]],
|
||||
[540, [revert_allowbreak]],
|
||||
|
@ -1098,6 +1098,15 @@ string const LaTeXFeatures::getPackages() const
|
||||
// The rest of these packages are somewhat more complicated
|
||||
// than those above.
|
||||
|
||||
// [pdf]lscape is used to rotate longtables
|
||||
if (mustProvide("lscape")) {
|
||||
if (runparams_.flavor == OutputParams::LATEX
|
||||
|| runparams_.flavor == OutputParams::DVILUATEX)
|
||||
packages << "\\usepackage{lscape}\n";
|
||||
else
|
||||
packages << "\\usepackage{pdflscape}\n";
|
||||
}
|
||||
|
||||
// The tipa package and its extensions (tipx, tone) must not
|
||||
// be loaded with non-TeX fonts, since fontspec includes the
|
||||
// respective macros
|
||||
|
@ -230,7 +230,8 @@ void GuiTabular::enableWidgets() const
|
||||
tabularWidthED->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));
|
||||
|
@ -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)
|
||||
if (rotate != 0) {
|
||||
if (is_long_tabular)
|
||||
os << "\\begin{landscape}\n";
|
||||
else
|
||||
os << "\\begin{turn}{" << convert<string>(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)
|
||||
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) {
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user