tabularray icon indicating copy to clipboard operation
tabularray copied to clipboard

Changing `note-tag` and `note-sep` with `\DefTblrTemplate` does not give the expected results

Open yarakos95 opened this issue 2 years ago • 6 comments

To reproduce

I have created a simple example below.

  • An asterisk is added to the note tag below the table, but not to the note tag inside the table.
  • note-sep is not reflected and colon is not displayed. There is also no proper spacing between tags and text.
% !TeX program = lualatex
\documentclass[ class = article, border = 5pt]{standalone}
\usepackage{tabularray}
\listfiles
%
%% Add an asterisk to the left of the tag
\DefTblrTemplate{note-tag}{default}{ \textsuperscript{\textasteriskcentered \InsertTblrNoteTag} }
%
%% Change the space between the tag and the text to a colon
\DefTblrTemplate{note-sep}{default}{:}
%
\begin{document}

\begin{talltblr}[
    note{a} = {This is a note.},
    caption = {This is a table with footnote.},
  ]{
    colspec = {*{2}{X[c]}},
    width = {0.5\linewidth},
    vlines, hlines,
  }
  This & is                 \\
  a    & table \TblrNote{a}
\end{talltblr}

\end{document}

note-settings-image-1

Logs

log file
This is LuaHBTeX, Version 1.17.0 (TeX Live 2023)  (format=lualatex 2023.11.22)  23 NOV 2023 14:09
 restricted system commands enabled.
 file:line:error style messages enabled.
