mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-09 18:31:04 +00:00
Add support for rotated longtabulars (via [pdf]lscape)
Fixes: #9194 See #9194 for why we use an earlier file format change here.
This commit is contained in:
parent
a714f6cb76
commit
feab528fd1
@ -338,6 +338,7 @@
|
||||
\TestPackage{listings}
|
||||
\TestPackage[lithuanian.ldf]{lithuanian}
|
||||
\TestPackage{longtable}
|
||||
\TestPackage{lscape}
|
||||
\TestPackage{luainputenc}
|
||||
\TestPackage{mathdots}
|
||||
\TestPackage{mathrsfs}
|
||||
@ -352,6 +353,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
|
||||
|
@ -2162,6 +2162,30 @@ def revert_minted(document):
|
||||
del_token(document.header, "\\use_minted")
|
||||
|
||||
|
||||
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
|
||||
#
|
||||
@ -2207,7 +2231,7 @@ convert = [
|
||||
]
|
||||
|
||||
revert = [
|
||||
[543, [revert_minted]],
|
||||
[543, [revert_minted, revert_longtable_lscape]],
|
||||
[542, [revert_mathnumberingname]],
|
||||
[541, [revert_mathnumberpos]],
|
||||
[540, [revert_allowbreak]],
|
||||
|
@ -1093,6 +1093,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));
|
||||
|
@ -2763,8 +2763,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<string>(rotate) << "}\n";
|
||||
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}";
|
||||
@ -2931,8 +2935,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);
|
||||
@ -3477,6 +3485,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) {
|
||||
|
Loading…
Reference in New Issue
Block a user