texlive[66276] Master/texmf-dist: tabularray (1mar23)
commits+karl at tug.org
commits+karl at tug.org
Wed Mar 1 22:04:26 CET 2023
Revision: 66276
http://tug.org/svn/texlive?view=revision&revision=66276
Author: karl
Date: 2023-03-01 22:04:26 +0100 (Wed, 01 Mar 2023)
Log Message:
-----------
tabularray (1mar23)
Modified Paths:
--------------
trunk/Master/texmf-dist/doc/latex/tabularray/README.txt
trunk/Master/texmf-dist/doc/latex/tabularray/tabularray.pdf
trunk/Master/texmf-dist/doc/latex/tabularray/tabularray.tex
trunk/Master/texmf-dist/tex/latex/tabularray/tabularray.sty
Modified: trunk/Master/texmf-dist/doc/latex/tabularray/README.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tabularray/README.txt 2023-03-01 21:04:14 UTC (rev 66275)
+++ trunk/Master/texmf-dist/doc/latex/tabularray/README.txt 2023-03-01 21:04:26 UTC (rev 66276)
@@ -1,6 +1,6 @@
Package: Typeset tabulars and arrays with LaTeX3
-Copyright: 2021-2022 (c) Jianrui Lyu <tolvjr at 163.com>
+Copyright: 2021-2023 (c) Jianrui Lyu <tolvjr at 163.com>
CTAN: https://ctan.org/pkg/tabularray
Repository: https://github.com/lvjr/tabularray
Repository: https://bitbucket.org/lvjr/tabularray
-License: The LaTeX Project Public License 1.3
+License: The LaTeX Project Public License 1.3c
Modified: trunk/Master/texmf-dist/doc/latex/tabularray/tabularray.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/tabularray/tabularray.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tabularray/tabularray.tex 2023-03-01 21:04:14 UTC (rev 66275)
+++ trunk/Master/texmf-dist/doc/latex/tabularray/tabularray.tex 2023-03-01 21:04:26 UTC (rev 66276)
@@ -1,7 +1,7 @@
% -*- coding: utf-8 -*-
% !TEX program = lualatex
\documentclass[oneside]{book}
-\newcommand*{\myversion}{2022D}
+\newcommand*{\myversion}{2023A}
\newcommand*{\mylpad}[1]{\ifnum#1<10 0\the#1\else\the#1\fi}
\usepackage[a4paper,margin=2.5cm]{geometry}
@@ -729,7 +729,8 @@
\end{tblr}
\end{demohigh}
-You can use \verb!X!, \verb!Y!, \verb!Z! to denote the last three children, respectively.
+You can use \verb!U!, \verb!V!, \verb!W!, \verb!X!, \verb!Y!, \verb!Z! to
+denote the last six children, respectively.
It is especially useful when you are writing long tables:
\begin{demohigh}
@@ -1384,7 +1385,7 @@
\K{colsep} & set horizontal space to both sides of every column & \V{6pt} \\
\K{hspan} & horizontal span algorithm: \V{default}, \V{even}, or \V{minimal} & \V{default} \\
\K{vspan} & vertical span algorithm: \V{default} or \V{even} & \V{default} \\
- \K{verb} & you need this key to use verb commands & \None \\
+ %\K{verb} & you need this key to use verb commands & \None \\
\K{baseline} & set the baseline of the table & \V{m} \\
\end{spectblr}
@@ -1504,14 +1505,17 @@
\subsection{Use Verbatim Commands}
-With \verb!verb! key, you can write \verb!\verb! commands in the cell text:
+%With \verb!verb! key, you can write \verb!\verb! commands in the cell text:
+%
+%\begin{demohigh}
+%\begin{tblr}{hlines,verb}
+% 20 & 30 & \verb!\hello{world}!40 \\
+% 50 & \verb!\hello!60 & 70 \\
+%\end{tblr}
+%\end{demohigh}
-\begin{demohigh}
-\begin{tblr}{hlines,verb}
- 20 & 30 & \verb!\hello{world}!40 \\
- 50 & \verb!\hello!60 & 70 \\
-\end{tblr}
-\end{demohigh}
+The inner key \verb!verb! is obsolete from version 2023A, and will be removed in the future.
+Instead you can use more reliable \verb!\fakeverb! command (see Section \ref{sec:fakeverb}).
\subsection{Set Baseline for the Table}
@@ -1599,15 +1603,17 @@
\subsection{Expand Macros First}
-\verb!Tabularray! need to see every \verb!&! and \verb!\\! when splitting the table body
-with \verb!l3regex!. And you can not put cell text inside any table command defined with
-\verb!\NewTableCommand!. But you could use outer specification \verb!expand! to make \verb!tabularray!
-expand every occurrence of a specified macro \underline{once} before splitting the table body.
-The macro \underline{can not} be defined with \verb!\NewDocumentCommand! or
-\verb!\NewExpandableDocumentCommand!, and \underline{can not} have optional argument.
+In contrast to traditional \verb!tabular! environment, \verb!tabularray! environments
+need to see every \verb!&! and \verb!\\! when splitting the table body with \verb!l3regex!.
+And you can not put cell text inside any table command defined with \verb!\NewTableCommand!.
+But you could use outer key \verb!expand! to make \verb!tabularray! expand
+every occurrence of a specified macro \underline{once} before splitting the table body.
+Note that you \underline{can not} expand a command defined with \verb!\NewDocumentCommand!.
+To expand a command without optional argument, you can define it with \verb!\newcommand!.
+
\begin{demohigh}
-\def\tblrbody{
+\newcommand*\tblrbody{
\hline
20 & 30 & 40 \\
50 & 60 & 70 \\
@@ -1624,7 +1630,23 @@
\end{tblr}
\end{demohigh}
-\section{Default Specifications}
+To expand commands with optional arguments, you \underline{can not} define them
+with \verb!\newcommand!. But you can define them with \verb!\NewExpandableDocumentCommand!,
+and use option \verb!expand=\expanded! to do exhaustive expansions.
+
+\begin{demohigh}
+\NewExpandableDocumentCommand\yes{O{Yes}m}{\SetCell{bg=green9}#1}
+\NewExpandableDocumentCommand\no{O{No}m}{\SetCell{bg=red9}#1}
+\begin{tblr}[expand=\expanded]{hlines}
+ What I get & is below \\
+ \expanded{\yes{}} & \expanded{\no{}} \\
+ \expanded{\yes[Great]{}} & \expanded{\no[Bad]{}}
+\end{tblr}
+\end{demohigh}
+
+Note that you need to protect fragile commands (if any) inside them with \verb!\unexpanded! command.
+
+\section{Default Specifications}%
\label{sec:default}
\verb!Tabularray! package provides \verb!\SetTblrInner! and \verb!\SetTblrOuter! commands
@@ -2713,6 +2735,9 @@
\end{tblr}
\end{demohigh}
+From version 2023A, you can evaluate all functions in the table body
+with option \texttt{evaluate=all}.
+
\subsection{Inner key \texttt{process} in action}
With inner key \verb!process!, you can modify the contents and styles before the table is built.
@@ -2987,6 +3012,55 @@
From version 2022D, you can load \verb!zref! library
to make \verb!\zref! and \verb!longtblr! work together.
+\chapter{Tips and Tricks}
+
+\section{Control Horizontal Alignment}
+
+You can control horizontal alignment of cells in \texttt{tabularray} with
+\href{https://www.ctan.org/pkg/ragged2e}{\texttt{ragged2e}} package,
+by redefining some of the following commands:
+
+\begin{codehigh}
+\RenewDocumentCommand\TblrAlignBoth{}{\justifying}
+\RenewDocumentCommand\TblrAlignLeft{}{\RaggedRight}
+\RenewDocumentCommand\TblrAlignCenter{}{\Centering}
+\RenewDocumentCommand\TblrAlignRight{}{\RaggedLeft}
+\end{codehigh}
+
+Please read the documentation of \texttt{ragged2e} package for more details of
+their alignment commands.
+
+\section{Use Safe Verbatim Commands}%
+\label{sec:fakeverb}
+
+Due to the limitation of TeX, even if you have passed \texttt{verb} option to a
+\texttt{tabularray} table, you still could not use some special characters in a
+\verb!\verb! command. As an replacement, you may use \verb|\fakeverb| command from \href{https://www.ctan.org/pkg/codehigh}{\texttt{codehigh}} package.
+
+The \verb|\fakeverb| command will remove the backslashes in the following control symbols before
+typesetting its content: \fakeverb{\\\\}, \fakeverb{\\\{}, \fakeverb{\\\}}, \fakeverb{\\\#}, \fakeverb{\\\^} and \texttt{\textbackslash\textvisiblespace}, \fakeverb{\\\%}.
+Also the argument of \verb|\fakeverb| command need to be enclosed with curly braces.
+Therefore it could be safely used inside \verb|tabularray| tables and other LaTeX commands.
+
+Here is an example of using \verb!\fakeverb! commands inside a \verb|tblr| environment
+(you don't need \texttt{verb} option to use \verb!\fakeverb!):
+
+\begin{demohigh}
+\begin{tblr}{hlines}
+ Special & \fakeverb{\abc{}$&^_^uvw 123} \\
+ Spacing & \fakeverb{\bfseries\ \#\%} \\
+ Nesting & \fbox{\fakeverb{$\left\\\{A\right.$\#}}
+\end{tblr}
+\end{demohigh}
+
+In the above example, balanced curly braces and control words (such as \verb!\bfseries!)
+need not to be escaped---only several special characters need to be escaped.
+Please read the documentation of \texttt{codehigh} package for more details of
+\verb|\fakeverb| commands.%
+\footnote{By the way, \fakeverb{\EscVerb} command from
+\href{https://www.ctan.org/pkg/fvextra}{\texttt{fvextra}} package is similar to
+\fakeverb{\fakeverb} command, but with \fakeverb{\EscVerb} you need to escape every control word.}
+
\chapter{History and Future}
\section{The Future}
@@ -3007,6 +3081,10 @@
The change log of \verb!tabularray! package will be updated on the wiki page:\newline
\centerline{\url{https://github.com/lvjr/tabularray/wiki/ChangeLog}}
+In version 2023A, inner key \verb!verb! was marked as obsolete,
+and it will be removed in the future. But don't worry too much,
+because you can stick to old version by \verb!\usepackage{tabularray}[=2023-03-01]!.
+
In version 2022A, there were several breaking changes:
\begin{itemize}[nosep]
Modified: trunk/Master/texmf-dist/tex/latex/tabularray/tabularray.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tabularray/tabularray.sty 2023-03-01 21:04:14 UTC (rev 66275)
+++ trunk/Master/texmf-dist/tex/latex/tabularray/tabularray.sty 2023-03-01 21:04:26 UTC (rev 66276)
@@ -1,9 +1,9 @@
%%% % -*- coding: utf-8 -*-
%%% ----------------------------------------------------------------------------
%%% Tabularray: Typeset tabulars and arrays with LaTeX3
-%%% Copyright : 2021-2022 (c) Jianrui Lyu <tolvjr at 163.com>
+%%% Copyright : 2021-2023 (c) Jianrui Lyu <tolvjr at 163.com>
%%% Repository: https://github.com/lvjr/tabularray
-%%% License : The LaTeX Project Public License 1.3
+%%% License : The LaTeX Project Public License 1.3c
%%% ----------------------------------------------------------------------------
%%% --------------------------------------------------------
@@ -18,7 +18,7 @@
\DeclareCurrentRelease{}{2022-01-01}
\RequirePackage{expl3}
-\ProvidesExplPackage{tabularray}{2022-11-01}{2022D}
+\ProvidesExplPackage{tabularray}{2023-03-01}{2023A}
{Typeset tabulars and arrays with LaTeX3}
%% \IfFormatAtLeastTF, xparse and lthooks are added in LaTeX 2020-10-01
@@ -62,6 +62,27 @@
\cs_set_eq:NN \TblrNewPage \newpage
+%% Note that \cs_if_exist:NTF doesn't treat \relax as an existing command.
+%% Therefore we define our \__tblr_cs_if_defined:NTF here.
+\prg_set_conditional:Npnn \__tblr_cs_if_defined:N #1 { p, T, F, TF }
+ {
+ %% \if_cs_exist:N = \ifdefined in eTeX
+ \if_cs_exist:N #1
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+ }
+\prg_set_conditional:Npnn \__tblr_cs_if_defined:c #1 { p, T, F, TF }
+ {
+ %% \if_cs_exist:w = \ifcsname in eTeX
+ \if_cs_exist:w #1 \cs_end:
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+ }
+
\cs_generate_variant:Nn \msg_error:nnnn { nnVn }
\cs_generate_variant:Nn \prop_item:Nn { Ne, NV }
\cs_generate_variant:Nn \prop_put:Nnn { Nxn, Nxx, NxV }
@@ -919,9 +940,9 @@
{ \clist_put_right:Nn \l_tblr_childs_clist {##1} }
}
-\regex_const:Nn \c__tblr_child_name_regex { ^ [X-Z] $ }
+\regex_const:Nn \c__tblr_child_name_regex { ^ [U-Z] $ }
-%% Convert X, Y, Z to the indexes of the last three childs, respectively
+%% Convert U, V, W, X, Y, Z to the indexes of the last six childs, respectively
\cs_new_protected_nopar:Npn \__tblr_child_name_to_index:nN #1 #2
{
\regex_match:NnTF \c__tblr_child_name_regex {#1}
@@ -944,7 +965,7 @@
\clist_new:N \g__tblr_table_commands_clist
\msg_new:nnn { tabularray } { defined-table-command }
- { Table ~ commnad ~ #1 has ~ been ~ defined! }
+ { Table ~ command ~ #1 already ~ defined! }
\NewDocumentCommand \NewTableCommand { m O{0} o m }
{
@@ -957,7 +978,8 @@
\__tblr_make_xparse_arg_spec:nnN { #2 } { #3 } \l__tblr_a_tl
\exp_args:NcV \NewDocumentCommand
{ __tblr_table_command_ \cs_to_str:N #1 :w } \l__tblr_a_tl { #4 }
- \cs_if_exist:NTF #1
+ %% we can not use \cs_if_exist:NTF here (see issue #328)
+ \__tblr_cs_if_defined:NTF #1
{
\cs_set_eq:cN { __tblr_table_command_ \cs_to_str:N #1 _saved:w } #1
}
@@ -1004,6 +1026,9 @@
\int_set:Nn \c at colnum {#2}
}
+%% Add \empty as a table command so that users can write \\\empty\hline (see #328)
+\NewTableCommand\empty{}
+
%% Table commands are defined only inside tblr environments,
%% but some packages such as csvsimple need to use them outside tblr environments,
%% therefore we define some of them first here.
@@ -1029,7 +1054,7 @@
\clist_new:N \g__tblr_content_commands_clist
\msg_new:nnn { tabularray } { defined-content-command }
- { Content ~ commnad ~ #1 has ~ been ~ defined! }
+ { Content ~ command ~ #1 already ~ defined! }
\NewDocumentCommand \NewContentCommand { m O{0} o m }
{
@@ -2631,10 +2656,13 @@
\group_align_safe_end:
}
+\bool_new:N \lTblrMeasuringBool
+
%% Read, split and build the table
\cs_new_protected:Npn \__tblr_builder:nnn #1 #2 #3
{
\int_gincr:N \g_tblr_level_int
+ \bool_set_true:N \lTblrMeasuringBool
\__tblr_clear_prop_lists:
\__tblr_clear_spec_lists:
\LogTblrTracing { step = init ~ table ~ outer ~ spec}
@@ -2660,6 +2688,7 @@
\LogTblrTracing { step = calculate ~ cell ~ and ~ line ~ sizes}
\__tblr_enable_content_commands:
\__tblr_calc_cell_and_line_sizes:
+ \bool_set_false:N \lTblrMeasuringBool
\LogTblrTracing { step = build ~ the ~ whole ~ table}
\__tblr_build_whole:
\int_gdecr:N \g_tblr_level_int
@@ -4831,6 +4860,10 @@
}
\SetTblrTemplate { contfoot } { normal }
+\DefTblrTemplate { conthead-pre } { empty } { }
+\DefTblrTemplate { conthead-pre } { normal } { \space }
+\SetTblrTemplate { conthead-pre } { normal }
+
\DefTblrTemplate { conthead-text } { normal } { \tblrcontheadname }
\SetTblrTemplate { conthead-text } { normal }
@@ -4962,7 +4995,7 @@
\UseTblrTemplate { caption-tag } { default }
\UseTblrTemplate { caption-sep } { default }
\UseTblrTemplate { caption-text } { default }
- \space
+ \UseTblrTemplate { conthead-pre } { default }
\UseTblrTemplate { conthead-text } { default }
}
\dim_compare:nNnTF { \box_wd:N \l__tblr_caption_box } > { \hsize }
@@ -4984,7 +5017,7 @@
\UseTblrTemplate { caption-tag } { default }
\UseTblrTemplate { caption-sep } { default }
\UseTblrTemplate { caption-text } { default }
- \space
+ \UseTblrTemplate { conthead-pre } { default }
\UseTblrTemplate { conthead-text } { default }
}
\dim_compare:nNnTF { \box_wd:N \l__tblr_caption_box } > { \hsize }
@@ -5018,7 +5051,7 @@
\UseTblrTemplate { caption-tag } { default }
\UseTblrTemplate { caption-sep } { default }
\UseTblrTemplate { caption-text } { default }
- \space
+ \UseTblrTemplate { conthead-pre } { default }
\UseTblrTemplate { conthead-text } { default }
\par
}
@@ -5348,6 +5381,9 @@
\cs_new_protected:Npn \__tblr_build_table_head_foot:
{
\__tblr_get_table_width:
+ % make each of \lTblrCaptionTl, \lTblrEntryTl, \lTblrLabelTl and the
+ % three corresponding booleans available in all head-foot templates
+ \__tblr_set_table_label_entry:
\__tblr_build_table_head_aux:Nn \l__tblr_table_firsthead_box
{
\__tblr_build_table_label_entry:
@@ -5375,9 +5411,37 @@
}
}
+\bool_new:N \l__tblr_table_no_title_bool
+\bool_new:N \l__tblr_table_no_entry_bool
+\bool_new:N \l__tblr_table_no_label_bool
+\tl_const:Nn \c_tblr_none_tl { none }
+
+\cs_new_protected:Npn \__tblr_set_table_label_entry:
+ {
+ \tl_set:Nx \lTblrCaptionTl { \InsertTblrText { caption } }
+ \tl_set:Nx \lTblrEntryTl { \InsertTblrText { entry } }
+ \tl_set:Nx \lTblrLabelTl { \InsertTblrText { label } }
+ \bool_set:Nn \l__tblr_table_no_title_bool
+ { \tl_if_empty_p:N \lTblrCaptionTl }
+ \bool_set:Nn \l__tblr_table_no_entry_bool
+ { \tl_if_eq_p:NN \lTblrEntryTl \c_tblr_none_tl }
+ \bool_set:Nn \l__tblr_table_no_label_bool
+ { \tl_if_eq_p:NN \lTblrLabelTl \c_tblr_none_tl }
+ \bool_if:NT \l__tblr_table_no_title_bool
+ {
+ \SetTblrTemplate { conthead-pre } { empty }
+ }
+ \bool_if:NT \l__tblr_table_no_label_bool
+ {
+ \SetTblrTemplate { caption-tag }{ empty }
+ \SetTblrTemplate { caption-sep }{ empty }
+ }
+ }
+
\cs_new_protected:Npn \__tblr_build_tall_table_head_foot:
{
\__tblr_get_table_width:
+ \__tblr_set_table_label_entry:
\__tblr_build_table_head_aux:Nn \l__tblr_table_firsthead_box
{
\__tblr_build_table_label_entry:
@@ -5394,15 +5458,8 @@
\cs_new_protected:Npn \__tblr_build_table_label_entry:
{
- \tl_set:Nx \lTblrCaptionTl { \InsertTblrText { caption } }
- \tl_set:Nx \lTblrEntryTl { \InsertTblrText { entry } }
- \tl_set:Nx \lTblrLabelTl { \InsertTblrText { label } }
- \tl_if_eq:NnTF \lTblrLabelTl { none }
+ \bool_if:NF \l__tblr_table_no_label_bool
{
- \SetTblrTemplate { caption-tag }{ empty }
- \SetTblrTemplate { caption-sep }{ empty }
- }
- {
\refstepcounter { table }
\tl_if_empty:NF \lTblrLabelTl
{
@@ -5411,10 +5468,10 @@
\exp_args:NV \label \lTblrLabelTl
}
}
- %% We put caption-lot code at last, so that an user can modify \lTblrEntryTl
- %% in a caption-label template. For example, an user may want to use
+ %% We put caption-lot code at last, so that a user can modify \lTblrEntryTl
+ %% in a caption-label template. For example, a user may want to use
%% short caption in nameref, but at the same time not to add LoT entry.
- \tl_if_eq:NnF \lTblrEntryTl { none }
+ \bool_if:NF \l__tblr_table_no_entry_bool
{ \UseTblrTemplate { caption-lot } { default } }
}
@@ -6340,12 +6397,6 @@
{
\tl_set:Nn \l__tblr_vline_abovepos_tl {0} % default position
}
- \tl_set:Nx \l__tblr_vline_belowpos_tl
- { \__tblr_spec_item:ne { vline } { [#1][#2](#3) / belowpos } }
- \tl_if_empty:NT \l__tblr_vline_belowpos_tl
- {
- \tl_set:Nn \l__tblr_vline_belowpos_tl {0} % default position
- }
\fp_compare:nNnF { \l__tblr_vline_abovepos_tl } = {0}
{
\dim_set:Nn \l_tmpa_dim
@@ -6361,8 +6412,10 @@
}
}
%% To join two vline segment above and below a cline,
- %% we choose to extend every vline downwards a little (#55).
- \fp_compare:nNnTF { \l__tblr_vline_belowpos_tl } = {0}
+ %% we choose to extend every vline downwards a little (#55, #272).
+ \tl_set:Nx \l__tblr_vline_belowpos_tl
+ { \__tblr_spec_item:ne { vline } { [#1][#2](#3) / belowpos } }
+ \tl_if_empty:NTF \l__tblr_vline_belowpos_tl
{
\dim_set:Nn \l__tblr_vline_belowskip_dim
{
@@ -7082,11 +7135,16 @@
{
\tl_set:Nx \l__tblr_evaluate_tl
{ \__tblr_spec_item:nn { outer } { evaluate } }
- \tl_set:Nx \l__tblr_evaluate_tl { \tl_head:N \l__tblr_evaluate_tl }
\tl_if_empty:NF \l__tblr_evaluate_tl
{
- \exp_last_unbraced:NNV
- \__tblr_evaluate_table_body:NN \l__tblr_body_tl \l__tblr_evaluate_tl
+ \tl_if_eq:NnTF \l__tblr_evaluate_tl { all }
+ {
+ \tlSet \l__tblr_body_tl { \evalWhole {\expValue \l__tblr_body_tl} }
+ }
+ {
+ \exp_last_unbraced:NNV
+ \__tblr_evaluate_table_body:NN \l__tblr_body_tl \l__tblr_evaluate_tl
+ }
}
}
%% Evaluate every occurrence of the specified function
More information about the tex-live-commits
mailing list.