**d:/vsnotes/EDiT-notes/issue/lvjr_tabularray/note-settings
(d:/vsnotes/EDiT-notes/issue/lvjr_tabularray/note-settings.tex
LaTeX2e <2023-11-01>
L3 programming layer <2023-11-09>
Lua module: luaotfload 2023-08-31 3.26 Lua based OpenType font support
Lua module: lualibs 2023-07-13 2.76 ConTeXt Lua standard libraries.
Lua module: lualibs-extended 2023-07-13 2.76 ConTeXt Lua libraries -- extended collection.
luaotfload | conf : Root cache directory is "D:/texlive/2023/texmf-var/luatex-cache/generic/names".
luaotfload | init : Loading fontloader "fontloader-2023-08-19.lua" from kpse-resolved path "d:/texlive/2023/texmf-dist/tex/luatex/luaotfload/fontloader-2023-08-19.lua".
Lua-only attribute luaotfload@noligature = 1
luaotfload | init : Context OpenType loader version 3.133
Inserting `luaotfload.node_processor' in `pre_linebreak_filter'.
Inserting `luaotfload.node_processor' in `hpack_filter'.
Inserting `luaotfload.glyph_stream' in `glyph_stream_provider'.
Inserting `luaotfload.define_font' in `define_font'.
Lua-only attribute luaotfload_color_attribute = 2
luaotfload | conf : Root cache directory is "D:/texlive/2023/texmf-var/luatex-cache/generic/names".
Inserting `luaotfload.harf.strip_prefix' in `find_opentype_file'.
Inserting `luaotfload.harf.strip_prefix' in `find_truetype_file'.
Removing  `luaotfload.glyph_stream' from `glyph_stream_provider'.
Inserting `luaotfload.harf.glyphstream' in `glyph_stream_provider'.
Inserting `luaotfload.harf.finalize_vlist' in `post_linebreak_filter'.
Inserting `luaotfload.harf.finalize_hlist' in `hpack_filter'.
Inserting `luaotfload.cleanup_files' in `wrapup_run'.
Inserting `luaotfload.harf.finalize_unicode' in `finish_pdffile'.
Inserting `luaotfload.glyphinfo' in `glyph_info'.
Lua-only attribute luaotfload.letterspace_done = 3
Inserting `luaotfload.aux.set_sscale_dimens' in `luaotfload.patch_font'.
Inserting `luaotfload.aux.set_font_index' in `luaotfload.patch_font'.
Inserting `luaotfload.aux.patch_cambria_domh' in `luaotfload.patch_font'.
Inserting `luaotfload.aux.fixup_fontdata' in `luaotfload.patch_font_unsafe'.
Inserting `luaotfload.aux.set_capheight' in `luaotfload.patch_font'.
Inserting `luaotfload.aux.set_xheight' in `luaotfload.patch_font'.
Inserting `luaotfload.rewrite_fontname' in `luaotfload.patch_font'.
Inserting `tracingstacklevels' in `input_level_string'. (d:/texlive/2023/texmf-dist/tex/latex/standalone/standalone.cls
Document Class: standalone 2022/10/10 v1.3b Class to compile TeX sub-files standalone
(d:/texlive/2023/texmf-dist/tex/latex/tools/shellesc.sty
Package: shellesc 2023/07/08 v1.0d unified shell escape interface for LaTeX
Package shellesc Info: Restricted shell escape enabled on input line 77.
) (d:/texlive/2023/texmf-dist/tex/generic/iftex/ifluatex.sty
Package: ifluatex 2019/10/25 v1.5 ifluatex legacy package. Use iftex instead.
 (d:/texlive/2023/texmf-dist/tex/generic/iftex/iftex.sty
Package: iftex 2022/02/03 v1.0f TeX engine tests
)) (d:/texlive/2023/texmf-dist/tex/latex/xkeyval/xkeyval.sty
Package: xkeyval 2022/06/16 v2.9 package option processing (HA)
 (d:/texlive/2023/texmf-dist/tex/generic/xkeyval/xkeyval.tex (d:/texlive/2023/texmf-dist/tex/generic/xkeyval/xkvutils.tex
\XKV@toks=\toks17
\XKV@tempa@toks=\toks18
 (d:/texlive/2023/texmf-dist/tex/generic/xkeyval/keyval.tex))
\XKV@depth=\count184
File: xkeyval.tex 2014/12/03 v2.7a key=value parser (HA)
))
\sa@internal=\count185
\c@sapage=\count186
 (d:/texlive/2023/texmf-dist/tex/latex/standalone/standalone.cfg
File: standalone.cfg 2022/10/10 v1.3b Default configuration file for 'standalone' class
) (d:/texlive/2023/texmf-dist/tex/latex/base/article.cls
Document Class: article 2023/05/17 v1.4n Standard LaTeX document class
(d:/texlive/2023/texmf-dist/tex/latex/base/size10.clo
File: size10.clo 2023/05/17 v1.4n Standard LaTeX file (size option)
luaotfload | db : Font names database loaded from D:/texlive/2023/texmf-var/luatex-cache/generic/names/luaotfload-names.luc.gz)
\c@part=\count187
\c@section=\count188
\c@subsection=\count189
\c@subsubsection=\count190
\c@paragraph=\count191
\c@subparagraph=\count192
\c@figure=\count193
\c@table=\count194
\abovecaptionskip=\skip48
\belowcaptionskip=\skip49
\bibindent=\dimen139
) (d:/texlive/2023/texmf-dist/tex/generic/luatex85/luatex85.sty
Package: luatex85 2016/06/15 v1.4 pdftex aliases for luatex
) (d:/texlive/2023/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO)
 (d:/texlive/2023/texmf-dist/tex/generic/infwarerr/infwarerr.sty
Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO)
) (d:/texlive/2023/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
Package: ltxcmds 2020-05-10 v1.25 LaTeX kernel commands for general use (HO)
)
Package pdftexcmds Info: \pdf@primitive is available.
Package pdftexcmds Info: \pdf@ifprimitive is available.
Package pdftexcmds Info: \pdfdraftmode found.
\pdftexcmds@toks=\toks19
)
\sa@box=\box51
) (d:/texlive/2023/texmf-dist/tex/latex/tabularray/tabularray.sty (d:/texlive/2023/texmf-dist/tex/latex/l3kernel/expl3.sty
Package: expl3 2023-11-09 L3 programming layer (loader)
 (d:/texlive/2023/texmf-dist/tex/latex/l3backend/l3backend-luatex.def
File: l3backend-luatex.def 2023-11-09 L3 backend support: PDF output (LuaTeX)
\l__color_backend_stack_int=\count195
Inserting `l3color' in `luaotfload.parse_color'.
\l__pdf_internal_box=\box52
))
Package: tabularray 2023-03-01 v2023A Typeset tabulars and arrays with LaTeX3
\l__tblr_a_int=\count196
\l__tblr_c_int=\count197
\l__tblr_r_int=\count198
\l__tblr_d_dim=\dimen140
\l__tblr_h_dim=\dimen141
\l__tblr_o_dim=\dimen142
\l__tblr_p_dim=\dimen143
\l__tblr_q_dim=\dimen144
\l__tblr_r_dim=\dimen145
\l__tblr_s_dim=\dimen146
\l__tblr_t_dim=\dimen147
\l__tblr_v_dim=\dimen148
\l__tblr_w_dim=\dimen149
\l__tblr_a_box=\box53
\l__tblr_b_box=\box54
\l__tblr_c_box=\box55
\l__tblr_d_box=\box56
\g__tblr_table_count_int=\count199
\c@rownum=\count266
\c@colnum=\count267
\c@rowcount=\count268
\c@colcount=\count269
\abovesep=\dimen150
\belowsep=\dimen151
\leftsep=\dimen152
\rightsep=\dimen153
\g_tblr_level_int=\count270
\g__tblr_data_row_key_count_int=\count271
\g__tblr_data_column_key_count_int=\count272
\g__tblr_data_cell_key_count_int=\count273
\g__tblr_array_int=\count274
\l__tblr_key_count_int=\count275
\l__tblr_key_quotient_int=\count276
\l__tblr_key_quotient_two_int=\count277
\l__tblr_key_remainder_int=\count278
\g__tblr_data_str_value_count_int=\count279
\rulewidth=\dimen154
\l__tblr_strut_dp_dim=\dimen155
\l__tblr_strut_ht_dim=\dimen156
\g__tblr_cell_wd_dim=\dimen157
\g__tblr_cell_ht_dim=\dimen158
\g__tblr_cell_head_dim=\dimen159
\g__tblr_cell_foot_dim=\dimen160
\l__column_target_dim=\dimen161
\l__tblr_caption_box=\box57
\l__tblr_caption_left_box=\box58
\l__tblr_row_head_box=\box59
\l__tblr_row_foot_box=\box60
\l__tblr_row_head_foot_dim=\dimen162
\tablewidth=\dimen163
\l__tblr_table_firsthead_box=\box61
\l__tblr_table_middlehead_box=\box62
\l__tblr_table_lasthead_box=\box63
\l__tblr_table_firstfoot_box=\box64
\l__tblr_table_middlefoot_box=\box65
\l__tblr_table_lastfoot_box=\box66
\l__tblr_remain_height_dim=\dimen164
\l__tblr_long_from_int=\count280
\l__tblr_long_to_int=\count281
\l__tblr_curr_i_int=\count282
\l__tblr_prev_i_int=\count283
\l__tblr_table_page_int=\count284
\l__tblr_table_head_box=\box67
\l__tblr_table_foot_box=\box68
\l__tblr_table_head_foot_dim=\dimen165
\l__tblr_table_head_body_foot_dim=\dimen166
\l__tblr_table_box=\box69
\l__tblr_table_hlines_box=\box70
\l__tblr_hline_box=\box71
\l__tblr_row_box=\box72
\l__tblr_col_o_wd_dim=\dimen167
\l__tblr_col_b_wd_dim=\dimen168
\l__tblr_hline_leftskip_dim=\dimen169
\l__tblr_hline_rightskip_dim=\dimen170
\l__tblr_row_ht_dim=\dimen171
\l__tblr_row_dp_dim=\dimen172
\l__tblr_row_abovesep_dim=\dimen173
\l__tblr_row_belowsep_dim=\dimen174
\l__tblr_row_vlines_box=\box73
\l__tblr_vline_box=\box74
\l__tblr_cell_box=\box75
\l__row_upper_dim=\dimen175
\l__row_lower_dim=\dimen176
\l__row_vpace_dim=\dimen177
\l__tblr_vline_aboveskip_dim=\dimen178
\l__tblr_vline_belowskip_dim=\dimen179
\l__tblr_cell_wd_dim=\dimen180
\l__tblr_cell_ht_dim=\dimen181
\l__tblr_diag_box=\box76
) (./note-settings.aux)
\openout1 = note-settings.aux

LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 8.
LaTeX Font Info:    ... okay on input line 8.
LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 8.
LaTeX Font Info:    ... okay on input line 8.
LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 8.
LaTeX Font Info:    ... okay on input line 8.
LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 8.
LaTeX Font Info:    ... okay on input line 8.
LaTeX Font Info:    Checking defaults for TS1/cmr/m/n on input line 8.
LaTeX Font Info:    Trying to load font information for TS1+cmr on input line 8.
 (d:/texlive/2023/texmf-dist/tex/latex/base/ts1cmr.fd
File: ts1cmr.fd 2023/04/13 v2.5m Standard LaTeX font definitions
)
LaTeX Font Info:    ... okay on input line 8.
LaTeX Font Info:    Checking defaults for TU/lmr/m/n on input line 8.
LaTeX Font Info:    ... okay on input line 8.
LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 8.
LaTeX Font Info:    ... okay on input line 8.
LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 8.
LaTeX Font Info:    ... okay on input line 8.
> Step: init table outer spec.
> Step: parse table options.
> Step: split table.
> Step: init table inner spec.
> Step: parse table inner spec.
> Step: execute table commands.
> Step: calculate cell and line sizes.
LaTeX Font Info:    External font `cmex10' loaded for size
(Font)              <7> on input line 20.
LaTeX Font Info:    External font `cmex10' loaded for size
(Font)              <5> on input line 20.
> Step: build the whole table.

