add support for Lbl in math aligments
This commit is contained in:
parent
18e85d016a
commit
5c8d99818b
@ -8,6 +8,9 @@ local mc_end = token.create'tag_mc_end:'
|
||||
|
||||
local catlatex = luatexbase.registernumber("catcodetable@latex")
|
||||
|
||||
ltx.__tag.struct.luamml = ltx.__tag.struct.luamml or {}
|
||||
ltx.__tag.struct.luamml.labels = ltx.__tag.struct.luamml.labels or {}
|
||||
|
||||
local function escape_name(name)
|
||||
return name
|
||||
end
|
||||
@ -117,9 +120,12 @@ local function write_elem(tree, stash)
|
||||
end
|
||||
for _, elem in ipairs(tree) do
|
||||
if type(elem) ~= 'string' and not elem['tex:ignore'] then
|
||||
if elem['intent']==':equationlabel' and lastlblstructnum then
|
||||
elem[1][#elem+1]={[':structnum']= lastlblstructnum}
|
||||
lastlblstructnum=nil
|
||||
if elem['intent']==':equationlabel' and ltx.__tag.struct.luamml.labels then
|
||||
if #ltx.__tag.struct.luamml.labels > 0 then
|
||||
-- print("CHECK LABEL STRUCTURE: ",table.serialize(elem), table.serialize(ltx.__tag.struct.luamml.labels))
|
||||
local num= table.remove(ltx.__tag.struct.luamml.labels,1)
|
||||
elem[1][#elem+1]={[':structnum']= num}
|
||||
end
|
||||
end
|
||||
write_elem(elem)
|
||||
end
|
||||
|
50
luamml.dtx
50
luamml.dtx
@ -715,6 +715,7 @@
|
||||
%</luatex>
|
||||
% \end{macrocode}
|
||||
%
|
||||
% \subsubsection{Tags and labels}
|
||||
% These sockets save and set tags and labels in alignments.
|
||||
% \begin{macrocode}
|
||||
\str_if_exist:cF { l__socket_tagsupport/math/luamml/mtable/tag/save_plug_str }
|
||||
@ -738,6 +739,55 @@
|
||||
|
||||
%</luatex>
|
||||
% \end{macrocode}
|
||||
%
|
||||
% If math structure elements are created the Lbl-structure of a tag
|
||||
% must be moved inside the math structure, typically as an additional column in an
|
||||
% \texttt{mtable} with an intent \texttt{:equationlabel}.
|
||||
%
|
||||
% The luamml-code handles this by stashing the Lbl-structure, storing the
|
||||
% structure number in an array and reusing it once it creates the math structure elements.
|
||||
%
|
||||
% This should only be done for specific environments, we define
|
||||
% a constant to test:
|
||||
% \begin{macrocode}
|
||||
%<*luatex>
|
||||
\clist_map_inline:nn
|
||||
{
|
||||
align,
|
||||
alignat,
|
||||
xalignat,
|
||||
xxalignat,
|
||||
flalign,
|
||||
gather,
|
||||
%multline, % NO
|
||||
%equation, % NO
|
||||
}
|
||||
{\tl_const:cn { c__luamml_label_#1_tl}{}}
|
||||
% \end{macrocode}
|
||||
%
|
||||
%
|
||||
% \begin{macrocode}
|
||||
\NewSocketPlug{tagsupport/math/display/tag/begin}{luamml}
|
||||
{
|
||||
\tag_mc_end:
|
||||
\bool_lazy_and:nnTF
|
||||
{ \tl_if_exist_p:c { c__luamml_label_ \@currenvir _tl } }
|
||||
{ \int_if_odd_p:n { \int_div_truncate:nn { \l__luamml_flag_int } { 8 } } }
|
||||
{
|
||||
\typeout{Stash~and~move~\@currenvir~Lbl}
|
||||
\tag_struct_begin:n {tag=Lbl,stash}
|
||||
\directlua{table.insert(ltx.__tag.struct.luamml.labels,\tag_get:n{struct_num})}
|
||||
}
|
||||
{
|
||||
\tag_struct_begin:n {tag=Lbl}
|
||||
}
|
||||
\tag_mc_begin:n {}
|
||||
}
|
||||
\AssignSocketPlug{tagsupport/math/display/tag/begin}{luamml}
|
||||
%</luatex>
|
||||
% \end{macrocode}
|
||||
%
|
||||
%
|
||||
% \subsubsection{Horizontal boxes}
|
||||
% This socket annotates an \cs{hbox} inside box commands used in math.
|
||||
% We test for the socket until the release 2025-06-01.
|
||||
|
Loading…
x
Reference in New Issue
Block a user