9
9
10
10
symbols = [
11
11
["Lower-case Greek" ,
12
- 4 ,
13
12
(r"\alpha" ,r"\beta" ,r"\gamma" ,r"\chi" ,r"\delta" ,r"\epsilon" ,
14
13
r"\eta" ,r"\iota" ,r"\kappa" ,r"\lambda" ,r"\mu" ,r"\nu" ,r"\omega" ,
15
14
r"\phi" ,r"\pi" ,r"\psi" ,r"\rho" ,r"\sigma" ,r"\tau" ,r"\theta" ,
16
15
r"\upsilon" ,r"\xi" ,r"\zeta" ,r"\digamma" ,r"\varepsilon" ,r"\varkappa" ,
17
16
r"\varphi" ,r"\varpi" ,r"\varrho" ,r"\varsigma" ,r"\vartheta" )],
18
17
["Upper-case Greek" ,
19
- 4 ,
20
18
(r"\Delta" ,r"\Gamma" ,r"\Lambda" ,r"\Omega" ,r"\Phi" ,r"\Pi" ,r"\Psi" ,
21
19
r"\Sigma" ,r"\Theta" ,r"\Upsilon" ,r"\Xi" )],
22
20
["Hebrew" ,
23
- 6 ,
24
21
(r"\aleph" ,r"\beth" ,r"\gimel" ,r"\daleth" )],
25
22
["Latin named characters" ,
26
- 6 ,
27
23
r"""\aa \AA \ae \AE \oe \OE \O \o \thorn \Thorn \ss \eth \dh \DH""" .split ()],
28
24
["Delimiters" ,
29
- 5 ,
30
25
_mathtext .Parser ._delims ],
31
26
["Big symbols" ,
32
- 5 ,
33
27
_mathtext .Parser ._overunder_symbols | _mathtext .Parser ._dropsub_symbols ],
34
28
["Standard function names" ,
35
- 5 ,
36
29
{fr"\{ fn } " for fn in _mathtext .Parser ._function_names }],
37
30
["Binary operation symbols" ,
38
- 4 ,
39
31
_mathtext .Parser ._binary_operators ],
40
32
["Relation symbols" ,
41
- 4 ,
42
33
_mathtext .Parser ._relation_symbols ],
43
34
["Arrow symbols" ,
44
- 4 ,
45
35
_mathtext .Parser ._arrow_symbols ],
46
36
["Dot symbols" ,
47
- 4 ,
48
37
r"""\cdots \vdots \ldots \ddots \adots \Colon \therefore \because""" .split ()],
49
38
["Black-board characters" ,
50
- 6 ,
51
39
[fr"\{ symbol } " for symbol in _mathtext_data .tex2uni
52
40
if re .match (bb_pattern ,symbol )]],
53
41
["Script characters" ,
54
- 6 ,
55
42
[fr"\{ symbol } " for symbol in _mathtext_data .tex2uni
56
43
if re .match (scr_pattern ,symbol )]],
57
44
["Fraktur characters" ,
58
- 6 ,
59
45
[fr"\{ symbol } " for symbol in _mathtext_data .tex2uni
60
46
if re .match (frak_pattern ,symbol )]],
61
47
["Miscellaneous symbols" ,
62
- 4 ,
63
48
r"""\neg \infty \forall \wp \exists \bigstar \angle \partial
64
49
\nexists \measuredangle \emptyset \sphericalangle \clubsuit
65
50
\varnothing \complement \diamondsuit \imath \Finv \triangledown
73
58
]
74
59
75
60
61
+ def calculate_best_columns (
62
+ symbols_list ,max_line_length ,max_columns
63
+ ):
64
+ """
65
+ Calculate the best number of columns to fit the symbols within the
66
+ given constraints.
67
+
68
+ Parameters
69
+ ----------
70
+ symbols_list (list): A list of symbols to be displayed.
71
+ max_line_length (int): The maximum allowed length of a line.
72
+ max_columns (int): The maximum number of columns to consider.
73
+
74
+ Returns
75
+ -------
76
+ int: The best number of columns that fits within the constraints.
77
+ """
78
+ max_cell_width = max (len (sym )for sym in symbols_list )
79
+ return min (max_columns ,len (symbols_list ),max_line_length // max_cell_width )
80
+
81
+
76
82
def run (state_machine ):
77
83
78
84
def render_symbol (sym ,ignore_variant = False ):
@@ -86,15 +92,19 @@ def render_symbol(sym, ignore_variant=False):
86
92
return f'\\ { sym } ' if sym in ('\\ ' ,'|' ,'+' ,'-' ,'*' )else sym
87
93
88
94
lines = []
89
- for category ,columns , syms in symbols :
95
+ for category ,syms in symbols :
90
96
syms = sorted (syms ,
91
97
# Sort by Unicode and place variants immediately
92
98
# after standard versions.
93
99
key = lambda sym : (render_symbol (sym ,ignore_variant = True ),
94
100
sym .startswith (r"\var" )),
95
101
reverse = (category == "Hebrew" ))# Hebrew is rtl
96
102
rendered_syms = [f"{ render_symbol (sym )} ``{ sym } ``" for sym in syms ]
97
- columns = min (columns ,len (syms ))
103
+ columns = calculate_best_columns (
104
+ rendered_syms ,
105
+ max_line_length = 96 ,
106
+ max_columns = 6
107
+ )
98
108
lines .append ("**%s**" % category )
99
109
lines .append ('' )
100
110
max_width = max (map (len ,rendered_syms ))
@@ -128,13 +138,12 @@ def setup(app):
128
138
metadata = {'parallel_read_safe' :True ,'parallel_write_safe' :True }
129
139
return metadata
130
140
131
-
132
141
if __name__ == "__main__" :
133
142
# Do some verification of the tables
134
143
135
144
print ("SYMBOLS NOT IN STIX:" )
136
145
all_symbols = {}
137
- for category ,columns , syms in symbols :
146
+ for category ,syms in symbols :
138
147
if category == "Standard Function Names" :
139
148
continue
140
149
for sym in syms :