Overfull \hbox (2.43204pt too wide) detected at line 20
$[][]$
 []

[1

{d:/texlive/2023/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] (./note-settings.aux)
 ***********
LaTeX2e <2023-11-01>
L3 programming layer <2023-11-09>
 ***********


 *File List*
standalone.cls    2022/10/10 v1.3b Class to compile TeX sub-files standalone
shellesc.sty    2023/07/08 v1.0d unified shell escape interface for LaTeX
ifluatex.sty    2019/10/25 v1.5 ifluatex legacy package. Use iftex instead.
   iftex.sty    2022/02/03 v1.0f TeX engine tests
 xkeyval.sty    2022/06/16 v2.9 package option processing (HA)
 xkeyval.tex    2014/12/03 v2.7a key=value parser (HA)
standalone.cfg    2022/10/10 v1.3b Default configuration file for 'standalone' class
 article.cls    2023/05/17 v1.4n Standard LaTeX document class
  size10.clo    2023/05/17 v1.4n Standard LaTeX file (size option)
luatex85.sty    2016/06/15 v1.4 pdftex aliases for luatex
pdftexcmds.sty    2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO)
infwarerr.sty    2019/12/03 v1.5 Providing info/warning/error messages (HO)
 ltxcmds.sty    2020-05-10 v1.25 LaTeX kernel commands for general use (HO)
tabularray.sty    2023-03-01 v2023A Typeset tabulars and arrays with LaTeX3
   expl3.sty    2023-11-09 L3 programming layer (loader)
l3backend-luatex.def    2023-11-09 L3 backend support: PDF output (LuaTeX)
  ts1cmr.fd    2023/04/13 v2.5m Standard LaTeX font definitions
 ***********

)

Here is how much of LuaTeX's memory you used:
 3272 strings out of 476598
 100000,1977958 words of node,token memory allocated
 3899 words of node memory still in use:
   69 hlist, 42 vlist, 33 rule, 4 disc, 6 local_par, 6 math, 151 glue, 5 kern, 6 penalty, 63 glyph, 157 attribute, 48 glue_spec, 157 attribute_list, 2 write nodes
   avail lists: 2:24,3:18,4:3,5:24,6:14,7:454,8:2,9:294,10:1,11:8
 25226 multiletter control sequences out of 65536+600000
 30 fonts using 2003495 bytes
 65i,11n,99p,254b,536s stack positions out of 10000i,1000n,20000p,200000b,200000s
<d:/texlive/2023/texmf-dist/fonts/opentype/public/lm/lmroman7-bold.otf><d:/texlive/2023/texmf-dist/fonts/opentype/public/lm/lmsans10-bold.otf><d:/texlive/2023/texmf-dist/fonts/opentype/public/lm/lmroman10-regular.otf>
Output written on note-settings.pdf (1 page, 7154 bytes).

PDF statistics: 29 PDF objects out of 1000 (max. 8388607)
 16 compressed objects within 1 object stream
 0 named destinations out of 1000 (max. 131072)
 1 words of extra memory for PDF output out of 10000 (max. 100000000)

What is required

  1. note-tag defined in \DefTblrTemplate etc. should be changed in the same way whether inside or outside the table.

    In fact, changing the style with \SetTblrStyle affects both the inside and outside of the table.

  2. note-sep does not seem to be working, so you need to modify it to make it work.

Additional

While reading the documentation regarding note, I discovered a defect in the documentation. The explanation for note-text is the same as for note-tag.

image

Table 4.4: Elements for Table Heads and Table Foots, 4.2.1 Overview of Templates, page.40

Version

  • TeX Live 2023
  • LuaHBTeX: version 1.17.0
  • tabularray: 2023-03-01 v2023A

yarakos95 avatar Nov 23 '23 06:11 yarakos95

Unfortunately the actual definition of note template initially set is https://github.com/lvjr/tabularray/blob/0970bab0433d6899d839993f34049e0ae476c9d8/tabularray.sty#L5169-L5188 https://github.com/lvjr/tabularray/blob/0970bab0433d6899d839993f34049e0ae476c9d8/tabularray.sty#L5205

