Full delimiter support for llbracket and rrbracket

stmaryrd.sty sets these symbols up as variable size math delimiters (i.e.
they may be used with \left and \right). Now LyX knows about that and offers
them in the delimiter dialog as well as single symbols.
This commit is contained in:
Georg Baum 2012-12-16 15:49:42 +01:00
parent 5d45be0f93
commit 01a6d4252b
7 changed files with 47 additions and 0 deletions

View File

@ -708,6 +708,7 @@ dist_imagesmath_DATA = \
images/math/lfloor.png \
images/math/lfloor_rfloor.png \
images/math/ll.png \
images/math/llbracket.png \
images/math/llcorner.png \
images/math/Lleftarrow.png \
images/math/lll.png \
@ -862,6 +863,7 @@ dist_imagesmath_DATA = \
images/math/risingdotseq.png \
images/math/root.png \
images/math/rparen.png \
images/math/rrbracket.png \
images/math/Rrightarrow.png \
images/math/Rsh.png \
images/math/rtimes.png \

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 B

View File

@ -41,6 +41,7 @@ namespace {
static char const * latex_delimiters[] = {
"(", ")", "{", "}", "[", "]",
"lceil", "rceil", "lfloor", "rfloor", "langle", "rangle",
"llbracket", "rrbracket",
"uparrow", "updownarrow", "Uparrow", "Updownarrow", "downarrow", "Downarrow",
"|", "Vert", "/", "backslash", ""
};
@ -114,6 +115,8 @@ void initMathSymbols()
math_symbols_["rfloor"] = MathSymbol(0x230B, 99, CMSY_FAMILY);
math_symbols_["langle"] = MathSymbol(0x2329, 104, CMSY_FAMILY);
math_symbols_["rangle"] = MathSymbol(0x232A, 105, CMSY_FAMILY);
math_symbols_["llbracket"] = MathSymbol(0x27e6, 74, STMARY_FAMILY);
math_symbols_["rrbracket"] = MathSymbol(0x27e7, 75, STMARY_FAMILY);
math_symbols_["uparrow"] = MathSymbol(0x2191, 34, CMSY_FAMILY);
math_symbols_["Uparrow"] = MathSymbol(0x21D1, 42, CMSY_FAMILY);
math_symbols_["updownarrow"] = MathSymbol(0x2195, 108, CMSY_FAMILY);
@ -233,6 +236,8 @@ char_type GuiDelimiter::doMatch(char_type const symbol)
else if (str == "lfloor") match = "rfloor";
else if (str == "rangle") match = "langle";
else if (str == "langle") match = "rangle";
else if (str == "llbracket") match = "rrbracket";
else if (str == "rrbracket") match = "llbracket";
else if (str == "backslash") match = "/";
else if (str == "/") match = "backslash";
else return symbol;

View File

@ -14,10 +14,13 @@
#include "InsetMathDelim.h"
#include "MathData.h"
#include "MathFactory.h"
#include "MathStream.h"
#include "MathSupport.h"
#include "MetricsInfo.h"
#include "LaTeXFeatures.h"
#include "support/docstring.h"
#include "frontends/FontMetrics.h"
@ -58,6 +61,30 @@ Inset * InsetMathDelim::clone() const
}
void InsetMathDelim::validate(LaTeXFeatures & features) const
{
InsetMathNest::validate(features);
// The delimiters may be used without \left or \right as well.
// Therefore they are listed in lib/symbols, and if they have
// requirements, we need to add them here.
MathWordList const & words = mathedWordList();
MathWordList::const_iterator it = words.find(left_);
if (it != words.end())
{
docstring const req = it->second.requires;
if (!req.empty())
features.require(to_ascii(req));
}
it = words.find(right_);
if (it != words.end())
{
docstring const req = it->second.requires;
if (!req.empty())
features.require(to_ascii(req));
}
}
void InsetMathDelim::write(WriteStream & os) const
{
MathEnsurer ensurer(os);

View File

@ -45,6 +45,8 @@ public:
///
void draw(PainterInfo &, int x, int y) const;
///
void validate(LaTeXFeatures & features) const;
///
void write(WriteStream & os) const;
/// write normalized content

View File

@ -160,6 +160,15 @@ double const brack[] = {
};
double const dbrack[] = {
2, 4,
0.95, 0.05, 0.05, 0.05, 0.05, 0.95, 0.95, 0.95,
2, 2,
0.50, 0.05, 0.50, 0.95,
0
};
double const corner[] = {
2, 3,
0.95, 0.05, 0.05, 0.05, 0.05, 0.95,
@ -299,6 +308,8 @@ named_deco_struct deco_table[] = {
{"rbrace", brace, 2 },
{"[", brack, 0 },
{"]", brack, 2 },
{"llbracket", dbrack, 0 },
{"rrbracket", dbrack, 2 },
{"|", vert, 0 },
{"/", slash, 0 },
{"slash", slash, 0 },