All notable changes to the l3kernel
bundle since the start of 2018
will be documented in this file.
The format is based on Keep a Changelog, this project uses date-based 'snapshot' version identifiers.
- Syntax entries of
\keys_set_groups:nnn(n)N
\peek_analysis_map_inline:n
with active spaces (issue #1539)
- Full set of variants for
\prop_(g)put_if_not_in:Nnn
\keys_set_groups:nnn(n)N
to match\keys_set_exclude_groups:nnn(n)N
- Implementation of deprecated
\pdf_object_write:nn
\prop_(g)put_if_not_in:Nnn
(renamed from\prop_(g)put_if_new:Nnn
)\intarray_if_exist:N(TF)
\fparray_if_exist:N(TF)
- Support for 'indexed' PDF objects
- Expand object names in
\pdf_object_...
functions (issue #1521) - Adapt
l3doc
forltcmd
change to handling of newlines (see latex3/latex2e#1304) - Return active spaces from
\sys_get_query:n(nn)N
(issue #1529)
- False
debug
error raised by\cctab_const:Nn
(issue #1508) - Undefined
\__kernel_iwo_open:Nn
used in\iow_shell_open:Nn
(issue #1515) - Naming of register functions in LuaMetaTeX 2.11+ (issue #1518)
- Catcode applied to letters by
\sys_get_query:n(nn)N
\prop_(g)put_if_new:Nnn
(renamed to\prop_(g)put_if_not_in:Nnn
)
- Macro interface for
l3sys-query
- Require that
expl3
is loaded at top level in generic mode - Ensure that the dimension arguments to
\box_autosize_to_...:Nnn
are properly formed (issue #1502)
- Typeset
TF
of internal conditionals in current color (issue #730) - Some functions and variables were defined locally
- Improve error recovery when an invalid
prop
is used (PR #1464)
- Restore
\__kernel_msg_...:nnx(xx)
for olderxparse
support - Prevent an infinite loop in
\debug_(on|off):n
(issue #1442) - Require
\sys_ensure_backend:
is used in the preamble (issue #1442)
- Work-around to enable
\prop_set_from_keyval:Nn
, etc., to avoid an error ifprop
is not already defined
- Extend debug checking to cover
\prop_(g)set_from_keyval:Nn
- Checking missing
\endgroup
at the end of\DocInclude
- Linked storage type for large property lists (issue #1040, pull #1059)
\meta
now typesets in\texttt
, along with\Arg
- Improved the performance of
\cs_if_exist:NTF
,\cs_if_free:NTF
,\cs_if_exist_use:NTF
, and most notably theirc
-type variants.
- Inconsistent local/global assignments in
\vcoffin_gset:Nnn
and\vcoffin_gset:Nnw
- Tokenization by
\peek_analysis_map_inline:n
of one additional character after any space or brace
\msg_gset:nnn(n)
\keys_set_exclude_groups:nnn(nN)
to replace\keys_set_filter:nnn(nN)
- Flags with N-type names, like other variable types
- Set
l3doc
optionkernel
off as-standard (issue #1403) - Moved
\seq_set_filter:NNn
to stable
\keys_set_filter:nnn(nN)
in favor of\keys_set_exclude_groups:nnn(nN)
- Documentation for
\bitset_show_named_index:N
(issue #1372) \bitset_log_named_index:N
\tl_build_get_intermediate:NN
- Support for
.default:n
values for theunknown
handler (see issue #67)
- Improved method to suppress
l3bitset
where required - Clarify behavior of
\tl_if_novalue:n(TF)
(see issue #1402)
\tl_build_get:NN
in favor of\tl_build_get_intermediate:NN
- Handling of
documented-as
variants inl3doc
indexing (see issue #1345) - Missing trailing
TF
in single variant of conditional functions (issue #1398)
- Use keyval handler for
l3doc
class options
- Support for deprecated
pdf
module functions (issue #1373) - Generate stub
l3bitset
for transitional support
\c_empty_str
(issue #1361)l3bitset
: moved froml3experimental
- Return
str
(nottl
) in\bool_to_str:N
and\bool_to_str:n
(issue #1331) - Catcode of space from
\str_set_convert:Nnnn
(issue #1344) - Tidy up various documentation issues (issue #1345)
- Documentation for
\c_nan_fp
\str_case_e:en(TF)
- Speed up
\str_(g)set:Nn
,\str_const:Nn
,\str_(g)put_left:Nn
, and\str_(g)put_right:Nn
- Normalisation of
.inherit:n
key data (issue #1314)
\seq_(g)set_map_e:NNn
- Documentation for
\ExplLoaderFileDate
inexpl3.pdf
- Documentation improvements
- Refine action of
\text_titlecase_first:n(n)
to be focussed strictly on first (relevant) codepoint in the input - Standardize "This is the (e)TeX primitive ..." in
texnote
in documentation - Move
\tl_build_(g)begin:N
,\tl_build_(g)end:N
,\tl_build_(g)put_left:Nn
and\tl_build_(g)right:Nn
to stable status
\seq_(g)set_map_x:NNn
in favor ofe
-type naming
\fp_clear_variable:n
should act locally (issue #1298)\fp_clear_function:n
should act locally and correctly- Support for
\fp_show:N
showing symbolic expressions (issue #1301) - Undefined
\str_case:en(TF)
(excluding\str_case:en
)
\text_titlecase_all:n(n)
\token_to_catcode:N
- Support for symbolic variables in fp input:
\fp_new_variable:n
,\fp_set_variable:nn
and\fp_clear_variable:n
- Support for user-defined functions in fp expressions:
\fp_new_function:n
,\fp_set_function:nnn
and\fp_clear_function:n
- Clarify action of
\text_titlecase_first:n(n)
- Detect letters for titlecasing based on Unicode general category
\text_titlecase:n(n)
as ambiguous: replaced by\text_titlecase_all:n(n)
\tl_build_(g)clear:N
in favour of\tl_build_(g)begin:N
- Support arbitrary BCP-47 locales for case-changing overrides (issue #1239)
- Retain braces when ending titlecasing with some input structures
\iow_shipout_e:Nn
- Documentation for
\sys_if_timer_exist_p:
and\sys_if_timer_exist:(TF)
. They were supported since l3kernel 2021-05-25, along with\sys_timer:
. - l3doc.dtx: Support for footnotes in the function and variable environment
- Variants
\tl_if_single:c(TF)
and\tl_if_single_p:c
(issue #1272) - Key properties
.str_(g)set_e:N
and.tl_(g)set_e:N
- Switch generally from
x
- toe
-type variants - Convert
\file_if_exist:n(TF)
to expandable status, adding predicate version - Standardise variants for
\prop_(g)pop:NnN(TF)
- Standardise variants for
\prop_(g)put:Nnn
- Standardise variants for
\prop_(g)put_if_new:Nnn
- Standardise variants for
\prop_(g)remove:Nn
\iow_shipout_x:Nn
in favor ofe
-type naming- Key properties
.str_(g)set_x:N
and.tl_(g)set_x:N
- Rare rounding error in divisions (issue #1264)
\c_sys_timestamp_str
- Rename
\tex_pdfcreationdate:D
to\tex_creationdate:D
- Wrap long lists of variants in
l3doc
display of functions (issue #1258)
- Revert 'Allow for implicit chars when case changing' (issue #1260)
\tex_XeTeXhyphenatablelength:D
,\tex_XeTeXinterwordspaceshaping:D
,\tex_XeTeXselectorcode:D
- Several missing
\tex_<name>:D
primitives from LuaTeX and (up)TeX
\tex_protrudechars:D
now defined for XeTeX (to\XeTeXprotrudechars
)- Allow for optional
v
in version string argument to\ProvidesExpl...
- Allow for implicit chars when case changing
\codepoint_to_category:n
- Drop notes about slow
\expanded
emulation.\expanded
is required since release 2023-05-15 - Sync engine/primitive requirements in
expl3.dtx
with code and README
- Case changing of Greek characters with complex NFD representation (issue #1236)
- Error recovery when wrongly applying abs to a tuple (issue #1238)
- Exclude entries in
\l_text_case_exclude_arg_tl
from expansion in\text_expand:n
(latex3/latex2e#904) - Generate dialytika if appropriate when uppercasing Greek words starting with a vowel taking a breathing mark (issue #1228)
- Retain stress diacritics when uppercasing Greek (issue #1230)
- Expand (partial) paths in
\l_file_search_path_seq
and\input@path
(see latex3/latex2e#1086)
\cctab_gsave_current:N
,\g_tmpa_cctab
and\g_tmpb_cctab
(issue #1089)\prg_gset_eq_conditional:NNn
(issue #1212)\iow_shell_open:Nn
(issue #1122)
\tl_case:Nn(TF)
expl3
package optionenable-debug
(no longer required)
- Set
\l_keys_value_tl
in.initial:n
(issue #1013) - Support for boolean values in
expl3
package optionscheck-declarations
andlog-functions
(issue #978) - Allow for optional
/
at end of\input@path
entries (see latex3/latex2e#1076)
- Rounded out the
\use_i:nn...
functions to cover all cases taking one argument from up to nine arguments \coffin_(g)reset_poles:N
\dim_to_decimal_in_<unit>:n
, for<unit>
typescc
,cm
,dd
,in
,mm
andpc
\file_input_raw:n
\int_if_zero:n(TF)
\str_mdfive_hash:n
- Remove
\noexpand
inside math mode in\text_expand:n
- Re-implement
\dim_to_decimal_in_bp:n
and\dim_to_decimal_in_unit:nn
to be re-entrant (issue #954)
- Omit
0123456789
from URL escaping (issue #838) - Leave implicit chars unchanged in
\text_expand:n
(issue #874) - Filtering/grouping applied to meta keys (issue #940)
- Issue correct error message if
bool
key is set incorrectly using.initial:n
(issue #1013) - Set
\l_keys_key_str
in.initial:n
(issue #1013) - Handling of implicit chars in
\text_purify:n
(issue #1208)
- Require
\expanded
and 'pdfTeX extension' primitives, and thus TeX distributions from mid-2019 onward
- Treatment of trailing
/
in\input@path
\seq_map_pairwise_function:NNN
(renamed from\seq_mapthread_function:NNN
)
- Moved
\seq_set_item:Nnn
to stable status - Track seen filenames to improve performance of
\file_full_name:n
and dependent file operations
- Experimental function
\seq_pop_item:NnN
froml3candidates
- Experimental function
\seq_mapthread_function:NNN
now renamed\seq_map_pairwise_function:NNN
\bool_case:n(TF)
(renamed from\bool_case_true:n(TF)
)\flag_ensure_raised:n
(renamed from\flag_raise_if_clear:n
)\iow_wrap_allow_break:
(renamed from\iow_allow_break:
)
- Moved to stable status:
\bool_(g)set_inverse:N
\c_catcode_active_space_tl
\c_sys_engine_version_str
\exp_args_generate:n
\fp_if_nan:n(TF)
\ior_get_term:nN
and\ior_str_get_term:nN
\ior_shell_open:Nn
\msg_show_item:n
,\msg_show_item_unbraced:n
,\msg_show_item:nn
,\msg_show_item_unbraced:nn
- Require random number support from engine
- Experimental functions from
l3candidates
:\bool_case_false:n(TF)
\intarray_gset_rand:Nn(n)
\intarray_to_clist:N
\peek_catcode_collect_inline:Nn
,\peek_charcode_collect_inline:Nn
and\peek_meaning_collect_inline:Nn
\prop_rand_key_value:N
\seq_set_from_function:Nnn
and\seq_set_from_inline_x:Nnn
\sys_if_rand_exist:(TF)
\tl_range_braced:Nnn
and\tl_range_unbraced:Nnn
- Experimental functions now renamed
\bool_case_true:n(TF)
(now\bool_case:n(TF)
)\flag_raise_if_clear:n
(now\flag_ensure_raised:n
)\iow_allow_break:
(now\iow_wrap_allow_break:
)
- Experimental functions moved to kernel-internal:
\msg_log_eval:Nn
and\msg_show_eval:Nn
- Re-order arguments of
\text_declare_lowercase_mapping:nnn
,\text_declare_titlecase_mapping:nnn
and\text_declare_uppercase_mapping:nnn
\box_set_clipped:N
and variants (renamed from\box_clip:N
)\text_declare_lowercase_mapping:nn(n)
,\text_declare_titlecase_mapping:nn(n)
and\text_declare_uppercase_mapping:nn(n)
to allow customization of case changing outcomes
\box_set_trim:Nnnnn
and\box_set_viewport:Nnnnn
moved to stable kernel
- Incorrect internal name in
\pdf_pagesize_gset:nn
- Experimental
\box_clip:N
and variants (renamed to\box_set_clipped:N
)
\tex_endlocalcontrol:D
as expl3 name for the LuaTeX primitive
- Allow non-integer values in color expressions
- Restrict color expressions values to the range [0, 100]
- Leave Greek spacing diacritics unchanged in uppercasing
- Fix minor version in
\c_sys_engine_version_str
for pdfTeX and LuaTeX (issue #1186)
- More defensive approach in
\codepoint_to_nfd:n
- CJK character handling for (u)pTeX (issue #1171)
- Swap meaning of
el
andel-x-iota
when case changing Greek: match traditional LaTeX approach
\l_text_accents_tl
and\l_text_letterlike_tl
- Handling of multiple accents when uppercasing Greek (see LaTeX2e issue #987)
- Allow for expressions within color
RGB
/HSB
input
- Complete list of pdfTeX primitives
- Allow for multi-part BCP47 strings in case changing
- Loading with plain TeX due to
\outer
status of^^L
issue (#1161)
- Leave catcode of
&
unchanged in code environment
\pdf_pagesize_gset:nn
- Enable
\char_generate:nn
to create active tokens which are\outer
or equal to\fi
\codepoint_to_nfd:n
\codepoint_generate:n
and\codepoint_str_generate:n
\str_casefold:n
- Protect
babel
shorthands from expansion
- Appearance of
\DescribeOption
(issue #1111)
\prg_gset_conditional:N(p)nn
and\prg_gset_protected_conditional:N(p)nn
- Loading of
expl3
with ConTeXt MkIV (issue #1142)
- Usage of
\exp_not:n
/\exp_not:N
in\peek_analysis_map_inline:n
output
\peek_analysis_map_inline:n
support for macro parameter characters (issue #1109), for many expandable tokens (issue #1110), and an esoteric case (issue #1113)- Creation of a message with some engines (issue #1139)
\char_to_nfd:N
,\char_to_nfd:n
\char_foldcase:N
,\char_lowercase:N
,\char_titlecase:N
,\char_uppercase:N
andstr
variants\char_to_utfviii_bytes:n
\str_foldcase:n
- Set media box for test phase documents
- Text case switching in
\text_titlecase_first:n
(issue #1130)
\pdf_object_new:n
and\pdf_object_write:nnn
- support assignment of object type at point-of-writing (issue #1123)\text_map_function:nN
and\text_map_inline:nn
for mapping to graphemes in textual input- Support for medieval Latin case changing
\char_to_nfd:n
to extend NFD support to 8-bit engines
\pdf_object_new:nn
and\pdf_object_write:nn
, in favor of\pdf_object_new:n
and\pdf_object_write:nnn
, respectively
- Shortened range of chars which are left unchanged when converted to
strings with
\str_(g)set_convert:Nnnn
. \color_if_exist:n(TF)
- Support for case changing Vietnamese characters with 8-bit engines
- Parsing of
cmy
,tHsb
and&spot
color models to support data exchange withxcolor
- Replace
LaTeX3
in message text byLaTeX
- Approach to setting current color data from LaTeX2e
- Support for case changing Croatian diagraph with 8-bit engines
- Support accent removal when uppercasing Greek with 8-bit engines
- Function
\sys_ensure_backend:
- Behavior of
\color_math:nn
in alignments - Expansion of text containing unterminated
\romannumeral
primitives
\iow_open:N
in ConTeXt MkII
- Correct argument order in
\text_case_switch:nnnn
- Improved approach to
\text_case_switch:nnnn
expansion
\text_declare_case_equivalent:Nn
,\text_case_switch:nnnn
and related mechanism to allow specialisation of case changing output for selected commands
\cs_parameter_spec:N
\text_expand:n
now acts on active chars to support legacy input encodings
\cs_argument_spec:N
- Correct validity check performed by
\regex_show:N
(issue #1093) - Closing of file handles (issue #1105)
- Made
\peek_analysis_map_inline:n
alignment-safe (issue #1090) - Setting a boolean to itself no longer errors (issue #1055)
- Exclude only first mandatory argument of entries in
\l_text_case_exclude_arg_tl
from case changing
- Add
\lua_load_module:n
- Typo in implementation of titlecase
hy-x-yiwn
- Definition order issue with
\str_case:Nn(TF)
- Language settings
hy
andhy-x-yiwn
for handling of ech-yiwn ligature uppercasing
- Support BCP 47 properly in case changer language argument
- Correct
el-xiota
andde-xeszett
toel-x-iota
andde-x-eszett
- Language setting
el-xiota
for retention of ypogegrammeni when uppercasing Greek
- Rename case-changing variant
de-alt
tode-xeszett
to align withluaotfload
- Allow for
\lccode
/\uccode
changes in\char_...case:n
functions
- Support for ypogegrammeni in case changing Greek (see issue #1088)
- Collect some common code from
l3backend-color
\keys_precompile:nnN
for conversion of keyvals to fast-to-apply token lists- Missing
\str_if_empty:n(TF)
(see issue #1071) - Missing
\str_case:Nn(TF)
(see issue #1071) \tex_...:D
names for primitives added in TeX Live 2022
- Definition of
\legacy_if:n(TF)
to support primitive conditionals \str_<type>case:n
now case changes codepoints above 127 with all engines\char_generate:nn
now also allows to generate category 10 tokens (spaces) except for char code 0
- Handling of 'misplaced'
\protect
by\text_expand:n
- Nesting of
\tl_analysis_map_inline:nn
- Naming of an error message
- Better support for
\cite
, etc., in case changing
- Use of
\@uclclist
for case changing
- Distribute
l3doc.pdf
with a prominent warning about future changes \color_math:nn(n)
as a functional equivalent of the new\mathcolor
command in LaTeX2e
- Documentation for horizontal coffin poles (see issue #1041)
- Update primitive requirements to enable loading with Prote/HINT
- Auto-generate legacy switch if required in
.legacy_set_if:n
key property
- Correct creation of
.if
property - Handling of colors created in a group once they go out-of-scope
- Support for validity scope for keys
\peek_remove_filler:n
\prop_to_keyval:N
\regex_match_case:nn(TF)
,\regex_replace_case_once:nN(TF)
,\regex_replace_case_all:nN(TF)
- Policy change: functions will no longer be removed after deprecation,
thus the Lua functions noted below are the last 'stable' code to be
removed from
l3kernel
after deprecation - Allow indirect conversions between colorspaces through fallback models
- Move some color functions from
l3backend
\peek_..._ignore_spaces:N(TF)
functions\sys_load_deprecation:
- Option
undo-recent-deprecations
- Lua functions in
l3kernel
table
- Support for legacy
if
switches inl3keys
- Documentation improvements
- Implementation of
intarray
data type with LuaTeX - Better support for LuaMetaTeX
- DeviceN colorspace conversions with alternative model RGB
\prop_..._from_keyval:Nn
functions now support active comma or equal sign (pull #1012)
- Support for ICC-based color profiles
\color_profile_apply:nn
- Better DeviceN support
- Global assignments for
\box_gresize_to_ht_plus_dp:Nn
and\coffin_gattach:NnnNnnnn
- Conversion of DeviceN colors to device fallback
- Formatting of expandable errors (issue #931)
- Internal code for kernel messages
- Handling of multiple color models (issue #962)
- Functions marked for removal end-2020
- Local assignment to
\g__sys_backend_tl
- Incorrect internal function name (issue #939)
- Case-changing exceptions for (u)pTeX (issue #939)
- Low-level error if accent commands are not followed by letter when case changing (see #946)
- Loading when
\expanded
is not available
- Correctly detect local formats in
Mismatched LaTeX support files
error.
\msg_note:nnnnnn
(issue #911)\str_compare:nNnTF
(issue #927)\sys_timer:
\prop_concat:NNN
,\prop_put_from_keyval:Nn
(issue #924)- Functions to show and log various datatypes (issue #241):
\coffin_show:Nnn
,\coffin_show:N
,\coffin_log:Nnn
,\coffin_log:N
,\color_log:n
,\group_show_list:
,\group_log_list:
,\ior_show:N
,\ior_log:N
,\iow_show:N
,\iow_log:N
,\tl_log_analysis:N
,\tl_log_analysis:n
\legacy_if_set_true:n
,\legacy_if_set_false:n
,\legacy_if_set:nn
- Matching multiple regex at the same time (issue #433):
\regex_case_match:nn(TF)
,\regex_case_replace_once:nN(TF)
,\regex_case_replace_all:nN(TF)
- Checking brace balance in all regex functions (issue #377)
- Removing duplicates in clists when items contain commas (issue #917)
- Slight speed up in some elementary int/dim/skip/muskip operations and in setting tl or clist variables equal.
- Speed up mapping functions in l3clist, l3prop, l3seq, l3tl
- Loading of backend in generic DVI mode (issue #905)
- Make
\keyval_parse:nnn
alignment-safe (issue #896) - Control sequences and category codes in regex replacements (issue #909)
- Speed up
\group_align_safe_begin:
(pull #906)
- Color export in comma-separated format
\ur{...}
escape inl3regex
to compose regexes\seq_set_split_keep_spaces:Nnn
(see #784)\seq_set_item:Nnn(TF)
and\seq_pop_item:NnN(TF)
\box_ht_plus_dp:N
(issue #899)\clist_map_tokens:nn
,\clist_map_tokens:Nn
,\str_map_tokens:nn
,\str_map_tokens:Nn
- Use prevailing catcodes instead of string in regex replacement (issue #621) (Breaking change)
\__kernel_file_name_sanitize:n
now uses a faster\csname
-based approach to expand the file name- Improved performance for basic conditionals
\pdf_version_gset:n
support fordvips
- Improve handling of
\exp_not:n
in\text_expand:n
(issue #875) \file_full_name:n
now avoids calling\pdffilesize
primitive multiple times on the same file- Show printable characters explicitly in
\regex_show:n
- Regex replacement now errors when using a submatch (
\1
etc) for which the regex has too few groups - Showing complex datatypes now validates their internal structure (issue #884)
- Indexing in l3doc: all page references before codeline references, improve target placement, solve pdfTeX and makeindex warnings
- Evaluate integer constants only once (issue #861)
- Detect
\ior_map_inline:Nn
calls on undefined streams (issue #194)
l3docstrip
converted to a stub which simply loads DocStrip: use the latter directly
l3color
: Moved froml3experimental
l3pdf
: Moved froml3experimental
default
alias to str_convert
- Re-ordered
interface3
documentation - Moved
msg_show:nn(nnnn)
to stable
- Use new (internal) interface for kerns
\c_zero_str
\keyval_parse:nnn
\keyval_parse:NNn
is set equal to\keyval_parse:nnn
- Handling of encoding-specfic commands in
\text_purify:n
\peek_analysis_map_inline:n
with spaces and braces
- Setting of line width in vertical coffins in LaTeX
\peek_analysis_map_inline:n
\peek_regex:nTF
,\peek_regex_remove_once:nTF
, and\peek_regex_replace_once:nnTF
\token_case_catcode:NnTF
,\token_case_charcode:NnTF
, and\token_case_meaning:NnTF
- Extend
\text_expand:n
to cover\@protected@testopt
- Extend
\text_purify:n
to cover\@protected@testopt
\token_if_font_selection:N(TF)
(see #806)
- Avoid relying on braced
\input
primitive syntax - Correct expansion of environments in
\text_purify:n
- Some aspects of
cctab
setup with 8-bit engines(issue #814)
- Improved performance for
tl
functions - Extend case changer to cover all of Greek with pdfTeX
- Correctly detect LaTeX when pre-loading expl3 and setting up case changer
- Lua emulation of \strcmp (issue #813)
- Use Lua pseudo-primitives instead of
\directlua
\token_if_primitive:N(TF)
now reports pseudo-primitives as primitives in LuaTeX
- Loading in generic mode (issue #800)
- Save primitive definition of
\pdfoutput
with CSLaTeX
\hbox_overlap_center:n
- Backend setting for direct PDF output
- Backend setting for XeTeX support
- Backend setting
pdfmode
\file_compare_timestamp:nNn(TF)
in LuaTeX (issue #792)- Text case changing and expansion where an excluded command is equivalent
to
\use:n
- Color selection implementation
- Performance enhancements for
\keys_set:nn
- Loading generically on ConTeXt (issue #783)
l3cctab
module for using category code tables\file_parse_full_name:n
and\file_parse_full_name_apply:nN
- Additional
\prop_put:Nnn
variants \seq_set_map_x:NNn
\msg_term:nn(nnnn)
- File lookup with
\input@path
- 8-bit encodings in
\str_set_convert:Nnnn
- Implementation of
\file_parse_full_name:nNNN
now uses\file_parse_full_name:n
internally \seq_set_map:NNn
no longerx
-expands<inline function>
(\seq_set_map_x:NNn
now does that). Both moved to stable.
- Functions deprecated at end of 2019
\str_declare_eight_bit_encoding:nnn
- Use
scn
operator for separations - Internal color model
- Internal performance enhancements
- Moved
\msg_expandable_error:nn(nnnn)
to stable. - Moved
\seq_indexed_map_inline:Nn
and\seq_indexed_map_function:Nn
to stable as\seq_map_indexed_inline:Nn
and\seq_map_indexed_function:Nn
. - Internal changes to
expl3
to allow loading earlier in LaTeX2e.
\str_convert_pdfname:n
- Make
\text_purify:n
f
-type expandable
- Performance improvements in keyval processing
- Internal changes to quark handling
- Recognize the exponent marker
E
(same ase
) in floating point numbers
- Leave active characters untouched when case-changing (see #715)
- Control for start-of-titlecasing: see
\l_text_titlecase_check_letter_bool
- Nesting of
\seq_shuffle:N
in another sequence mapping (issue #687) \ior_shell_open:Nn
in engines other than LuaTeX - shell commands didn't execute, plus the command call would be left in the input stream.
\text_purify:n
- Issue with case-changing Turkish
\tex...:D
coverage for TeX Live 2020 engine changes
- New implementation for
\keyval_parse:NNn
- around 40% speed improvement, also expandable
- Make
expl3
reload-safe forlatexrelease
(see latex3/latex2e#295)
- Extend case-changing encoding support to Cyrillic and Greek
- Option
suppress-backend-headers
(see matching change inl3backend
)
- Allow
dvisvgm
driver with XeTeX (issue #677)
undo-recent-deprecations
would not reload the deprecation code
- Interaction with some
babel
languages at the start of the document
- Leave implicit tokens unchanged by
\text_expand:n
- Extend the
de-alt
case changing locale to 8-bit engines
- Key property
.cs_set:Np
and variants
- Support
\@uclclist
entries when case-changing
- Allow for full range of encodings when expanding text (issue #671)
- Support
\begin
/\end
in text expansion
\l_keys_key_str
and\l_keys_path_str
\l_keys_key_tl
and\l_keys_path_tl
, replaced by\l_keys_key_str
and\l_keys_path_str
, respectively
- Minor edits to LaTeX3 News
- Table of Contents for combined LaTeX3 News
- Use Lua
utf8
library if available
- Undefined command in box debugging code
- Support for command replacement in text expansion
- Require key values for numerical key types (dim, int, etc.) (see #661)
- Issue with keys where some leading spaces could be left in key names
\bool_case_true:n(TF)
and\bool_case_false:n(TF)
\file_hex_dump:n(nn)
and\file_get_hex_dump:n(nn)N(TF)
\str_<type>case:n
\text_<type>case:n(n)
\text_expand:n
and supporting data structures
- Distribute LaTeX3 News
- Moved
\char_<type>case:N
to stable - Documentation improvements
- Inherit key required/forbidden properties (see #653)
- Set backend at the beginning of
\document
(see #657)
\str_<type>_case:n
replaced by\str_<type>case:n
except\str_mixed_case:n
replaced by\str_titlecase:n
\tl_<type>_case:n(n)
replaced by\text_<type>case:n(n)
, except\tl_mixed_case:n(n)
replaced by\text_titlecase:n(n)
- Handling of repeated loading of a backend (issue #646)
- Handling of repeated loading of deprecated functions
- File searching when
\(pdf)filesize
is not available (issue #644)
- Internal structure of
\c_sys_jobname_str
altered - Update upTeX test to follow guidance from developers
- File names are now returned without quotes by
\file_full_name:n
\file_if_exist:n(TF)
, etc., when dealing with file names containing spaces (see #642)
- Lua function
l3kernel.shellescape()
- Better coverage of (u)pTeX primitives following publication of pTeX manual in English
- Trim spaces surrounding file names
- HarfTeX primitives
- Correct handling of 'traditional' class options for backend
- Standard backend for (u)pTeX is now
dvips
- Minimum LuaTeX version now v0.95
- Moved
\debug_on:n
,\debug_off:n
,\debug_suspend:
and\debug_resume:
to stable - Accept 'traditional' class options for backend (
dvipdfmx
,dvips
, etc.) - Performance enhancements when loading
expl3
- Handling of files with no extension
- Behaviour of Lua function
l3kernel.charcat
in some circumstances - Loading under ConTeXt
- Variants using
\exp_args
functions with more than 9 arguments (see #636)
- File searching using
\file_full_name:n
(see #634)
- Speed up variants and reduce their
\tracingall
output - Debug and deprecation code are now loaded independently of expl3 core
\file_compare_timestamp:nNn(TF)
now usable in expansion contexts- Moved to stable:
\bool_const:Nn
\dim_sign:n
\file_compare_timestamp:nNn(TF)
- FP
logb
operator \fp_sign:n
fparray
module\int_sign:n
\intarray_const_from_clist:Nn
\intarray_show:N
\ior_map_variable:NNn
\ior_str_map_variable:NNn
\mode_leave_vertical:
\prop_(g)set_from_clist:Nn
\prop_const_from_clist:Nn
\seq_const_from_clist:Nn
\seq_(g)shuffle:N
\sys_if_platform_unix:(TF)
\sys_if_platform_windows:(TF)
\sys_gset_rand_seed:
\sys_rand_seed:
- Shell access functions
- Key
.initial:n
property when combined with inherited keys (see #631)
- Loading Unicode data when some chars may be active (see #627)
- Missing internal variant (issue #624)
\file_full_name:n
,\file_mdfive_hash:n
,\file_size:n
,\file_timestamp:n
\seq_map_tokens:Nn
,\tl_map_tokens:nn
,\tl_map_tokens:Nn
- Moved
\prop_map_tokens:Nn
to stable - Generate chars with catcode as-supplied when case changing
\fp_if_nan:nTF
- Make round(.,nan)=nan with no "Invalid operation" error
\tl_rescan:nn
and\tl_(g)set_rescan:Nnn
when single-line input contains a comment character (see #607)- Final value of the variable in
\tl_map_variable:NNn
and\clist_map_variable:NNn
. - Remove duplicate keys in
\prop_set_from_keyval:Nn
(see #572)
\c_term_ior
- Coffin pole intersection in some cases (see #605)
- Loading for
expl3
with plain TeX
- Moved
l3str-convert
module tol3kernel
- Ensure
\msg_fatal:nn
ends the TeX run if used inside an hbox (see #587) - Moved backend code to a separate release schedule
- Handling of control sequences in key names (see #594)
- Experimental
\file_compare_timestamp:nNn(TF)
- Precedence of juxtaposition (implicit multiplication) in
l3fp
now different for keywords/variables and factors in parentheses
- Experimental driver-level interfaces for image inclusion
- Experimental
\ior_shell_open:Nn
- Some issues in
dvisvgm
driver
.muskip_set:N
property
- Experimental
\driver_pdf_compress_objects:n
replaces\driver_pdf_objects_(en|dis)able:
\char_str_<target>_case:N
- Infinite loop in some cases in DVI mode due to link-breaking code (see #570)
- Category code of output from
\char_<target>_case:N
, and same issue in\str_<target>_case:n
- New
l3legacy
module containing\legacy_if:n(TF)
- Moved
\file_get_mdfive_hash:nN(TF)
,\file_get_size:nN(TF)
and\file_get_timestamp:nN(TF)
to stable - Moved
\file_if_exist_input:n
and\file_if_exist_input:nF
to stable - Moved
\file_input_stop:
to stable - Moved
\peek_N_type:TF
to stable
- Experimental support for a range of PDF concepts at the lowest (driver abstraction) level
- Moved
\tl_if_single_token:n(TF)
to stable
- Support for ConTeXt from mid-December 2018
- Loading when pre-TL'18 XeTeX is in use (see #555)
\str_log:n
,\str_log:N
TF
versions for\file_get_...:nN
and\ior_(str_)get:NN
functions\cs_prefix_spec:N
,\cs_argument_spec:N
,\cs_replacement_spec:N
undo-recent-deprecations
optionfactorial
function inl3fp
- Return values from
\file_get:nnN
,\file_get_...:nN
,\ior_get:NN
,\sys_shell_get:nnN
- Moved coffin affine transformations to stable
- Moved
\prop_count:N
to stable - Moved
\tl_count_tokens:n
to stable - Completed emulation of e-type argument when
\expanded
is unavailable - Made expandable messages expand their result, like usual messages
- Made deprecation errors less intrusive by default
- Stopped providing do-nothing
\color
macro when undefined
\token_get_prefix_spec:N
,\token_get_arg_spec:N
,\token_get_replacement_spec:N
replaced by\cs_prefix_spec:N
,\cs_argument_spec:N
,\cs_replacement_spec:N
, respectively
- Treatment of inherited keys when setting only known keys (see #548)
- Experimental
\skip_split_finite_else_action:nnNN
- Experimental
\tl_reverse_tokens:n
- Defensive code for redefinition of
\time
,\day
,\month
and\year
- Resetting of key inheritance (see #535)
- Issue in deprecated command
\tl_set_from_file:Nnn
(see https://tex.stackexchange.com/q/474813/)
- Support for return of whole path by
\keys_set_known:nnN
-like function\keys_set_known:nnnN
(see #508) .prop_(g)put:N
key property (see #444)
- Handling of nested key setting when filtering, etc. (see #526)
- Inheritance of default values (see #504)
- Global versions of box affine functions, e.g.
\box_grotate:Nn
- Global versions of box size adjustment functions
\box_(g)set_eq_drop:NN
,\(h|v)box_unpack_drop:N
\file_get:nnN
and\file_get:nnNTF
- Experimental functions
\sys_shell_get:nnN
and\sys_shell_get:nnNTF
\char_generate:nn
now always takes exactly two expansions- Move
\prg_generate_conditional_variant:Nnn
to stable - Renamed experimental
\box_trim:Nnnnn
and\box_viewport:Nnnnn
as\box_set_trim:Nnnnn
and\box_set_viewport:Nnnnn
, respectively
\box_(g)set_eq_clear:NN
, replaced by\box_(g)set_eq_drop:NN
\(h|v)box_unpack_clear:N
, replaced by\(h|v)box_unpack_drop:N
\tl_(g)set_from_file(_x):Nnn
, replaced by\file_get:nnN
- Scope treatment of
\box_set_dp:N
, etc. - In (u)platex: detection of spaces in
\tl_rescan:nn
and related functions
- Experimental function family
\tl_(g)set_from_shell:(N|c)nn
(replaced by\sys_shell_get:nnN
)
\ior_map_variable:NNn
and\ior_str_map_variable:NNn
- Unclosed conditional with Unicode engines
- Improved
expl3
loading time with LuaTeX and XeTeX - Improved performance of
\ior_map_inline:Nn
and related functions
- Handling of accented characters under mixed case changing in 8-bit engines (see #514)
\iow_allow_break:
- Correct fp randint with zero argument (see #507)
- Handling of
\current@color
with(x)dvipdfmx
(see #510)
- Support for stand-alone
l3regex
,l3sort
,l3srt
,l3tl-analysis
,l3tl-build
\box_resize:Nnn
\box_use_clear:N
\c_minus_one
\file_add_path:nN
\file_list:
\file_path_include:n
and\file_path_remove:n
\io(r|w)_list_streams:
and\io(r|w)_log_streams:
\sort_ordered:
and\sort_reversed:
\token_new:Nn
- Generation of invalid variants from
n
/N
base types
- Move
\tl_range:nnn
to stable
- Loading in ConTeXt MkIV
- Enable
\char_generate:nn
to create active tokens with XeTeX
- Apply
\par
only at the end of vertical boxes - Move
\int_rand:n
to stable - Move
\<var>_rand_item:N
to stable
- Typo in
\lua_shipout_e:n
(see #503)
- Support for cross-compatibility primitives in XeTeX
\int_sign:n
,\dim_sign:n
and\fp_sign:n
- Wrapping of text in messages, etc., for some line lengths (issue #491)
\g_msg_module_documentation_prop
(see #471)\peek_remove_spaces:n
- Formatting of messages: now follows LaTeX2e closely
\msg_interrupt:nn
,\msg_log:n
and\msg_term:n
- Handling of inheritance for choice keys (issue #483)
- Some driver-level support for PDF features
\peek_catcode_collect_inline:Nn
,\peek_charcode_collect_inline:Nn
,\peek_meaning_collect_inline:Nn
- Handling of unknown keys when inheritance is active (issue #481)
\lua_escape:e
,\lua_now:e
and\lua_shipout_e:n
\str_case_e:nn(TF)
and\str_if_eq:ee(TF)
\sys_if_platform_unix:(TF)
and\sys_if_platform_windows:(TF)
\tl_(g)set_from_shell:Nnn
\lua_escape_x:n
,\lua_now_x:n
and\lua_shipout_x:n
\str_case_x:nn(TF)
and\str_if_eq_x:nn(TF)
- Support for
e
-type argument using\expanded
or macro emulation
CHANGELOG.md
(issue #460)
- Loading
expl3
with LuaTeX/XeTeX and certain letter tokens set to be active (see #462)
- Alter
\char_codepoint_from_bytes:n
to produce four groups in all cases; makef
-type expandable
- Correct date string in
expl3.dtx
- Correct
\c_sys_engine_version_str
when using XeTeX
- Define
\c_zero_int
and\c_one_int
- Implement
\c_sys_engine_version_str
- Implement
\seq_indexed_map_function/inline
- Implement
\intarray_gzero:N
- Implement
\intarray_const_from_clist:Nn
- Implement
\bool_set_inverse:N
- Implement
\bool_xor:nnTF
instead of just\bool_xor_p:nn
- Implement candidate
\int_rand:n
- Implement
\intarray_gset_rand:Nnn
- Implement candidate
l3fparray
module
- Update minimal required versions of XeTeX and LuaTeX
- Deprecate named integer constants
\c_zero
. etc. - Move all primitives to
\tex_...:D namespace
, deprecating older engine-dependent prefixes - Several internal optimisations
- Expand boolean expression before calling
\chardef
(issue #461)
- Remove undocumented
\fp_function:Nw
and\fp_new_function:Npn
- Implement
\tl_analysis_map_inline:nn
- Implement
\exp_args_generate:n
to define new\exp_args:N...
functions - Low-level
\int_value:w
function - New experimental functions for
- Building token lists piecewise
- Fast manipulation of integer arrays
- Sequence shuffling
\seq_set_from_function:NnN
\char_codepoint_to_bytes:n
- Significant internal revision to use only internal functions 'private' to specific modules
- Better documentation of cross-module kernel-internal functions
- Enable
\char_generate:nn
for active chars - Renamed
\tl_show_analysis:(N|n)n
as\tl_analysis_show:(N|n)n
- Change
\int_rand:nn
(and rand_item functions) to better use the RNG - Make prg break functions public
- Make scan marks mechanism public
- Make
\prg_do_nothing:
long rather than nopar (issue #455) - Several performance improvements
- Documentation improvements
- Only index TF, T, F functions together if they are
expl3
functions (issue #453) - Make
\infty
and\pi
into errors in fp expressions (issue #357)
- Deprecated functions expiring at end of 2017
- Old module
.sty
files
- Adjustments to
l3drivers
to supportl3draw
development inl3experimental
bundle
- Tuple support in fp expressions
- Step functions have been added for dim variables,
e.g.
\dim_step_inline:nnnn