No need to use \fcolorbox with explicit black frame and no background

White background, however, is always treated explicit (think non-white
page background)
This commit is contained in:
Juergen Spitzmueller 2023-10-01 10:12:52 +02:00
parent 2854355fe3
commit 343a9749ab
2 changed files with 23 additions and 9 deletions

View File

@ -430,9 +430,11 @@ void InsetBox::latex(otexstream & os, OutputParams const & runparams) const
if (separation_string != defaultSep && thickness_string == defaultThick)
os << "{\\fboxsep " << from_ascii(separation_string);
if (!params_.inner_box && !width_string.empty()) {
if (params_.framecolor != "default" || params_.backgroundcolor != "none") {
os << maybeBeginL << "\\fcolorbox{" << getFrameColor() << "}{" << getBackgroundColor() << "}{";
os << "\\makebox";
if (useFColorBox()) {
os << maybeBeginL
<< "\\fcolorbox{" << getFrameColor()
<< "}{" << getBackgroundColor()
<< "}{" << "\\makebox";
needEndL = !maybeBeginL.empty();
} else
os << "\\framebox";
@ -449,8 +451,10 @@ void InsetBox::latex(otexstream & os, OutputParams const & runparams) const
if (params_.hor_pos != 'c')
os << "[" << params_.hor_pos << "]";
} else {
if (params_.framecolor != "default" || params_.backgroundcolor != "none") {
os << maybeBeginL << "\\fcolorbox{" << getFrameColor() << "}{" << getBackgroundColor() << "}";
if (useFColorBox()) {
os << maybeBeginL
<< "\\fcolorbox{" << getFrameColor()
<< "}{" << getBackgroundColor() << "}";
needEndL = !maybeBeginL.empty();
} else {
if (!cprotect.empty() && contains(runparams.active_chars, '^')) {
@ -616,8 +620,7 @@ void InsetBox::latex(otexstream & os, OutputParams const & runparams) const
break;
case Boxed:
os << "}";
if (!params_.inner_box && !width_string.empty()
&& (params_.framecolor != "default" || params_.backgroundcolor != "none"))
if (!params_.inner_box && !width_string.empty() && useFColorBox())
os << "}";
if (separation_string != defaultSep || thickness_string != defaultThick)
os << "}";
@ -810,8 +813,8 @@ void InsetBox::validate(LaTeXFeatures & features) const
break;
case Boxed:
features.require("calc");
if (params_.framecolor != "default" || params_.backgroundcolor != "none")
// \fcolorbox, which is part of (x)color, is used
if (useFColorBox())
// \fcolorbox is provided by [x]color
features.require("xcolor");
break;
case ovalbox:
@ -892,6 +895,15 @@ string const InsetBox::getBackgroundColor() const
}
bool InsetBox::useFColorBox() const
{
// we only need an \fcolorbox if the framecolor is something else
// than black in the output or if the backgroundcolor is not none
// (also needed with white, consider non-white page coloring)
return getFrameColor() != "black" || params_.backgroundcolor != "none";
}
/////////////////////////////////////////////////////////////////////////
//
// InsetBoxParams

View File

@ -167,6 +167,8 @@ private:
std::string const getFrameColor(bool const gui = false) const;
///
std::string const getBackgroundColor() const;
///
bool useFColorBox() const;
///
friend class InsetBoxParams;