From 1428136e5260689073ca45ca1ed78bc6b494002a Mon Sep 17 00:00:00 2001 From: Erik Demaine Date: Thu, 27 Apr 2017 14:57:54 -0400 Subject: [PATCH] Support <, >, |, and long-form symbols. Fix #662 Add long-form aliases for various text symbols * \textgreater is an alias for > in text mode * \textless is an alias for < in text mode * \textbar is an alias for | in text mode * \textdollar is an alias for \$ in text mode * \textunderscore is an alias for \_ in text mode * \textbraceleft is an alias for \{ in text mode * \textbraceright is an alias for \} in text mode * \textless is an alias for < in text mode * \textgreater is an alias for > in text mode * \textbar is an alias for | in text mode * \textbardbl is an alias for \| in text mode * \textendash is an alias for -- in text mode * \textemdash is an alias for --- in text mode * \textquoteleft is an alias for ` in text mode * \textquoteright is an alias for ' in text mode * \textquotedblleft is an alias for `` in text mode * \textquotedblright is an alias for '' in text mode * \textdagger is an alias for \dag in text mode * \textdaggerdbl is an alias for \ddag in text mode * \textsterling is an alias for \pounds in text mode * \dag, \ddag work in text mode * \circledR, \checkmark, \pounds work in text mode too * Extend Symbols1 test to test \pounds and \textdollar in \text * Add note about \pounds in text vs. math mode --- src/symbols.js | 27 +++++++++++++++++- test/screenshotter/images/Symbols1-chrome.png | Bin 6470 -> 8151 bytes .../screenshotter/images/Symbols1-firefox.png | Bin 5569 -> 5592 bytes test/screenshotter/ss_data.yaml | 2 +- 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/symbols.js b/src/symbols.js index e4a109c2..0e47f1a3 100644 --- a/src/symbols.js +++ b/src/symbols.js @@ -109,7 +109,11 @@ defineSymbol(math, main, textord, "\u2660", "\\spadesuit"); // Math and Text defineSymbol(math, main, textord, "\u2020", "\\dag"); +defineSymbol(text, main, textord, "\u2020", "\\dag"); +defineSymbol(text, main, textord, "\u2020", "\\textdagger"); defineSymbol(math, main, textord, "\u2021", "\\ddag"); +defineSymbol(text, main, textord, "\u2021", "\\ddag"); +defineSymbol(text, main, textord, "\u2020", "\\textdaggerdbl"); // Large Delimiters defineSymbol(math, main, close, "\u23b1", "\\rmoustache"); @@ -224,6 +228,7 @@ defineSymbol(math, ams, textord, "\u25bd", "\\triangledown"); defineSymbol(math, ams, textord, "\u25ca", "\\lozenge"); defineSymbol(math, ams, textord, "\u24c8", "\\circledS"); defineSymbol(math, ams, textord, "\u00ae", "\\circledR"); +defineSymbol(text, ams, textord, "\u00ae", "\\circledR"); defineSymbol(math, ams, textord, "\u2221", "\\measuredangle"); defineSymbol(math, ams, textord, "\u2204", "\\nexists"); defineSymbol(math, ams, textord, "\u2127", "\\mho"); @@ -246,6 +251,7 @@ defineSymbol(math, ams, textord, "\u25a1", "\\Box"); defineSymbol(math, ams, textord, "\u25ca", "\\Diamond"); defineSymbol(math, ams, textord, "\u00a5", "\\yen"); defineSymbol(math, ams, textord, "\u2713", "\\checkmark"); +defineSymbol(text, ams, textord, "\u2713", "\\checkmark"); // AMS Hebrew defineSymbol(math, ams, textord, "\u2136", "\\beth"); @@ -397,10 +403,12 @@ defineSymbol(math, ams, rel, "\u21be", "\\restriction"); defineSymbol(math, main, textord, "\u2018", "`"); defineSymbol(math, main, textord, "$", "\\$"); defineSymbol(text, main, textord, "$", "\\$"); +defineSymbol(text, main, textord, "$", "\\textdollar"); defineSymbol(math, main, textord, "%", "\\%"); defineSymbol(text, main, textord, "%", "\\%"); defineSymbol(math, main, textord, "_", "\\_"); defineSymbol(text, main, textord, "_", "\\_"); +defineSymbol(text, main, textord, "_", "\\textunderscore"); defineSymbol(math, main, textord, "\u2220", "\\angle"); defineSymbol(math, main, textord, "\u221e", "\\infty"); defineSymbol(math, main, textord, "\u2032", "\\prime"); @@ -540,12 +548,16 @@ defineSymbol(math, main, bin, "\u25c3", "\\triangleleft"); defineSymbol(math, main, bin, "\u25b9", "\\triangleright"); defineSymbol(math, main, open, "{", "\\{"); defineSymbol(text, main, textord, "{", "\\{"); +defineSymbol(text, main, textord, "{", "\\textbraceleft"); defineSymbol(math, main, close, "}", "\\}"); defineSymbol(text, main, textord, "}", "\\}"); +defineSymbol(text, main, textord, "}", "\\textbraceright"); defineSymbol(math, main, open, "{", "\\lbrace"); defineSymbol(math, main, close, "}", "\\rbrace"); defineSymbol(math, main, open, "[", "\\lbrack"); defineSymbol(math, main, close, "]", "\\rbrack"); +defineSymbol(text, main, textord, "<", "\\textless"); // in T1 fontenc +defineSymbol(text, main, textord, ">", "\\textgreater"); // in T1 fontenc defineSymbol(math, main, open, "\u230a", "\\lfloor"); defineSymbol(math, main, close, "\u230b", "\\rfloor"); defineSymbol(math, main, open, "\u2308", "\\lceil"); @@ -553,8 +565,10 @@ defineSymbol(math, main, close, "\u2309", "\\rceil"); defineSymbol(math, main, textord, "\\", "\\backslash"); defineSymbol(math, main, textord, "\u2223", "|"); defineSymbol(math, main, textord, "\u2223", "\\vert"); +defineSymbol(text, main, textord, "|", "\\textbar"); // in T1 fontenc defineSymbol(math, main, textord, "\u2225", "\\|"); defineSymbol(math, main, textord, "\u2225", "\\Vert"); +defineSymbol(text, main, textord, "\u2225", "\\textbardbl"); defineSymbol(math, main, rel, "\u2191", "\\uparrow"); defineSymbol(math, main, rel, "\u21d1", "\\Uparrow"); defineSymbol(math, main, rel, "\u2193", "\\downarrow"); @@ -600,14 +614,25 @@ defineSymbol(math, main, mathord, "\u0131", "\\imath"); defineSymbol(math, main, mathord, "\u0237", "\\jmath"); defineSymbol(text, main, textord, "\u2013", "--"); +defineSymbol(text, main, textord, "\u2013", "\\textendash"); defineSymbol(text, main, textord, "\u2014", "---"); +defineSymbol(text, main, textord, "\u2014", "\\textemdash"); defineSymbol(text, main, textord, "\u2018", "`"); +defineSymbol(text, main, textord, "\u2018", "\\textquoteleft"); defineSymbol(text, main, textord, "\u2019", "'"); +defineSymbol(text, main, textord, "\u2019", "\\textquoteright"); defineSymbol(text, main, textord, "\u201c", "``"); +defineSymbol(text, main, textord, "\u201c", "\\textquotedblleft"); defineSymbol(text, main, textord, "\u201d", "''"); +defineSymbol(text, main, textord, "\u201d", "\\textquotedblright"); defineSymbol(math, main, textord, "\u00b0", "\\degree"); defineSymbol(text, main, textord, "\u00b0", "\\degree"); +// TODO: In LaTeX, \pounds can generate a different character in text and math +// mode, but among our fonts, only Main-Italic defines this character "163". defineSymbol(math, main, mathord, "\u00a3", "\\pounds"); +defineSymbol(math, main, mathord, "\u00a3", "\\mathsterling"); +defineSymbol(text, main, mathord, "\u00a3", "\\pounds"); +defineSymbol(text, main, mathord, "\u00a3", "\\textsterling"); defineSymbol(math, ams, textord, "\u2720", "\\maltese"); defineSymbol(text, ams, textord, "\u2720", "\\maltese"); @@ -625,7 +650,7 @@ for (let i = 0; i < mathTextSymbols.length; i++) { } // All of these are textords in text mode -const textSymbols = "0123456789!@*()-=+[]\";:?/.,"; +const textSymbols = "0123456789!@*()-=+[]<>|\";:?/.,"; for (let i = 0; i < textSymbols.length; i++) { const ch = textSymbols.charAt(i); defineSymbol(text, main, textord, ch, ch); diff --git a/test/screenshotter/images/Symbols1-chrome.png b/test/screenshotter/images/Symbols1-chrome.png index 49fd13f062ac568d42ccf95c31c37c5604452bd5..340226448d6660de7b5a1e565684cf1eab048f25 100644 GIT binary patch literal 8151 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 literal 6470 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 gW`m)S4c_c$%O0@I@YfCU_zGEbif3XECNe^jeu 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