This is quite different from the one shown in package documentation (v2023A, sec. 4.2.4), following text "The templates for table notes can be defined like this:".

From this \DefTblrTemplate { note } { normal } { ... } definition, you can see

  • note-sep is not used, hence your change to it is not reflected in output;
  • the width of note-tag is controlled by \hangindent, which is initially 0.7em and can be overwritten by the hanging setting of note template.
\documentclass[class=article, border=5pt]{standalone}
\usepackage{tabularray}
\listfiles

\DefTblrTemplate{note-tag}{default}{%
  \textsuperscript{\textasteriskcentered\InsertTblrNoteTag}:}
\SetTblrStyle{note}{hang=1.5em}

\begin{document}

\begin{talltblr}[
    note{a} = {This is a note.},
    note{b} = {This is another note. It's long long loong loong looong looong.},
    caption = {This is a table with footnote.},
  ]{
    colspec = {*{2}{X[c]}},
    width = {0.5\linewidth},
    vlines, hlines,
  }
  This & is                \\
  a    & table\TblrNote{a} \\
  b    & with notes\TblrNote{b}
\end{talltblr}

\end{document}

image

Personally I think tabularray's template system is a bit over-designed.

muzimuzhi avatar Nov 23 '23 17:11 muzimuzhi

This is quite different from the one shown in package documentation (v2023A, sec. 4.2.4), following text "The templates for table notes can be defined like this:".

The version shown in documentation is defined as plain, https://github.com/lvjr/tabularray/blob/0970bab0433d6899d839993f34049e0ae476c9d8/tabularray.sty#L5157-L5168

It has no hanging indent.

\documentclass[class=article, border=5pt]{standalone}
\usepackage{tabularray}

\SetTblrTemplate{note}{plain}
\DefTblrTemplate{note-tag}{default}{%
  \makebox[.9em][l]{\textsuperscript{\textasteriskcentered\InsertTblrNoteTag}}}
\DefTblrTemplate{note-sep}{default}{:\space}

\begin{document}

\begin{talltblr}[
    note{a} = {This is a note.},
    note{b} = {This is another note. It's long long loong loong looong looong.},
    caption = {This is a table with footnote.},
  ]{
    colspec = {*{2}{X[c]}},
    width = {0.5\linewidth},
    vlines, hlines,
  }
  This & is                \\
  a    & table\TblrNote{a} \\
  with & notes\TblrNote{b}
\end{talltblr}

\end{document}

image

muzimuzhi avatar Nov 23 '23 17:11 muzimuzhi

@muzimuzhi, thank you for your replies.

I didn't look too closely at the implementation and wasn't sure, but I see that not all note's keys are used in a given template. I didn't expect this.

I have a deeper understanding of tabularray by looking at your replies and implementations. At the same time, it was a bit difficult for beginners to use, and I wondered if there were pelple who could understand it only buy reading the manual...


I understand about the colon in note-sep.

However am I correct in understanding that tags within tables cannot currently be changed using note-tag? In general, I believe that tags should be the same both inside and outside the table.

image

yarakos95 avatar Nov 24 '23 10:11 yarakos95

I didn't look too closely at the implementation and wasn't sure, but I see that not all note's keys are used in a given template. I didn't expect this.

Depending on how @lvjr designed it to be, this might either be a documentary issue or a bug.

However am I correct in understanding that tags within tables cannot currently be changed using note-tag?

Unfortunately, your understanding is right https://github.com/lvjr/tabularray/blob/0970bab0433d6899d839993f34049e0ae476c9d8/tabularray.sty#L5125-L5133

muzimuzhi avatar Nov 24 '23 14:11 muzimuzhi

In fact, in tabularray v2023A, note inner option and \TblrNote command work independently.

  • \TblrNote{<note name>} always typesets <note name> in a table cell, no matter the corresponding note{<note name>}={<note text>} is specified or not, and vice versa.
  • If hyperref is loaded, \TblrNote creates hyper links which if clicked will jump to the corresponding note text typeset below the table. Engine will throw a warning if no corresponding note{<note name>} is specified. For instance if \TblrNote{ba} is used but not note{ba}={...}, then pdfTeX will throw a warning
    pdfTeX warning (dest): name{tblr/1/ba} has been referenced but does not exist, 
    replaced by a fixed one
    

muzimuzhi avatar Nov 24 '23 17:11 muzimuzhi

I'm sorry it took a while for me to reply.

It is strange that the tag inside the table is not changed when changing from note-tag key, and I hope this will be resolved.

yarakos95 avatar Nov 28 '23 06:11 yarakos95