summaryrefslogtreecommitdiff
path: root/macros
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-12-10 03:03:07 +0000
committerNorbert Preining <norbert@preining.info>2023-12-10 03:03:07 +0000
commit4d14c5388a9581dee1111261078e6141963ec24f (patch)
tree52553457b5385303c1ce97dcfa6e070ccd0235e7 /macros
parent1bac51c9be71358b55925783e16f3d8bc03d630b (diff)
CTAN sync 202312100303
Diffstat (limited to 'macros')
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md15
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/README.md2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx500
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdfbin961151 -> 967468 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx14
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdfbin704199 -> 704238 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx7
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdfbin606092 -> 606135 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdfbin515694 -> 515546 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdfbin559040 -> 558914 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdfbin542123 -> 542009 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdfbin544422 -> 544276 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdfbin537538 -> 537399 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdfbin594612 -> 594480 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdfbin516740 -> 516613 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdfbin750981 -> 751043 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdfbin566955 -> 566778 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdfbin682850 -> 682685 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx228
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdfbin815060 -> 831131 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdfbin532095 -> 532070 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdfbin427405 -> 427137 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdfbin587741 -> 587463 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdfbin448754 -> 448729 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx11
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdfbin464434 -> 463665 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty2
-rw-r--r--macros/latex/contrib/tutodoc/README.md2
-rw-r--r--macros/latex/contrib/tutodoc/code/tutodoc.sty20
-rw-r--r--macros/latex/contrib/tutodoc/doc/tutodoc-en.pdfbin710329 -> 687653 bytes
-rw-r--r--macros/latex/contrib/tutodoc/doc/tutodoc-en.tex97
-rw-r--r--macros/latex/contrib/tutodoc/doc/tutodoc-fr.pdfbin730016 -> 757927 bytes
-rw-r--r--macros/latex/contrib/tutodoc/doc/tutodoc-fr.tex108
-rw-r--r--macros/luatex/generic/blopentype/README.md4
-rw-r--r--macros/luatex/generic/blopentype/blottest.pdfbin144031 -> 142732 bytes
-rw-r--r--macros/luatex/generic/blopentype/luatex/blot-fonts.lua20
-rw-r--r--macros/luatex/generic/blopentype/luatex/blot.tex107
53 files changed, 786 insertions, 399 deletions
diff --git a/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md b/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md
index c3bc86cfc0..9076adab08 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md
+++ b/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md
@@ -6,6 +6,21 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
this project uses date-based 'snapshot' version identifiers.
## [2023-11-17]
+Version: 2023-12-09, 0.96d
+
+### Removed
+
+ - l3bitset is now provided by l3kernel.
+
+### Added
+ - 2023-11-20: l3pdfmeta.dtx: support for PDF declarations in XMP metadata, issue #58
+ - hyperref-generic.dtx: option nested-links key to suppress nested links.
+
+### Changed
+ - key family in hyperref-generic is now hyp and not hyp/setup
+ - do not use pdfuaid:rev with pdf/UA-1
+
+## [2023-11-17]
Version: 2023-11-17, 0.96c
- remove dependency to ltxcmds in the hyperref driver
diff --git a/macros/latex/contrib/pdfmanagement-testphase/README.md b/macros/latex/contrib/pdfmanagement-testphase/README.md
index 94a0136f3d..e0b527353f 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/README.md
+++ b/macros/latex/contrib/pdfmanagement-testphase/README.md
@@ -1,6 +1,6 @@
# LaTeX PDF management testphase bundle
-Version: 0.96c, 2023-11-17
+Version: 0.96d, 2023-12-09
This package is used during a test phase to load the new PDF management code
of LaTeX.
diff --git a/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty
index 6b86bc4c17..fb44b9e726 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty
+++ b/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty
@@ -24,7 +24,7 @@
%% This file has the LPPL maintenance status "maintained".
%%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesPackage{color-ltx}[2023-11-17 v0.96c
+\ProvidesPackage{color-ltx}[2023-12-09 v0.96d
Standard LaTeX Color (patched for l3color, part of pdfmanagement-testphase, original version 2022/01/06 v1.3d) (DPC)]
\edef\Gin@codes{%
\catcode`\noexpand\^^A\the\catcode`\^^A\relax
diff --git a/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty
index c6f186877a..21609d988b 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty
+++ b/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty
@@ -19,7 +19,7 @@
%
% for those people who are interested.
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
-\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2023-11-17}{0.96c}
+\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2023-12-09}{0.96d}
{temporay patches to for the colorspace package to test pdfresource management ... UF}
% colorspace can define more models, that l3color can't yet handle.
diff --git a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx
index c03d57a7fc..03b931f11d 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx
@@ -82,7 +82,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -615,7 +615,15 @@
% the link type, so the link is for example no longer colored. It also removes the
% implicit grouping of the content.
%
-%
+% \DescribeHypkey{nested-links}%
+%
+% Links are sometimes nested. E.g. if a section heading contains a reference
+% it can lead to nested links in the table of contents or if |\nameref| is used.
+% That is not forbidden and normally work as expected: If the link area overlap
+% normally the inner link is \enquote{on top} and chosen at a click.
+% But it is not always actually wanted, so with the |nested-links| (a boolean key)
+% it is possible to disable such nested links.
+%
% \section{Draftmode}
% pdftex and other engines knows a
% draftmode which can be set with |\pdfdraftmode=1|
@@ -797,7 +805,7 @@
%
%\section{Assorted key descriptions}\label{sec:keydesc}
%The following gives a few details to some keys that are perhaps not
-%completly described in the manual, or are a bit different in this driver.
+%completely described in the manual, or are a bit different in this driver.
%The list is alphabetic.
%
% \DescribeHypkey{bookmarkstype} This key takes as value the extension of a list
@@ -956,7 +964,7 @@
%<@@=hyp>
% \end{macrocode}
% \begin{macrocode}
-\ProvidesFile{hgeneric-testphase.def}[2023-11-17 v0.96c %
+\ProvidesFile{hgeneric-testphase.def}[2023-12-09 v0.96d %
generic Hyperref driver for the LaTeX PDF management testphase bundle]
\RequirePackage{etoolbox} %why?
@@ -1221,15 +1229,15 @@
\cs_set_protected:Npn \hypersetup #1
{
%\kvsetkeys{Hyp} {#1}
- \keys_set:nn { hyp / setup }{ #1 }
+ \keys_set:nn { hyp }{ #1 }
}
% TODO for now unknown keys should only give warnings.
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
unknown .code:n =
{
\msg_warning:nneee { hyp } { unknown-key }
- { hyp~/~setup }{ \l_keys_key_str } { #1 }
+ { hyp }{ \l_keys_key_str } { #1 }
}
}
% \end{macrocode}
@@ -1238,7 +1246,7 @@
% chapters and sections and with \cs{phantomsection}. The following key allows
% to force a specific name for the destination so that it can be used by bookmarks.
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
next-anchor .code:n =
{
@@ -1274,7 +1282,7 @@
,destination .tl_set:N = \l_@@_href_pdf_destination_tl
,pdfremotestartview .code:n =
{
- \keys_set:nn { hyp / setup }
+ \keys_set:nn { hyp }
{ pdfremotestartview = #1 }
}
,page .code:n =
@@ -1293,7 +1301,7 @@
{
\pdfdict_put:nnn{l_hyp/annot/A}{Next}{#1}
\tl_set:Nn \Hy@href@nextactionraw {/Next~#1}
- \keys_set:nn {hyp / setup }{ pdfnewwindow = true}
+ \keys_set:nn {hyp }{ pdfnewwindow = true}
}
}
,afrelationship .code:n =
@@ -1304,7 +1312,7 @@
}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,href / urlencode .bool_set:N = \l_@@_href_url_encode_bool
,href / urlencode .default:n = {true}
@@ -1467,7 +1475,7 @@
\hook_new:n{hyp/link/cite}
%\color_set:nnn {hyp/color/cite}{HTML}{2E7E2A}
%\color_set:nn {hyp/color/citeborder}{hyp/color/cite!60!white}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,citecolor .code:n = {\@@_color_set:ne {hyp/color/cite}{#1}\@@_citecolor_hook_init:}
,citebordercolor
@@ -1477,7 +1485,7 @@
{
\hook_gput_code:nnn { hyp/link/cite }{hyp/cite}
{
- \keys_set:nn { hyp / setup }
+ \keys_set:nn { hyp }
{
linkcolor = hyp/color/cite
}
@@ -1488,7 +1496,7 @@
{
\hook_gput_code:nnn { hyp/link/cite }{hyp/citeborder}
{
- \keys_set:nn { hyp / setup }
+ \keys_set:nn { hyp }
{
linkbordercolor = hyp/color/citeborder
}
@@ -1972,7 +1980,7 @@
}
% \end{macrocode}
% \end{macro}
-% \section {Core Hyperref Commands}
+% \section{Core Hyperref Commands}
% Every \pkg{hyperref} has to define eight core command:
% \begin{verbatim}
% \hyper@anchor
@@ -1987,7 +1995,46 @@
%
% This driver defines for consistency also
% |\hyper@linklaunch| for Launch and |\hyper@linknamed| for Named.
+%
+% \subsection{Link level}
+% Links can be nested. Inner links need perhaps special handling, e.g.
+% to deactivate the link, or to change the border, or in the case of
+% tagging to add some additional structure to handle the parent-child rules.
+% We therefore add a global counter which is increased at the begin of
+% link and decreased at the end.
+% \begin{macro}{g_@@_linknestlevel_int}
+% \begin{macrocode}
+\int_new:N \g_@@_linknestlevel_int
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\prg_new_conditional:Npnn \@@_if_outer_link: {TF}
+ {
+ \int_compare:nNnTF { \g_@@_linknestlevel_int } > {1}
+ { \prg_return_false: }
+ { \prg_return_true: }
+ }
+% \end{macrocode}
+
+% \begin{macrocode}
+\cs_new:Npn \@@_check_link_nesting:TF #1 #2
+ {
+ \use_i:nn {#1}{#2}
+ }
+% \end{macrocode}
%
+% \begin{macrocode}
+\keys_define:nn { hyp }
+ {
+ nested-links .choice:,
+ nested-links / true .code:n =
+ { \cs_set_eq:NN \@@_check_link_nesting:TF \use_i:nn },
+ nested-links / false .code:n =
+ { \cs_set_eq:NN \@@_check_link_nesting:TF \@@_if_outer_link:TF },
+ nested-links .default:n = {true}
+ }
+% \end{macrocode}
% \subsection{ Anchors / destinations}
% The first three commands are needed for \enquote{anchors}. At first
% the internal commands to create a destination. It uses
@@ -2157,27 +2204,41 @@
{
\bool_if:NTF \l_@@_annot_GoTo_bool
{
- \Hy@VerboseLinkStart{#1}{#2}
- \group_begin:
- \tl_set:Nn \l_hyp_current_dest_name_tl {#2}
- \hook_use:n {hyp/link/#1}
- \@@_link_goto_begin:nw {#2}#3\Hy@xspace@end
- \@@_link_goto_end:
- \group_end:
- \Hy@VerboseLinkStop
+ \int_gincr:N\g_@@_linknestlevel_int
+ \@@_check_link_nesting:TF
+ {
+ \Hy@VerboseLinkStart{#1}{#2}
+ \group_begin:
+ \tl_set:Nn \l_hyp_current_dest_name_tl {#2}
+ \hook_use:n {hyp/link/#1}
+ \@@_link_goto_begin:nw {#2}#3\Hy@xspace@end
+ \@@_link_goto_end:
+ \group_end:
+ \Hy@VerboseLinkStop
+ }
+ {
+ \group_begin: #3\group_end:
+ }
+ \int_gdecr:N\g_@@_linknestlevel_int
}
{{\let\protect\relax#3}}
}
-
\cs_new_protected:Npn \hyper@linkstart #1 #2 %#1 context, #2=destination name
{
\bool_if:NT \l_@@_annot_GoTo_bool
{
- \Hy@VerboseLinkStart{#1}{#2}% only for debug
- \group_begin:
- \tl_set:Nn \l_hyp_current_dest_name_tl {#2}
- \hook_use:n {hyp/link/#1}
- \@@_link_goto_begin:nw {#2}
+ \int_gincr:N\g_@@_linknestlevel_int
+ \@@_check_link_nesting:TF
+ {
+ \Hy@VerboseLinkStart{#1}{#2}% only for debug
+ \group_begin:
+ \tl_set:Nn \l_hyp_current_dest_name_tl {#2}
+ \hook_use:n {hyp/link/#1}
+ \@@_link_goto_begin:nw {#2}
+ }
+ {
+ \group_begin:
+ }
}
}
@@ -2185,9 +2246,16 @@
{
\bool_if:NT \l_@@_annot_GoTo_bool
{
- \@@_link_goto_end:
- \group_end:
- \Hy@VerboseLinkStop
+ \@@_check_link_nesting:TF
+ {
+ \@@_link_goto_end:
+ \group_end:
+ \Hy@VerboseLinkStop
+ }
+ {
+ \group_end:
+ }
+ \int_gdecr:N\g_@@_linknestlevel_int
}
}
% \end{macrocode}
@@ -2203,31 +2271,39 @@
{
\bool_if:NTF \l_@@_annot_URI_bool
{
- \group_begin:
- \@@_text_pdfstring:eoN
- { #2}
- { \l_@@_text_enc_uri_print_tl }
- \l_@@_uri_tmpa_tl
- \pdfdict_put:nno{l_hyp/annot/A/URI}{URI}{\l_@@_uri_tmpa_tl}
- \bool_if:NT \l_@@_href_url_ismap_bool
- {
- \pdfdict_put:nnn{l_hyp/annot/A/URI}{IsMap}{true}
- }
- \cs_set_eq:NN \# \c_hash_str
- \cs_set_eq:NN \% \c_percent_str
- \Hy@safe@activestrue
- \mode_leave_vertical:
- \pdfannot_dict_put:nne {link/URI}{A}{<<\pdfdict_use:n {l_hyp/annot/A/URI}>>}
- \pdfannot_link:nen { URI }
- {
- }
+ \int_gincr:N\g_@@_linknestlevel_int
+ \@@_check_link_nesting:TF
+ {
+ \group_begin:
+ \@@_text_pdfstring:eoN
+ { #2}
+ { \l_@@_text_enc_uri_print_tl }
+ \l_@@_uri_tmpa_tl
+ \pdfdict_put:nno{l_hyp/annot/A/URI}{URI}{\l_@@_uri_tmpa_tl}
+ \bool_if:NT \l_@@_href_url_ismap_bool
+ {
+ \pdfdict_put:nnn{l_hyp/annot/A/URI}{IsMap}{true}
+ }
+ \cs_set_eq:NN \# \c_hash_str
+ \cs_set_eq:NN \% \c_percent_str
+ \Hy@safe@activestrue
+ \mode_leave_vertical:
+ \pdfannot_dict_put:nne {link/URI}{A}{<<\pdfdict_use:n {l_hyp/annot/A/URI}>>}
+ \pdfannot_link:nen { URI }
+ {
+ }
+ {
+ \let\protect\relax
+ #1
+ \Hy@xspace@end
+ \Hy@VerboseLinkStop %where is the start??
+ }
+ \group_end:
+ }
{
- \let\protect\relax
- #1
- \Hy@xspace@end
- \Hy@VerboseLinkStop %where is the start??
+ \group_begin: #1 \group_end:
}
- \group_end:
+ \int_gdecr:N\g_@@_linknestlevel_int
}
{{\let\protect\relax#1}}
}
@@ -2244,57 +2320,65 @@
{
\bool_if:NTF \l_@@_annot_GoToR_bool
{
- \group_begin:
- \tl_set:Ne \l_@@_filename_tmpa_tl { \text_expand:n { #2 } }
- \exp_args:Ne
- \pdf_object_if_exist:nF { @@_file_\tl_to_str:N \l_@@_filename_tmpa_tl }
- {
- \pdfdict_put:nne { l_pdffile/Filespec}{Subtype}{\pdf_name_from_unicode_e:n {application/pdf}}
- \pdffile_embed_file:noe
- {}
- {\l_@@_filename_tmpa_tl }
- {@@_file_\tl_to_str:N \l_@@_filename_tmpa_tl }
- }
- \pdfdict_put:nne
- {l_hyp/annot/A/GoToR}
- {F}
- {\pdf_object_ref:e {@@_file_\tl_to_str:N \l_@@_filename_tmpa_tl}}
- \@@_text_pdfstring:nnN
- { #3 }
- { \l_@@_text_enc_dest_print_tl }
- \l_@@_dest_name_tmpa_tl
- \tl_if_blank:eTF {#3}
+ \int_gincr:N\g_@@_linknestlevel_int
+ \@@_check_link_nesting:TF
{
- \pdfdict_put:nne {l_hyp/annot/A/GoToR}{D}
+ \group_begin:
+ \tl_set:Ne \l_@@_filename_tmpa_tl { \text_expand:n { #2 } }
+ \exp_args:Ne
+ \pdf_object_if_exist:nF { @@_file_\tl_to_str:N \l_@@_filename_tmpa_tl }
+ {
+ \pdfdict_put:nne { l_pdffile/Filespec}{Subtype}{\pdf_name_from_unicode_e:n {application/pdf}}
+ \pdffile_embed_file:noe
+ {}
+ {\l_@@_filename_tmpa_tl }
+ {@@_file_\tl_to_str:N \l_@@_filename_tmpa_tl }
+ }
+ \pdfdict_put:nne
+ {l_hyp/annot/A/GoToR}
+ {F}
+ {\pdf_object_ref:e {@@_file_\tl_to_str:N \l_@@_filename_tmpa_tl}}
+ \@@_text_pdfstring:nnN
+ { #3 }
+ { \l_@@_text_enc_dest_print_tl }
+ \l_@@_dest_name_tmpa_tl
+ \tl_if_blank:eTF {#3}
{
- [
- \int_eval:n
- { \int_max:nn {0}{ 0\l_@@_href_pdf_page_tl - 1 }}
- /\l_@@_dest_pdfremotestartview_tl
- ]
+ \pdfdict_put:nne {l_hyp/annot/A/GoToR}{D}
+ {
+ [
+ \int_eval:n
+ { \int_max:nn {0}{ 0\l_@@_href_pdf_page_tl - 1 }}
+ /\l_@@_dest_pdfremotestartview_tl
+ ]
+ }
}
- }
- {
- \pdfdict_put:nno {l_hyp/annot/A/GoToR}{D}{\l_@@_dest_name_tmpa_tl}
- }
- \mode_leave_vertical:
+ {
+ \pdfdict_put:nno {l_hyp/annot/A/GoToR}{D}{\l_@@_dest_name_tmpa_tl}
+ }
+ \mode_leave_vertical:
% \end{macrocode}
% We use an extra object here, as ghostscript doesn't like the
% object reference in the dict
% \url{https://chat.stackexchange.com/transcript/message/57361080#57361080}
% \begin{macrocode}
- \pdf_object_unnamed_write:ne{dict}{\pdfdict_use:n {l_hyp/annot/A/GoToR}}
- \pdfannot_dict_put:nne {link/GoToR}{A}{\pdf_object_ref_last:}
- \pdfannot_link:nnn %expansion??
- { GoToR }
- {
- }
+ \pdf_object_unnamed_write:ne{dict}{\pdfdict_use:n {l_hyp/annot/A/GoToR}}
+ \pdfannot_dict_put:nne {link/GoToR}{A}{\pdf_object_ref_last:}
+ \pdfannot_link:nnn %expansion??
+ { GoToR }
+ {
+ }
+ {
+ \let\protect\relax
+ #1\Hy@xspace@end
+ \Hy@VerboseLinkStop %where is the start??
+ }
+ \group_end:
+ }
{
- \let\protect\relax
- #1\Hy@xspace@end
- \Hy@VerboseLinkStop %where is the start??
+ \group_begin: #1 \group_end:
}
- \group_end:
+ \int_gdecr:N\g_@@_linknestlevel_int
}
{{\let\protect\relax#1}}
}
@@ -2312,47 +2396,53 @@
{
\bool_if:NTF \l_@@_annot_Launch_bool
{
- \group_begin:
- \@@_text_pdfstring:nnN
- { #1 }
- { \l_@@_text_enc_file_print_tl }
- \l_@@_filename_tmpa_tl
- \pdfdict_put:nno {l_hyp/annot/A/Launch}{F}{\l_@@_filename_tmpa_tl}
- \@@_text_pdfstring:noN
- { #3 }
- { \l_@@_text_enc_para_print_tl }
- \l_@@_para_tmpa_tl
- \bool_if:nTF
- {
- \str_if_eq_p:Vn \l_@@_para_tmpa_tl {()}
- ||
- \pdf_version_compare_p:Nn > {1.9}
- }
- {
- \pdfdict_remove:nn {l_hyp/annot/A/Launch}{Win}
- }
- {
- \pdfdict_put:nne
- {l_hyp/annot/A/Launch}
- {Win}
- {<</P \l_@@_para_tmpa_tl /F \l_@@_filename_tmpa_tl >>}
- }
- \mode_leave_vertical:
- \pdfannot_dict_put:nne {link/Launch}{A}{<<\pdfdict_use:n {l_hyp/annot/A/Launch}>>}
- \pdfannot_link:nen
- { Launch }
- {
- % /A
-% <<
-% \pdfdict_use:n {l_hyp/annot/A/Launch}
-% >>
- }
- {
- \let\protect\relax
- #2\Hy@xspace@end
- \Hy@VerboseLinkStop %where is the start??
- }
- \group_end:
+ \int_gincr:N\g_@@_linknestlevel_int
+ \@@_check_link_nesting:TF
+ {
+ \group_begin:
+ \@@_text_pdfstring:nnN
+ { #1 }
+ { \l_@@_text_enc_file_print_tl }
+ \l_@@_filename_tmpa_tl
+ \pdfdict_put:nno {l_hyp/annot/A/Launch}{F}{\l_@@_filename_tmpa_tl}
+ \@@_text_pdfstring:noN
+ { #3 }
+ { \l_@@_text_enc_para_print_tl }
+ \l_@@_para_tmpa_tl
+ \bool_if:nTF
+ {
+ \str_if_eq_p:Vn \l_@@_para_tmpa_tl {()}
+ ||
+ \pdf_version_compare_p:Nn > {1.9}
+ }
+ {
+ \pdfdict_remove:nn {l_hyp/annot/A/Launch}{Win}
+ }
+ {
+ \pdfdict_put:nne
+ {l_hyp/annot/A/Launch}
+ {Win}
+ {<</P \l_@@_para_tmpa_tl /F \l_@@_filename_tmpa_tl >>}
+ }
+ \mode_leave_vertical:
+ \pdfannot_dict_put:nne {link/Launch}{A}{<<\pdfdict_use:n {l_hyp/annot/A/Launch}>>}
+ \pdfannot_link:nen
+ { Launch }
+ {
+ % /A
+ % <<
+ % \pdfdict_use:n {l_hyp/annot/A/Launch}
+ % >>
+ }
+ {
+ \let\protect\relax
+ #2\Hy@xspace@end
+ \Hy@VerboseLinkStop %where is the start??
+ }
+ \group_end:
+ }
+ { \group_begin: #2 \group_end: }
+ \int_gdecr:N\g_@@_linknestlevel_int
}
{{\let\protect\relax#2}}
}
@@ -2380,31 +2470,37 @@
{
\bool_if:NTF \l_@@_annot_Named_bool
{
- \group_begin:
- \pdfmeta_standard_verify:nnTF {named_actions}{#1}
- {
- \mode_leave_vertical:
- \pdfdict_put:nne {l_hyp/annot/A/Named}{N}
- {\pdf_name_from_unicode_e:n{#1}}
- \pdfannot_dict_put:nne {link/Named}{A}{<<\pdfdict_use:n {l_hyp/annot/A/Named}>>}
- \pdfannot_link:nnn { Named }
+ \int_gincr:N\g_@@_linknestlevel_int
+ \@@_check_link_nesting:TF
+ {
+ \group_begin:
+ \pdfmeta_standard_verify:nnTF {named_actions}{#1}
{
-% /A
-% <<
-% \pdfdict_use:n { l_hyp/annot/A/Named }
-% >>
+ \mode_leave_vertical:
+ \pdfdict_put:nne {l_hyp/annot/A/Named}{N}
+ {\pdf_name_from_unicode_e:n{#1}}
+ \pdfannot_dict_put:nne {link/Named}{A}{<<\pdfdict_use:n {l_hyp/annot/A/Named}>>}
+ \pdfannot_link:nnn { Named }
+ {
+ % /A
+ % <<
+ % \pdfdict_use:n { l_hyp/annot/A/Named }
+ % >>
+ }
+ {
+ #2
+ \Hy@xspace@end
+ \Hy@VerboseLinkStop
+ }
}
{
+ \msg_warning:nnn { hyp } { pdfa-no-named-action }{#1}
#2
- \Hy@xspace@end
- \Hy@VerboseLinkStop
}
- }
- {
- \msg_warning:nnn { hyp } { pdfa-no-named-action }{#1}
- #2
- }
- \group_end:
+ \group_end:
+ }
+ { \group_begin: #2 \group_end: }
+ \int_gdecr:N\g_@@_linknestlevel_int
}
{{\let\protect\relax#2}}
}
@@ -2517,7 +2613,7 @@
% \begin{hypkey}{colorlinks}
% This key also resets the border and borderstyle.
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,colorlinks .meta:n =
{
@@ -2539,14 +2635,14 @@
% \begin{macrocode}
\seq_map_inline:Nn \c_@@_annot_types_seq
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
,color#1 .bool_set:c = { l_hyp_annot_color#1_bool }
,#1color .code:n = { \@@_color_set:ne {hyp/color/#1}{##1} }
}
}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,allcolors .meta:n =
{
@@ -2568,7 +2664,7 @@
% or cmyk (unusual). This can be set with the |bordercolormodel| key:
%\begin{hypkey}{bordercolormodel}
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,bordercolormodel .choices:nn =
{rgb,cmyk}
@@ -2580,7 +2676,7 @@
% \begin{macrocode}
\prop_map_inline:Nn \c_@@_map_hyp_annot_prop
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
#1bordercolor .code:n =
{
@@ -2605,7 +2701,7 @@
}
}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,allbordercolors .meta:n =
{
@@ -2625,7 +2721,7 @@
% \begin{macrocode}
\prop_map_inline:Nn \c_@@_map_hyp_annot_prop
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
#1border .code:n =
{
@@ -2644,7 +2740,7 @@
}
}
}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,pdfborder .code:n =
{
@@ -2678,7 +2774,7 @@
% \begin{macrocode}
\prop_map_inline:Nn \c_@@_map_hyp_annot_prop
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
#1borderstyle .code:n =
{
@@ -2697,7 +2793,7 @@
}
}
}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,pdfborderstyle .code:n =
{
@@ -2850,7 +2946,7 @@
{ \pdf_version_compare_p:Nn > {1.4} }
{ \str_if_eq_p:ee{\pdf_version_major:}{-1} }
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
,_ocgcolorlinks .meta:n =
{
@@ -2864,7 +2960,7 @@
}
}
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
,_ocgcolorlinks .code:n =
{
@@ -2876,7 +2972,7 @@
}
}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,ocgcolorlinks .choice:
,ocgcolorlinks / true .meta:n =
@@ -2899,13 +2995,13 @@
{ \pdf_version_compare_p:Nn > {1.4} }
{ \str_if_eq_p:ee{\pdf_version_major:}{-1} }
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
,ocgcolor#1 .bool_set:c = { l_hyp_annot_ocgcolor#1_bool }
}
}
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
,ocgcolor#1 .code:n=
{
@@ -2925,7 +3021,7 @@
% \begin{macrocode}
\prop_map_inline:Nn \c_@@_map_hyp_annot_prop
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
,#1highlight .choices:nn =
{ /I, /N, /O, /P}
@@ -2954,7 +3050,7 @@
}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,pdfhighlight .choices:nn =
{ /I, /N, /O, /P}
@@ -2991,7 +3087,7 @@
% This key disable all appearance keys. The link themselves are still there.
% \begin{hypkey}{hidelinks,hidelink,hideurl,hidefile,hiderun,hidemenu}
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
hidelinks .meta:n =
{
@@ -3004,7 +3100,7 @@
\seq_map_inline:Nn \c_@@_annot_types_seq
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
hide#1 .meta:n =
{
@@ -3021,20 +3117,20 @@
% This define the key for the color schemes and sets the default colors.
% \begin{hypkey}{colorscheme}
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
colorscheme .code:n =
{
\prop_map_inline:cn { c_@@_colorscheme_#1_prop }
{
- \keys_set:nn { hyp /setup }
+ \keys_set:nn { hyp }
{
##1 = ##2
}
}
}
}
-\keys_set:nn { hyp / setup } {colorscheme=phelype}
+\keys_set:nn { hyp } {colorscheme=phelype}
% \end{macrocode}
% \end{hypkey}
%
@@ -3044,7 +3140,7 @@
% The following are ignored (with or without warnings)
% \begin{hypkey}{unicode,pdfencoding,pdfversion}
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,unicode .code:n = {}
,pdfencoding .code:n = {}
@@ -3062,12 +3158,12 @@
%
% \begin{hypkey}{verbose,debug,draft,final}
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,verbose .legacy_if_set:n = {Hy@verbose}
,debug .legacy_if_set:n = {Hy@verbose}
}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,draft .code:n =
{
@@ -3086,7 +3182,7 @@
% pageanchor,linktoc,linktocpage,plainpages,localanchorname,
% linkfileprefix}
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,extension .tl_set:N = \XR@ext
,extension .initial:n= pdf
@@ -3098,7 +3194,7 @@
,plainpages .legacy_if_set:n = {Hy@plainpages}
}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,linktoc .choices:nn = { none, section, all, page }
{
@@ -3124,7 +3220,7 @@
% \begin{macrocode}
\prop_map_inline:Nn \c_@@_map_hyp_annot_prop
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
,#1 .bool_set:c = {l_@@_annot_#2_bool}
}
@@ -3133,7 +3229,7 @@
% \end{hypkey}
%
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,baseurl .code:n =
{
@@ -3691,7 +3787,7 @@
% \begin{hypkey}{pdfview}
% Destination keys. pdfview is a bit more complicated so extra.
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,pdfview .code:n =
{
@@ -3781,7 +3877,7 @@
% \begin{hypkey}{pdflang}
% |pdflang| should be deprecated.
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,pdflang .code:n =
{
@@ -3807,7 +3903,7 @@
\regex_set:Nn\l_@@_optlang_regex {\A\[([A-Za-z\-]+)\](.*)}
\cs_new_protected:Npn \@@_setup_info_key:nn #1 #2
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
pdf#1 .code:n =
{
@@ -3894,7 +3990,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_setup_info_date_key:nn #1 #2
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
pdf#1 .code:n =
{
@@ -3927,7 +4023,7 @@
\@@_setup_info_date_key:nn {creationdate} {CreationDate}
\@@_setup_info_date_key:nn {moddate} {ModDate}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
pdfmetadate .code:n = { \@@_store_metadata:nn {pdfmetadate}{#1} }
}
@@ -3936,12 +4032,12 @@
% \begin{hypkey}{pdftrapped}
% Trapped is a bit curious, it has an value "unknown", and one can't suppress it ...
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
,pdftrapped .code:n =
{
\exp_args:Nne
- \keys_set:nn { hyp / setup } { _pdftrapped = \str_uppercase:n { #1 } }
+ \keys_set:nn { hyp } { _pdftrapped = \str_uppercase:n { #1 } }
}
,_pdftrapped .choices:nn = {TRUE,FALSE,UNKNOWN}
{
@@ -3969,7 +4065,7 @@
% \begin{hypkey}{pdfinfo}
% pdfinfo allows to set the info keys with keyval ...
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
pdfinfo .code:n =
{
@@ -3980,10 +4076,10 @@
% \end{hypkey}
% Now we set some default values
% \begin{macrocode}
-\keys_set:nn { hyp / setup} {pdfcreator = LaTeX~with~hyperref}
-\keys_set:nn { hyp / setup} {pdfauthor = }
-\keys_set:nn { hyp / setup} {pdftitle = }
-\keys_set:nn { hyp / setup} {pdfsubject = }
+\keys_set:nn { hyp} {pdfcreator = LaTeX~with~hyperref}
+\keys_set:nn { hyp} {pdfauthor = }
+\keys_set:nn { hyp} {pdftitle = }
+\keys_set:nn { hyp} {pdfsubject = }
% \end{macrocode}
%
% \subsection{hyperxmp keys}
@@ -4032,7 +4128,7 @@
,pdfdate
}
{
- \keys_define:nn { hyp / setup }
+ \keys_define:nn { hyp }
{
#1 .code:n= { \@@_store_metadata:nn {#1}{##1}}
}
@@ -4043,7 +4139,7 @@
% \subsection{Transitions}
% pdfpageduration sets the duration a page is shown in full screen mode.
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
pdfpageduration .code:n =
{
@@ -4088,7 +4184,7 @@
% opaque & true or false, only relevant for Fly style
% \end{tabular}
% \begin{macrocode}
-\keys_define:nn { hyp / setup }
+\keys_define:nn { hyp }
{
pdfpagetransition .code:n =
{
@@ -4180,7 +4276,7 @@
%
% Finally we process the package option list, to get most keys working
% \begin{macrocode}
-\keys_set_known:nv{hyp/setup}{opt@hyperref.sty}
+\keys_set_known:nv{ hyp }{opt@hyperref.sty}
% \end{macrocode}
%
% Unfinished
diff --git a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf
index 9318d060f9..f5d853b7e4 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx
index 37e47d5c91..03e50367f2 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx
@@ -45,7 +45,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
%
@@ -56,27 +56,27 @@
% \begin{macrocode}
%<drivers>\ProvidesExplFile
%<*dvipdfmx>
- {l3backend-testphase-dvipdfmx.def}{2023-11-17}{}
+ {l3backend-testphase-dvipdfmx.def}{2023-12-09}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: dvipdfmx}
%</dvipdfmx>
%<*dvips>
- {l3backend-testphase-dvips.def}{2023-11-17}{}
+ {l3backend-testphase-dvips.def}{2023-12-09}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: dvips}
%</dvips>
%<*dvisvgm>
- {l3backend-testphase-dvisvgm.def}{2023-11-17}{}
+ {l3backend-testphase-dvisvgm.def}{2023-12-09}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: dvisvgm}
%</dvisvgm>
%<*luatex>
- {l3backend-testphase-luatex.def}{2023-11-17}{}
+ {l3backend-testphase-luatex.def}{2023-12-09}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (LuaTeX)}
%</luatex>
%<*pdftex>
- {l3backend-testphase-pdftex.def}{2023-11-17}{}
+ {l3backend-testphase-pdftex.def}{2023-12-09}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (pdfTeX)}
%</pdftex>
%<*xdvipdfmx>
- {l3backend-testphase-xetex.def}{2023-11-17}{}
+ {l3backend-testphase-xetex.def}{2023-12-09}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: XeTeX}
%</xdvipdfmx>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf
index 3c292b8dfa..da62220855 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx
index 4c0942ad72..dfb1f12e75 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx
@@ -48,7 +48,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -432,7 +432,7 @@
% \begin{macrocode}
%<@@=pdfannot>
%<*header>
-\ProvidesExplPackage{l3pdfannot}{2023-11-17}{0.96c}
+\ProvidesExplPackage{l3pdfannot}{2023-12-09}{0.96d}
{PDF-annotations}
\RequirePackage{l3pdfdict}
%</header>
@@ -441,7 +441,8 @@
% bitset for it.
% \begin{macrocode}
%<*package>
-\RequirePackage{l3bitset}
+\cs_if_exist:NF \bitset_new:Nn
+ { \RequirePackage { l3bitset } }
\bitset_new:Nn \l_pdfannot_F_bitset
{
Invisible = 1,
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf
index 8db999acd8..a3b40dbcd2 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx
index abb1d33936..d1007322fa 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -208,7 +208,7 @@
% \begin{macrocode}
%<@@=pdfdict>
%<*header>
-\ProvidesExplPackage{l3pdfdict}{2023-11-17}{0.96c}
+\ProvidesExplPackage{l3pdfdict}{2023-12-09}{0.96d}
{Tools for PDF dictionaries (LaTeX PDF management testphase bundle)}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf
index c488bc77bf..ae30760b1b 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx
index b4d535bfc2..ef7f1a5c4c 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf
index 1ad47b14fb..1d2dfa5a9a 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx
index dfbf0c3af3..6e6f5fe007 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx
@@ -64,7 +64,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf
index e0f6b1fc9a..5daeeaf118 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx
index c94891b733..ae2cdec29d 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf
index 80cb55d643..1ab858899c 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx
index fb7b913a76..cf0153732e 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx
@@ -55,7 +55,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf
index c9b9cd1aef..b455ede38e 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx
index e951990650..2f9ce890c5 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx
@@ -83,7 +83,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf
index b66ff7f3cb..bfe906ca9d 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx
index 7922c659a7..15fe26a805 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf
index 3d40a66eee..428b07121c 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx
index 59275311f4..28ce09312c 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx
@@ -69,7 +69,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -972,7 +972,7 @@
%<*package>
%<@@=pdffield>
\NeedsTeXFormat{LaTeX2e}
-\ProvidesExplPackage{l3pdffield-testphase}{2023-11-17}{0.96c}%
+\ProvidesExplPackage{l3pdffield-testphase}{2023-12-09}{0.96d}%
{form fields}
% \end{macrocode}
% \subsection{hyperref specific command}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf
index e4171c07e0..8a91d85118 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx
index 5a11d41e7e..01d247b7e7 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -398,7 +398,7 @@
%
% \begin{macrocode}
%<*header>
-\ProvidesExplPackage{l3pdffile}{2023-11-17}{0.96c}
+\ProvidesExplPackage{l3pdffile}{2023-12-09}{0.96d}
{embedding and referencing files in PDF---LaTeX PDF management testphase bundle}
\RequirePackage{l3pdftools} %temporarly!!
%</header>
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf
index cc338aff79..35940f20fd 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx
index 88704f2e51..2a7ce89481 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx
@@ -57,7 +57,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -632,7 +632,7 @@
%<@@=pdfmanagement>
%<*header>
%
-\ProvidesExplPackage{l3pdfmanagement}{2023-11-17}{0.96c}
+\ProvidesExplPackage{l3pdfmanagement}{2023-12-09}{0.96d}
{Management of core PDF dictionaries (LaTeX PDF management testphase bundle)}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf
index 9ddc2d15a7..4e704567e9 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx
index 6d6b19b2de..720669e237 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -458,6 +458,33 @@
% It is up to the author to ensure and validate
% that the document actually follows the standard.
%
+% \subsubsection{Declarations}
+% PDF knows beside standards also a more generic method to declare conformance
+% to some specification by adding a declaration,
+% see \url{https://pdfa.org/wp-content/uploads/2019/09/PDF-Declarations.pdf}).
+% Such declarations can be added as a simple url which identify the specification or
+% with additional details regarding date and credentials. An example would be
+%
+% \begin{verbatim}
+% \DocumentMetadata{}
+% \documentclass{article}
+% \ExplSyntaxOn
+% \pdfmeta_xmp_add_declaration:e {https://pdfa.org/declarations\c_hash_str iso32005}
+% \pdfmeta_xmp_add_declaration:ennnn
+% {https://pdfa.org/declarations\c_hash_str wcag21A}{}{2023-11-20}{}{}
+% \pdfmeta_xmp_add_declaration:nnnnn
+% {https://github.com/TikZlings/no-duck-harmed}
+% {Ulrike~Fischer}{2023-11-20}{Bär}{https://github.com/u-fischer/bearwear}
+% \pdfmeta_xmp_add_declaration:nnnnn
+% {https://github.com/TikZlings/no-duck-harmed}
+% {Ulrike~Fischer}{2023-11-20}{Paulo}{https://github.com/cereda/sillypage}
+% \ExplSyntaxOff
+% \begin{document}
+% text
+% \end{document}
+%
+% \end{verbatim}
+%
% \subsubsection{Dates}
% \begin{itemize}
% \item
@@ -557,6 +584,31 @@
% With this command a xmlns name space can be added.
% \end{function}
%
+% With the two following commands PDF declarations can be added to the XMP metadata
+% (see \url{https://pdfa.org/wp-content/uploads/2019/09/PDF-Declarations.pdf}).
+% \begin{function}{\pdfmeta_xmp_add_declaration:n,\pdfmeta_xmp_add_declaration:e}
+% \begin{syntax}
+% \cs{pdfmeta_xmp_add_declaration:n}\Arg{uri}
+% \end{syntax}
+% This add a PDF declaration with the required |conformsTo| property to the XMP metadata.
+% \meta{uri} should not be empty and is a URI specifying
+% the standard or profile referred to by the PDF
+% Declaration. If the uri contains a hash, use \cs{c_hash_str} to excape it
+% and use the \texttt{e} variant to expand it.
+% \end{function}
+%
+% \begin{function}{\pdfmeta_xmp_add_declaration:nnnnn,\pdfmeta_xmp_add_declaration:ennnn}
+% \begin{syntax}
+% \cs{pdfmeta_xmp_add_declaration:nnnnn}\Arg{uri}\Arg{By}\Arg{Date}\Arg{Credentials}\Arg{Report}
+% \end{syntax}
+% This add a PDF declaration to the XMP metadata similar
+% to \cs{pdfmeta_xmp_add_declaration:n}.
+% With \meta{By}, \meta{Date}, \meta{Credentials}, \meta{Report} the optional
+% fields |claimBy| (text), |claimDate| (iso date), |claimCredentials| (text) and
+% |claimReport| (uri) of the |claimData| property can be given.
+% If \cs{pdfmeta_xmp_add_declaration:nnnnn} is used twice with the same \meta{uri}
+% argument the |claimData| are concatenated. There is no check if the |claimData| are identical.
+% \end{function}
% \end{documentation}
%
% \begin{implementation}
@@ -566,7 +618,7 @@
% \begin{macrocode}
%<@@=pdfmeta>
%<*header>
-\ProvidesExplPackage{l3pdfmeta}{2023-11-17}{0.96c}
+\ProvidesExplPackage{l3pdfmeta}{2023-12-09}{0.96d}
{PDF-Standards---LaTeX PDF management testphase bundle}
%</header>
% \end{macrocode}
@@ -1217,7 +1269,7 @@
{\AddToDocumentProperties [document]{pdfstandard-X}{PDF/X-6p}},
_pdfstandard / UA-1 .code:n =
{
- \AddToDocumentProperties [document]{pdfstandard-UA}{{1}{2016}}
+ \AddToDocumentProperties [document]{pdfstandard-UA}{{1}{}}
},
_pdfstandard / UA-2 .code:n =
{\AddToDocumentProperties [document]{pdfstandard-UA}{{2}{2023}}},
@@ -1735,6 +1787,7 @@
\@@_xmp_build_pdf:
\@@_xmp_build_xmpRights:
\@@_xmp_build_standards: %pdfaid,pdfxid,pdfuaid
+ \@@_xmp_build_pdfd:
\@@_xmp_build_dc:
\@@_xmp_build_photoshop:
\@@_xmp_build_xmp:
@@ -2129,6 +2182,84 @@
}
% \end{macrocode}
% \item[jav]: currently ignored
+%
+% \item[declarations] The PDF Declarations mechanism allows creation and
+% editing software to declare, via a PDF Declaration, a PDF file to be in
+% conformance with a 3rd party specification or profile
+% that may not be related to PDF technology. Their specification is for example
+% described in \url{https://pdfa.org/wp-content/uploads/2019/09/PDF-Declarations.pdf}.
+%
+% If declarations are added to the XMP-metadata they need (for pdf/A compliancy) a
+% schema declaration. We do not add it by default but define here a command to enable
+% it. (This can be done in the document preamble as xmp is built only at the end.)
+%
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_xmp_schema_enable_pdfd:
+ {
+ \@@_xmp_xmlns_new:ne {pdfd}{http://pdfa.org/declarations/}
+ \@@_xmp_schema_new:nnn
+ {PDF~Declarations~Schema}
+ {pdfd}
+ {http://pdfa.org/declarations/}
+ \@@_xmp_property_new:nnnnn
+ {pdfd}
+ {declarations}
+ {Bag~declaration}
+ {external}
+ {An~unordered~array~of~PDF~Declaration~entries,~where~each~PDF~Declaration~representing~a~statement~of~conformance~with~ an~identified~external~standard~or~profile,~along~with~optional~information~identifying~the~nature~of~the~claim.}
+% \end{macrocode}
+% the values are complicated so we use the additions: method to add them.
+% \begin{macrocode}
+ \cs_new_protected:cpn { __pdfmeta_xmp_schema_pdfd_additions: }
+ {
+ \@@_xmp_add_packet_open:nn{pdfaSchema}{valueType}
+ \@@_xmp_add_packet_open:nn{rdf}{Seq}
+ \@@_xmp_add_packet_open_attr:nnn{rdf}{li}{rdf:parseType="Resource"}
+ \@@_xmp_add_packet_line:nnn{pdfaType}{type}{claim}
+ \@@_xmp_add_packet_line:nnn{pdfaType}{namespaceURI}
+ {http://pdfa.org/declarations/}
+ \@@_xmp_add_packet_line:nnn{pdfaType}{prefix}{pdfd}
+ \@@_xmp_add_packet_line:nnn{pdfaType}{description}
+ {A~structure~describing~properties~of~an~individual claim.}
+ \@@_xmp_add_packet_open:nn{pdfaType}{field}
+ \@@_xmp_add_packet_open:nn{rdf}{Seq}
+ \@@_xmp_add_packet_field:nnn{claimReport}{Text}
+ {A~URL~to~a~report~containing~details~of~the~specific~conformance~claim.}
+ \@@_xmp_add_packet_field:nnn{claimCredentials}{Text}
+ {The~claimant's~credentials.}
+ \@@_xmp_add_packet_field:nnn{claimDate}{Text}
+ {A~date~identifying~when~the~claim~was~made.}
+ \@@_xmp_add_packet_field:nnn{claimBy}{Text}
+ {The~name~of~the~organization~and/or~individual~and/or~software~making~the~claim.}
+ \@@_xmp_add_packet_close:nn{rdf}{Seq}
+ \@@_xmp_add_packet_close:nn{pdfaType}{field}
+ \@@_xmp_add_packet_close:nn{rdf}{li}
+ \@@_xmp_add_packet_open_attr:nnn{rdf}{li}{rdf:parseType="Resource"}
+ \@@_xmp_add_packet_line:nnn{pdfaType}{type}{declaration}
+ \@@_xmp_add_packet_line:nnn{pdfaType}{namespaceURI}
+ {http://pdfa.org/declarations/}
+ \@@_xmp_add_packet_line:nnn{pdfaType}{prefix}{pdfd}
+ \@@_xmp_add_packet_line:nnn{pdfaType}{description}
+ {A~structure~describing~a~single~PDF~ Declaration~asserting~conformance~with~ an~externally-identified~standard~or~ profile.}
+ \@@_xmp_add_packet_open:nn{pdfaType}{field}
+ \@@_xmp_add_packet_open:nn{rdf}{Seq}
+ \@@_xmp_add_packet_field:nnn{conformsTo}{Text}
+ {A~property~containing~a~URI~specifying~the~standard~or~profile~by~the~PDF~Declaration.~This~property~is~ intended~to~mirror~the~Dublin~Core~property~dc:conformsTo.}
+ \@@_xmp_add_packet_field:nnn{claimData}{Bag~claim}
+ {An~unordered~array~of~claim~data,~where~each~claim~identifies~the~nature~of~the~claim.}
+ \@@_xmp_add_packet_close:nn{rdf}{Seq}
+ \@@_xmp_add_packet_close:nn{pdfaType}{field}
+ \@@_xmp_add_packet_close:nn{rdf}{li}
+ \@@_xmp_add_packet_close:nn{rdf}{Seq}
+ \@@_xmp_add_packet_close:nn{pdfaSchema}{valueType}
+ }
+% \end{macrocode}
+% the schema should be added only once so disable it after use:
+% \begin{macrocode}
+ \cs_gset_eq:NN \@@_xmp_schema_enable_pdfd: \prg_do_nothing:
+ }
+% \end{macrocode}
%
% \end{description}
% \subsection{The actual user / document data}
@@ -2241,8 +2372,56 @@
% \end{macrocode}
% \end{macro}
%
-
-% \subsubsection{Photoshop}
+% \subsection{Declarations}
+% See \url{https://pdfa.org/wp-content/uploads/2019/09/PDF-Declarations.pdf}
+%
+% \begin{variable}{\g_@@_xmp_pdfd_data_prop}
+% This holds the data for declarations.
+% \begin{macrocode}
+\prop_new:N \g_@@_xmp_pdfd_data_prop
+% \end{macrocode}
+% \end{variable}
+% the main building command used in the xmp generation
+% \begin{macro}{\@@_xmp_build_pdfd:}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_xmp_build_pdfd:
+ {
+ \prop_if_empty:NF\g_@@_xmp_pdfd_data_prop
+ {
+ \@@_xmp_add_packet_open:nn{pdfd}{declarations}
+ \@@_xmp_add_packet_open:nn{rdf}{Bag}
+ \prop_map_inline:Nn \g_@@_xmp_pdfd_data_prop
+ {
+ \@@_xmp_build_pdfd_claim:nn{##1}{##2}
+ }
+ \@@_xmp_add_packet_close:nn{rdf}{Bag}
+ \@@_xmp_add_packet_close:nn{pdfd}{declarations}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_xmp_build_pdfd_claim:nn}
+% This build the xml for one claim. If there is no
+% claimData only the conformsTo is output.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_xmp_build_pdfd_claim:nn #1#2
+ {
+ \@@_xmp_add_packet_open_attr:nnn{rdf}{li}{rdf:parseType="Resource"}
+ \@@_xmp_add_packet_line:nnn{pdfd}{conformsTo}{#1}
+ \tl_if_empty:nF {#2}
+ {
+ \@@_xmp_add_packet_open:nn{pdfd}{claimData}
+ \@@_xmp_add_packet_open:nn{rdf}{Bag}
+ #2
+ \@@_xmp_add_packet_close:nn{rdf}{Bag}
+ \@@_xmp_add_packet_close:nn{pdfd}{claimData}
+ }
+ \@@_xmp_add_packet_close:nn{rdf}{li}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Photoshop}
% \begin{macro}{\@@_xmp_build_photoshop:}
% \begin{macrocode}
\cs_new_protected:Npn \@@_xmp_build_photoshop:
@@ -2633,6 +2812,45 @@
}
% \end{macrocode}
% \end{macro}
+%
+% \begin{macro}{\pdfmeta_xmp_add_declaration:n,\pdfmeta_xmp_add_declaration:e}
+% \begin{macrocode}
+\cs_new_protected:Npn \pdfmeta_xmp_add_declaration:n #1 %conformsTo uri
+ {
+ \@@_xmp_schema_enable_pdfd:
+ \prop_gput:Nnn\g_@@_xmp_pdfd_data_prop{#1}{}
+ }
+\cs_generate_variant:Nn \pdfmeta_xmp_add_declaration:n {e}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pdfmeta_xmp_add_declaration:nnnnn,\pdfmeta_xmp_add_declaration:ennnn}
+% \begin{macrocode}
+\cs_new_protected:Npn \pdfmeta_xmp_add_declaration:nnnnn #1#2#3#4#5
+ %#1=conformsTo uri, #2 claimBy, #3 claimDate #4 claimCredentials #4 claimReport
+ {
+ \@@_xmp_schema_enable_pdfd:
+ \tl_set:Nn \l_@@_tmpa_tl
+ {
+ \@@_xmp_add_packet_open_attr:nnn{rdf}{li}{rdf:parseType="Resource"}
+ \@@_xmp_add_packet_line:nnn{pdfd}{claimBy}{#2}
+ \@@_xmp_add_packet_line:nnn{pdfd}{claimDate}{#3}
+ \@@_xmp_add_packet_line:nnn{pdfd}{claimCredentials}{#4}
+ \@@_xmp_add_packet_line:nnn{pdfd}{claimReport}{#5}
+ \@@_xmp_add_packet_close:nn{rdf}{li}
+ }
+ \prop_get:NnNT \g_@@_xmp_pdfd_data_prop {#1}\l_@@_tmpb_tl
+ {
+ \tl_concat:NNN \l_@@_tmpa_tl \l_@@_tmpa_tl \l_@@_tmpb_tl
+ }
+ \prop_gput:Nno\g_@@_xmp_pdfd_data_prop{#1}
+ {
+ \l_@@_tmpa_tl
+ }
+ }
+\cs_generate_variant:Nn\pdfmeta_xmp_add_declaration:nnnnn {e}
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macrocode}
%</package>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf
index ccbfc2789e..6f94039cd0 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx
index c6efc127f3..3e5dc1f1ff 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -231,7 +231,7 @@
%
% \begin{macrocode}
%<*header>
-\ProvidesExplPackage{l3pdftools}{2023-11-17}{0.96c}
+\ProvidesExplPackage{l3pdftools}{2023-12-09}{0.96d}
{candidate commands for l3pdf---LaTeX PDF management testphase bundle}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf
index 6711cd498c..e10591432e 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx
index 0f3196cb0a..3928d790d3 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx
@@ -48,7 +48,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -132,7 +132,7 @@
% \begin{macrocode}
%<@@=pdf>
%<*header>
-\ProvidesExplPackage{l3pdfxform}{2023-11-17}{0.96c}
+\ProvidesExplPackage{l3pdfxform}{2023-12-09}{0.96d}
{command to create xforms (beta)---LaTeX PDF management testphase bundle}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf
index b013fc980d..7b901ddda0 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx
index 332012c4dc..7688446417 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx
@@ -47,7 +47,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -220,7 +220,7 @@
% \begin{macrocode}
%<@@=pdfmanagement>
%<*header>
-\ProvidesExplPackage{ltdocinit}{2023-11-17}{0.96c}
+\ProvidesExplPackage{ltdocinit}{2023-12-09}{0.96d}
{Initialize document metadata}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf
index d8c5ab0934..32df59ad2e 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
index 6154ccf3e3..cdcc24255e 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
@@ -47,7 +47,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -63,7 +63,7 @@
% |debug={firstaidoff={name1,name2,...},...}|.
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{pdfmanagement-firstaid}{2023-11-17}{0.96c}
+\ProvidesExplPackage{pdfmanagement-firstaid}{2023-12-09}{0.96d}
{LaTeX PDF management testphase bundle / firstaid-patches}
%<@@=pdfmanagement>
diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf
index 5b95298b42..fc3bd4ce8a 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx
index a685374c52..189f496cf2 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx
@@ -47,7 +47,7 @@
% }^^A
% }
%
-% \date{Version 0.96c, released 2023-11-17}
+% \date{Version 0.96d, released 2023-12-09}
%
% \maketitle
% \begin{documentation}
@@ -233,10 +233,7 @@
%
% \section{Requirements}
% The new PDF management is developed parallel to the \LaTeX{} format
-% and should be updated together with the format. It
-% requires currently a \LaTeX{} format from 2023/11/01 or later
-% and an L3 programming layer of 2023-11-01 or later.
-% It currently depends on the experimental package and \pkg{l3bitset}.
+% and should be updated together with the format.
% In some places, e.g. when writing strings to the pdf it assumes that
% the file is utf8 encoded -- ascii will naturally work too, but legacy 8bit encodings are
% not supported.
@@ -397,7 +394,7 @@
% \begin{macrocode}
%<@@=pdf>
%<*package>
-\ProvidesExplPackage{pdfmanagement-testphase}{2023-11-17}{0.96c}
+\ProvidesExplPackage{pdfmanagement-testphase}{2023-12-09}{0.96d}
{LaTeX PDF management testphase bundle}
\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
\IfFormatAtLeastTF{2020-10-01}{}{
@@ -425,7 +422,7 @@
% to allow to set it in the document.
% \begin{macrocode}
%<*header>
-\ProvidesExplFile{pdfmanagement-testphase.ltx}{2023-11-17}{0.96c}
+\ProvidesExplFile{pdfmanagement-testphase.ltx}{2023-12-09}{0.96d}
{PDF~management~code~(testphase)}
% \end{macrocode}
% We define a boolean for the new delayed shipout. This is temporary. At some
diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf
index 041de89f5e..5f9f2f81e5 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty
index 98d5aaf4e9..a444924dfd 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty
+++ b/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty
@@ -1,6 +1,6 @@
%% LaTeX2e file `xcolor-patches-tmp-ltx.sty'
%%
-\ProvidesPackage{xcolor-patches-tmp-ltx}[2023-11-17 v0.96c patch xcolor for l3color]
+\ProvidesPackage{xcolor-patches-tmp-ltx}[2023-12-09 v0.96d patch xcolor for l3color]
\@ifundefined{color_set:nn}{\RequirePackage{l3color}}{}
\ExplSyntaxOn
diff --git a/macros/latex/contrib/tutodoc/README.md b/macros/latex/contrib/tutodoc/README.md
index 335d288b1d..7458ee34e7 100644
--- a/macros/latex/contrib/tutodoc/README.md
+++ b/macros/latex/contrib/tutodoc/README.md
@@ -16,4 +16,4 @@ This project may be distributed and/or modified under the conditions of the GNU
Where is the documentation?
---------------------------
-At this time, there is a French and an English documentation writing with a tutorial-like flavor (in the repository, see the folder `rollout/doc`).
+Documentation is currently available in French and English, they arewriting with a tutorial-like flavor (in the repository, see the folder `rollout/doc`).
diff --git a/macros/latex/contrib/tutodoc/code/tutodoc.sty b/macros/latex/contrib/tutodoc/code/tutodoc.sty
index 83b6c88433..cd4a6aecb3 100644
--- a/macros/latex/contrib/tutodoc/code/tutodoc.sty
+++ b/macros/latex/contrib/tutodoc/code/tutodoc.sty
@@ -9,8 +9,8 @@
\ProvidesExplPackage
{tutodoc}
- {2023-11-29} % Creation: 2023-11-29
- {1.0.0}
+ {2023-12-08} % Creation: 2023-11-29
+ {1.0.1}
{This package proposes tools for writing "human friendly" documentations of LaTeX packages.}
\RequirePackage[
@@ -344,7 +344,7 @@
% prototype::
% #1 : the name of a macro
%
-% :action: ''\tdocenv{mymacro}'' prints verb::''\mymacro''.
+% :action: ''\tdocmacro{mymacro}'' prints verb::''\mymacro''.
%%%
\NewDocumentCommand{\tdocmacro}{m}{%
\texttt{\textbackslash{}#1}%
@@ -360,10 +360,12 @@
% or something like verb::''\begin{myenv}<opt1> ... \end{myenv}'',
% the spaces being secable.
%%%
+%
+% Cleaner code from https://tex.stackexchange.com/a/703379/6880 .
\NewDocumentCommand{\tdocenv}{O{}m}{%
- \texttt{\textbackslash{}begin\{#2\}#1 %
- \!...\! %
- \textbackslash{}end\{#2\}}%
+ \texttt{\string\begin\string{#2\string}#1 %
+ \!\!...\@\!\!\! %
+ \string\end\string{#2\string}}%
}
@@ -510,9 +512,9 @@
%%%
\NewDocumentEnvironment{tdoc@showcase@basic}{m m m}{
\tdocruler{#1}{\tdocdarkcolor{#3}}
- \medskip
+ \nopagebreak\medskip\nopagebreak
}{
- \medskip
+ \nopagebreak\medskip\nopagebreak
\tdocruler{#2}{\tdocdarkcolor{#3}}
}
@@ -587,7 +589,7 @@
% :see: env.tdoc@showcase@basic ,
% env.tdoc@showcase@colorstrip
%%%
-\NewDocumentEnvironment{tdocshowcase}{O{}}{
+\NewDocumentEnvironment{tdocshowcase}{ O{} }{
\group_begin:
\keys_set:nn { tdoc/showcase } { #1 }
diff --git a/macros/latex/contrib/tutodoc/doc/tutodoc-en.pdf b/macros/latex/contrib/tutodoc/doc/tutodoc-en.pdf
index 4d051d3010..a83fc1915d 100644
--- a/macros/latex/contrib/tutodoc/doc/tutodoc-en.pdf
+++ b/macros/latex/contrib/tutodoc/doc/tutodoc-en.pdf
Binary files differ
diff --git a/macros/latex/contrib/tutodoc/doc/tutodoc-en.tex b/macros/latex/contrib/tutodoc/doc/tutodoc-en.tex
index a520d22847..8d628d7b4a 100644
--- a/macros/latex/contrib/tutodoc/doc/tutodoc-en.tex
+++ b/macros/latex/contrib/tutodoc/doc/tutodoc-en.tex
@@ -4,7 +4,7 @@
% -------------------- %
-\begin{filecontents*}{examples-focus-exa.tex}
+\begin{filecontents*}[overwrite]{examples-focus-exa.tex}
Bla, bla, bla...
\begin{tdocexa}
@@ -25,7 +25,7 @@
\end{filecontents*}
-\begin{filecontents*}{examples-focus-exa-leavevmode.tex}
+\begin{filecontents*}[overwrite]{examples-focus-exa-leavevmode.tex}
\begin{tdocexa}
\leavevmode
@@ -38,7 +38,7 @@
\end{filecontents*}
-\begin{filecontents*}{examples-focus-rmk.tex}
+\begin{filecontents*}[overwrite]{examples-focus-rmk.tex}
\begin{tdocrem}
Just one remark...
\end{tdocrem}
@@ -49,7 +49,7 @@
\end{filecontents*}
-\begin{filecontents*}{examples-focus-tip.tex}
+\begin{filecontents*}[overwrite]{examples-focus-tip.tex}
\begin{tdoctip}
A tip.
\end{tdoctip}
@@ -60,7 +60,7 @@
\end{filecontents*}
-\begin{filecontents*}{examples-focus-note.tex}
+\begin{filecontents*}[overwrite]{examples-focus-note.tex}
\begin{tdocnote}
Something useful to tell you...
\end{tdocnote}
@@ -71,7 +71,7 @@
\end{filecontents*}
-\begin{filecontents*}{examples-focus-important.tex}
+\begin{filecontents*}[overwrite]{examples-focus-important.tex}
\begin{tdocimportant}
Important and harmless.
\end{tdocimportant}
@@ -82,7 +82,7 @@
\end{filecontents*}
-\begin{filecontents*}{examples-focus-caution.tex}
+\begin{filecontents*}[overwrite]{examples-focus-caution.tex}
\begin{tdoccaution}
Caution, caution...
\end{tdoccaution}
@@ -93,7 +93,7 @@
\end{filecontents*}
-\begin{filecontents*}{examples-focus-warn.tex}
+\begin{filecontents*}[overwrite]{examples-focus-warn.tex}
\begin{tdocwarn}
Avoid the dangers...
\end{tdocwarn}
@@ -104,7 +104,7 @@
\end{filecontents*}
-\begin{filecontents*}{examples-showcase-default.tex}
+\begin{filecontents*}[overwrite]{examples-showcase-default.tex}
\begin{tdocshowcase}
\bfseries A bit of code \LaTeX.
@@ -115,7 +115,7 @@
\end{filecontents*}
-\begin{filecontents*}{examples-showcase-customized.tex}
+\begin{filecontents*}[overwrite]{examples-showcase-customized.tex}
\begin{tdocshowcase}[before = My beginning,
after = My end,
color = red]
@@ -124,21 +124,21 @@ Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla...
\end{filecontents*}
-\begin{filecontents*}{examples-showcase-hook.tex}
-\begin{tdocshowcase}[]
- [This works...]
+\begin{filecontents*}[overwrite]{examples-showcase-hook.tex}
+\begin{tdocshowcase}
+ \string[This works...]
\end{tdocshowcase}
\end{filecontents*}
-\begin{filecontents*}{examples-showcase-no-clrstrip.tex}
+\begin{filecontents*}[overwrite]{examples-showcase-no-clrstrip.tex}
\begin{tdocshowcase}[nostripe]
Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla...
\end{tdocshowcase}
\end{filecontents*}
-\begin{filecontents*}{examples-showcase-no-clrstrip-customized.tex}
+\begin{filecontents*}[overwrite]{examples-showcase-no-clrstrip-customized.tex}
\begin{tdocshowcase}[nostripe,
before = My beginning,
after = My end,
@@ -149,32 +149,32 @@ Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla...
\end{filecontents*}
-\begin{filecontents*}{examples-showcase-external.tex}
+\begin{filecontents*}[overwrite]{examples-showcase-external.tex}
Blablobli, blablobli, blablobli, blablobli, blablobli, blablobli...
\end{filecontents*}
-\begin{filecontents*}{examples-listing-ABC.tex}
+\begin{filecontents*}[overwrite]{examples-listing-ABC.tex}
\begin{tdoclatex}[sbs]
$A = B + C$
\end{tdoclatex}
\end{filecontents*}
-\begin{filecontents*}{examples-listing-strange.tex}
+\begin{filecontents*}[overwrite]{examples-listing-strange.tex}
\begin{tdoclatex}[std]
[Strange... Or not!]
\end{tdoclatex}
\end{filecontents*}
-\begin{filecontents*}{examples-listing-xyz.tex}
+\begin{filecontents*}[overwrite]{examples-listing-xyz.tex}
% Just one demo.
$x y z = 1$
\end{filecontents*}
-\begin{filecontents*}{examples-listing-latexshow-options.tex}
+\begin{filecontents*}[overwrite]{examples-listing-latexshow-options.tex}
\tdoclatexshow[explain = What comes next is colourful...,
before = Rendering below.,
after = Finished rendering.,
@@ -183,7 +183,7 @@ $x y z = 1$
\end{filecontents*}
-\begin{filecontents*}{examples-version-n-change-dating.tex}
+\begin{filecontents*}[overwrite]{examples-version-n-change-dating.tex}
Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla...
\medskip % CAUTION! This prevents overlapping.
@@ -204,7 +204,7 @@ Blu, blu, blu, blu, blu, blu, blu, blu, blu, blu, blu, blu, blu...
\end{filecontents*}
-\begin{filecontents*}{examples-version-n-change-versioning.tex}
+\begin{filecontents*}[overwrite]{examples-version-n-change-versioning.tex}
\tdocversion[red]{10.2.0-beta}[2023-12-01]
Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla...
@@ -220,7 +220,7 @@ ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble...
\end{filecontents*}
-\begin{filecontents*}{examples-version-n-change-new.tex}
+\begin{filecontents*}[overwrite]{examples-version-n-change-new.tex}
\begin{tdocnew}
\item Info 1...
\item Info 2...
@@ -228,7 +228,7 @@ ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble...
\end{filecontents*}
-\begin{filecontents*}{examples-version-n-change-update.tex}
+\begin{filecontents*}[overwrite]{examples-version-n-change-update.tex}
\begin{tdocupdate}
\item Info 1...
\item Info 2...
@@ -236,7 +236,7 @@ ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble...
\end{filecontents*}
-\begin{filecontents*}{examples-version-n-change-fix.tex}
+\begin{filecontents*}[overwrite]{examples-version-n-change-fix.tex}
\begin{tdocfix}
\item Info 1...
\item Info 2...
@@ -244,7 +244,7 @@ ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble...
\end{filecontents*}
-\begin{filecontents*}{examples-version-n-change-topic.tex}
+\begin{filecontents*}[overwrite]{examples-version-n-change-topic.tex}
\begin{tdoctopic}{Unclassifiable changes}
% This is where the point needs to be put.
\item Info 1...
@@ -257,7 +257,7 @@ ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble...
% -- SOURCE FOR THE DOC -- %
% ------------------------ %
-\documentclass[12pt, a4paper]{article}
+\documentclass[10pt, a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
@@ -270,6 +270,8 @@ ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble...
\usepackage{tabularray}
\usepackage{fmtcount}
+\setlength{\parindent}{0em}
+
% Package documented.
\usepackage[lang = english]{tutodoc}
@@ -278,11 +280,11 @@ ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble...
% * https://tex.stackexchange.com/a/604698/6880
\NewDocumentCommand{ \tdocdocbasicinput }{ m }{%
- Considérons le code suivant.
+ Consider the following code.
\tdoclatexinput[code]{#1}
- Ceci produira ce qui suit.
+ This will produce the following.
\input{#1}
}
@@ -307,12 +309,12 @@ ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble...
}
\NewDocumentEnvironment{ tdoc-doc-showcase }
- { O{ Début du rendu dans cette doc. }
- O{ Fin du rendu dans cette doc. } }{
+ { O{ Start of the rendering in this doc. }
+ O{ End of rendering in this doc. } }{
\tdocdocextraruler{#1}
- \smallskip
+ \nopagebreak\smallskip\nopagebreak
}{
- \smallskip
+ \nopagebreak\smallskip\nopagebreak
\tdocdocextraruler{#2}
}
@@ -322,11 +324,12 @@ ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble...
\title{Le package \texttt{tutodoc} - Documentation de type tutoriel}
\author{Christophe BAL}
-\date{29 Nov. 2023 - Version 1.0.0}
+\date{8th Dec. 2023 - Version 1.0.1}
\maketitle
\begin{abstract}
+\noindent
The \tdocpack{tutodoc} package
\footnote{
The name comes from \tdocquote{\tdocprewhy{tuto.rial-type} \tdocprewhy{doc.umentation}}.
@@ -337,10 +340,15 @@ is used by its author to semantically produce documentation of \LaTeX\ packages
},
and with a sober rendering for reading on screen.
+\medskip
-\begin{tdocnote}
- This package imposes a formatting style. In the not-too-distant future, \tdocpack{tutodoc} will probably be split into a class and a package.
-\end{tdocnote}
+\noindent
+Two important points to note.
+\begin{itemize}
+ \item This package imposes a formatting style. In the not-too-distant future, \tdocpack{tutodoc} will probably be split into a class and a package.
+
+ \item This documentation is also available in French.
+\end{itemize}
\end{abstract}
@@ -690,7 +698,7 @@ It is sometimes useful to render code directly in the documentation. This type o
\begin{tdocwarn}
- With the default settings, if the code to be formatted begins with an opening bracket, an empty option must be explicitly indicated, as in the following example.
+ With the default settings, if the code to be formatted begins with an opening bracket, use \tdocmacro{string} as in the following example. the following example.
\tdoclatexinput[code]{examples-showcase-hook.tex}
@@ -935,7 +943,8 @@ The \tdocmacro{tdoclatexinput} macro, shown below, is used in the same way as th
\begin{tdocexa}[Changing the explanatory text]
Using the key \tdocinlatex|explain|, you can use custom text. Thus, \tdocinlatex|tdoclatexshow[explain = Here is the actual rendering.]{examples-listing-xyz.tex}| will produce the following.
- \medskip
+ \newpage
+% \medskip
\begin{tdoc-doc-showcase}
\tdoclatexshow[explain = Here is the actual rendering.]{examples-listing-xyz.tex}
@@ -1089,8 +1098,18 @@ Blu, blu, blu...
+\newpage
\section{History}
+\tdocversion{1.0.1}[2023-12-08]
+
+\begin{tdocfix}
+ \item \tdocmacro{tdocenv}: spacing is now correct, even if the \tdocpack{babel} package is not loaded with the French language.
+
+ \item \tdocenv[{[nostripe]}]{showcase}: page breaks around the rulers are no longer possible.\end{tdocfix}
+
+\tdocsep
+
\tdocversion{1.0.0}[2023-11-29]
First public version of the project.
diff --git a/macros/latex/contrib/tutodoc/doc/tutodoc-fr.pdf b/macros/latex/contrib/tutodoc/doc/tutodoc-fr.pdf
index 61c26a3f4f..3b37329ef4 100644
--- a/macros/latex/contrib/tutodoc/doc/tutodoc-fr.pdf
+++ b/macros/latex/contrib/tutodoc/doc/tutodoc-fr.pdf
Binary files differ
diff --git a/macros/latex/contrib/tutodoc/doc/tutodoc-fr.tex b/macros/latex/contrib/tutodoc/doc/tutodoc-fr.tex
index d5c55ff667..ef86f8a9bc 100644
--- a/macros/latex/contrib/tutodoc/doc/tutodoc-fr.tex
+++ b/macros/latex/contrib/tutodoc/doc/tutodoc-fr.tex
@@ -4,7 +4,7 @@
% -------------------- %
-\begin{filecontents*}{examples-focus-exa.tex}
+\begin{filecontents*}[overwrite]{examples-focus-exa.tex}
Bla, bla, bla...
\begin{tdocexa}
@@ -25,7 +25,7 @@ Bla, bla, bla...
\end{filecontents*}
-\begin{filecontents*}{examples-focus-exa-leavevmode.tex}
+\begin{filecontents*}[overwrite]{examples-focus-exa-leavevmode.tex}
\begin{tdocexa}
\leavevmode
@@ -38,7 +38,7 @@ Bla, bla, bla...
\end{filecontents*}
-\begin{filecontents*}{examples-focus-rmk.tex}
+\begin{filecontents*}[overwrite]{examples-focus-rmk.tex}
\begin{tdocrem}
Juste une remarque...
\end{tdocrem}
@@ -49,7 +49,7 @@ Bla, bla, bla...
\end{filecontents*}
-\begin{filecontents*}{examples-focus-tip.tex}
+\begin{filecontents*}[overwrite]{examples-focus-tip.tex}
\begin{tdoctip}
Une astuce.
\end{tdoctip}
@@ -60,7 +60,7 @@ Bla, bla, bla...
\end{filecontents*}
-\begin{filecontents*}{examples-focus-note.tex}
+\begin{filecontents*}[overwrite]{examples-focus-note.tex}
\begin{tdocnote}
Un truc utile à vous dire...
\end{tdocnote}
@@ -71,7 +71,7 @@ Bla, bla, bla...
\end{filecontents*}
-\begin{filecontents*}{examples-focus-important.tex}
+\begin{filecontents*}[overwrite]{examples-focus-important.tex}
\begin{tdocimportant}
Un truc important sans danger.
\end{tdocimportant}
@@ -82,7 +82,7 @@ Bla, bla, bla...
\end{filecontents*}
-\begin{filecontents*}{examples-focus-caution.tex}
+\begin{filecontents*}[overwrite]{examples-focus-caution.tex}
\begin{tdoccaution}
Prudence, prudence...
\end{tdoccaution}
@@ -93,7 +93,7 @@ Bla, bla, bla...
\end{filecontents*}
-\begin{filecontents*}{examples-focus-warn.tex}
+\begin{filecontents*}[overwrite]{examples-focus-warn.tex}
\begin{tdocwarn}
Evitez les dangers...
\end{tdocwarn}
@@ -104,7 +104,7 @@ Bla, bla, bla...
\end{filecontents*}
-\begin{filecontents*}{examples-showcase-default.tex}
+\begin{filecontents*}[overwrite]{examples-showcase-default.tex}
\begin{tdocshowcase}
\bfseries Un peu de code \LaTeX.
@@ -115,7 +115,7 @@ Bla, bla, bla...
\end{filecontents*}
-\begin{filecontents*}{examples-showcase-customized.tex}
+\begin{filecontents*}[overwrite]{examples-showcase-customized.tex}
\begin{tdocshowcase}[before = Mon début,
after = Ma fin à moi,
color = red]
@@ -124,21 +124,21 @@ Bla, bla, bla...
\end{filecontents*}
-\begin{filecontents*}{examples-showcase-hook.tex}
-\begin{tdocshowcase}[]
- [Cela fonctionne...]
+\begin{filecontents*}[overwrite]{examples-showcase-hook.tex}
+\begin{tdocshowcase}
+ \string[Cela fonctionne...]
\end{tdocshowcase}
\end{filecontents*}
-\begin{filecontents*}{examples-showcase-no-clrstrip.tex}
+\begin{filecontents*}[overwrite]{examples-showcase-no-clrstrip.tex}
\begin{tdocshowcase}[nostripe]
Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla...
\end{tdocshowcase}
\end{filecontents*}
-\begin{filecontents*}{examples-showcase-no-clrstrip-customized.tex}
+\begin{filecontents*}[overwrite]{examples-showcase-no-clrstrip-customized.tex}
\begin{tdocshowcase}[nostripe,
before = Mon début,
after = Ma fin à moi,
@@ -148,32 +148,32 @@ Bla, bla, bla...
\end{filecontents*}
-\begin{filecontents*}{examples-showcase-external.tex}
+\begin{filecontents*}[overwrite]{examples-showcase-external.tex}
Blablobli, blablobli, blablobli, blablobli, blablobli, blablobli...
\end{filecontents*}
-\begin{filecontents*}{examples-listing-ABC.tex}
+\begin{filecontents*}[overwrite]{examples-listing-ABC.tex}
\begin{tdoclatex}[sbs]
$A = B + C$
\end{tdoclatex}
\end{filecontents*}
-\begin{filecontents*}{examples-listing-strange.tex}
+\begin{filecontents*}[overwrite]{examples-listing-strange.tex}
\begin{tdoclatex}[std]
[Étrange... Ou pas !]
\end{tdoclatex}
\end{filecontents*}
-\begin{filecontents*}{examples-listing-xyz.tex}
+\begin{filecontents*}[overwrite]{examples-listing-xyz.tex}
% Juste une démo.
$x y z = 1$
\end{filecontents*}
-\begin{filecontents*}{examples-listing-latexshow-options.tex}
+\begin{filecontents*}[overwrite]{examples-listing-latexshow-options.tex}
\tdoclatexshow[explain = Ce qui vient est coloré...,
before = Rendu ci-après.,
after = Rendu fini.,
@@ -182,7 +182,7 @@ $x y z = 1$
\end{filecontents*}
-\begin{filecontents*}{examples-version-n-change-dating.tex}
+\begin{filecontents*}[overwrite]{examples-version-n-change-dating.tex}
Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla...
\medskip % ATTENTION ! Ceci évite le chevauchement.
@@ -203,7 +203,7 @@ Blu, blu, blu, blu, blu, blu, blu, blu, blu, blu, blu, blu, blu...
\end{filecontents*}
-\begin{filecontents*}{examples-version-n-change-versioning.tex}
+\begin{filecontents*}[overwrite]{examples-version-n-change-versioning.tex}
\tdocversion[red]{10.2.0-beta}[2023-12-01]
Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla...
@@ -219,7 +219,7 @@ ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble...
\end{filecontents*}
-\begin{filecontents*}{examples-version-n-change-new.tex}
+\begin{filecontents*}[overwrite]{examples-version-n-change-new.tex}
\begin{tdocnew}
\item Info 1...
\item Info 2...
@@ -227,7 +227,7 @@ ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble...
\end{filecontents*}
-\begin{filecontents*}{examples-version-n-change-update.tex}
+\begin{filecontents*}[overwrite]{examples-version-n-change-update.tex}
\begin{tdocupdate}
\item Info 1...
\item Info 2...
@@ -235,7 +235,7 @@ ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble...
\end{filecontents*}
-\begin{filecontents*}{examples-version-n-change-fix.tex}
+\begin{filecontents*}[overwrite]{examples-version-n-change-fix.tex}
\begin{tdocfix}
\item Info 1...
\item Info 2...
@@ -243,7 +243,7 @@ ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble...
\end{filecontents*}
-\begin{filecontents*}{examples-version-n-change-topic.tex}
+\begin{filecontents*}[overwrite]{examples-version-n-change-topic.tex}
\begin{tdoctopic}{Des changements inclassables}
% Ici le point s'impose.
\item Info 1...
@@ -269,6 +269,7 @@ ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble...
% Package documented.
\usepackage[lang = french]{tutodoc}
+\setlength{\parindent}{0em}
% Source.
% * https://tex.stackexchange.com/a/604698/6880
@@ -306,9 +307,9 @@ ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble...
{ O{ Début du rendu dans cette doc. }
O{ Fin du rendu dans cette doc. } }{
\tdocdocextraruler{#1}
- \smallskip
+ \nopagebreak\smallskip\nopagebreak
}{
- \smallskip
+ \nopagebreak\smallskip\nopagebreak
\tdocdocextraruler{#2}
}
@@ -318,11 +319,12 @@ ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble...
\title{Le package \texttt{tutodoc} - Documentation de type tutoriel}
\author{Christophe BAL}
-\date{29 Nov. 2023 - Version 1.0.0}
+\date{8 Déc. 2023 - Version 1.0.1}
\maketitle
\begin{abstract}
+\noindent
Le package \tdocpack{tutodoc}
\footnote{
Le nom vient de \tdocquote{\tdocprewhy{tuto.rial-type} \tdocprewhy{doc.umentation}} se traduit en \tdocquote{documentation de type tutoriel}.
@@ -333,19 +335,28 @@ est utilisé par son auteur pour produire de façon sémantique des documentatio
},
et avec un rendu sobre pour une lecture sur écran.
+\medskip
+
+\noindent
+Deux points importants à noter.
+\begin{itemize}
+ \item Ce package impose un style de mise en forme. Dans un avenir plus ou moins proche, \tdocpack{tutodoc} sera sûrement éclaté en une classe et un package.
+
+ \item Cette documentation est aussi disponible en anglais.
+\end{itemize}
+
+
+% ------------------ %
-\begin{tdocnote}
- Ce package impose un style de mise en forme.
- Dans un avenir plus ou moins proche, \tdocpack{tutodoc} sera sûrement éclaté en une classe et un package.
-\end{tdocnote}
\tdocsep
-{\small\itshape
+{\noindent
+\small\itshape
\textbf{Abstract.}
The \tdocpack{tutodoc} package
\footnote{
- The name comes from \tdocquote{\tdocprewhy{tuto.rial-type} \tdocprewhy{doc.umentation}}.
+ The name comes from \tdocquote{\tdocprewhy{tuto.rial-type} \tdocprewhy{doc.umentation}}.
}
is used by its author to semantically produce documentation of \LaTeX\ packages and classes in a tutorial style
\footnote{
@@ -353,10 +364,15 @@ is used by its author to semantically produce documentation of \LaTeX\ packages
},
and with a sober rendering for reading on screen.
+\medskip
-\begin{tdocnote}
- This package imposes a formatting style. In the not-too-distant future, \tdocpack{tutodoc} will probably be split into a class and a package.
-\end{tdocnote}
+\noindent
+Two important points to note.
+\begin{itemize}
+ \item This package imposes a formatting style. In the not-too-distant future, \tdocpack{tutodoc} will probably be split into a class and a package.
+
+ \item This documentation is also available in French.
+\end{itemize}
}
\end{abstract}
@@ -708,7 +724,7 @@ Il est parfois utile d'obtenir directement le rendu d'un code dans la documentat
\begin{tdocwarn}
- Avec les réglages par défaut, si le code \LaTeX\ à mettre en forme commence par un crochet ouvrant, il faudra indiquer explicitement une option vide comme dans l'exemple suivant.
+ Avec les réglages par défaut, si le code \LaTeX\ à mettre en forme commence par un crochet ouvrant, il faudra user de \tdocmacro{string} comme dans l'exemple suivant.
\tdoclatexinput[code]{examples-showcase-hook.tex}
@@ -882,6 +898,7 @@ La macro \tdocmacro{tdoclatexinput} , présentée ci-après, s'utilise comme l'e
% ------------------ %
+\newpage
\begin{tdocexa}[Face à face]
\leavevmode
@@ -1050,6 +1067,7 @@ On peut au choix dater quelque chose, ou bien le versionner, dans ce second cas
lors des derniers changements.
+\newpage
\begin{tdocexa}[Pour les nouveautés]
\leavevmode
@@ -1109,8 +1127,20 @@ Blo, blo, blo...
Blu, blu, blu...
\end{tdoclatex}
+
+\newpage
\section{Historique}
+\tdocversion{1.0.1}[2023-12-08]
+
+\begin{tdocfix}
+ \item \tdocmacro{tdocenv}: l'espacement est maintenant correct, même si le paquet \tdocpack{babel} n'est pas chargé avec la langue française.
+
+ \item \tdocenv[{[nostripe]}]{showcase}: les sauts de page autour des règles ne sont plus possibles.
+\end{tdocfix}
+
+\tdocsep
+
\tdocversion{1.0.0}[2023-11-29]
Première version publique du projet.
diff --git a/macros/luatex/generic/blopentype/README.md b/macros/luatex/generic/blopentype/README.md
index c1d7382d08..4e21edd1cf 100644
--- a/macros/luatex/generic/blopentype/README.md
+++ b/macros/luatex/generic/blopentype/README.md
@@ -31,8 +31,6 @@ Good luck, and happy LuaTeXing
# Authors
-Version 0.0.3 (C) 2022-2023 Paul Isambert (author) and Luis Rivera (maintainer).
+(C) 2022-2023 Paul Isambert (author) and Luis Rivera (maintainer).
LaTeX Project Public License, LPPL Version 1.3c 2008-05-04 or MIT License
-
-September 3, 2023.
diff --git a/macros/luatex/generic/blopentype/blottest.pdf b/macros/luatex/generic/blopentype/blottest.pdf
index d5d3f2d904..20ac198b3d 100644
--- a/macros/luatex/generic/blopentype/blottest.pdf
+++ b/macros/luatex/generic/blopentype/blottest.pdf
Binary files differ
diff --git a/macros/luatex/generic/blopentype/luatex/blot-fonts.lua b/macros/luatex/generic/blopentype/luatex/blot-fonts.lua
index 982c595580..7b4462866d 100644
--- a/macros/luatex/generic/blopentype/luatex/blot-fonts.lua
+++ b/macros/luatex/generic/blopentype/luatex/blot-fonts.lua
@@ -129,7 +129,7 @@ local lfs = get_locals {lfs = "dir isdir isfile mkdir", kpse = "expand_var show_
-- Returns anything after the last dot, i.e. an extension.
function lfs.extension (s)
return str.lower(str.match(s, "%.([^%.]*)$") or "")
--- return str.match(s, "%.([^%.]*)$")
+-- return str.match(s, "%.([^%.]*)$") -- bugfix: dpc for empty field in file extension 230902
end
local extensions = {
@@ -221,9 +221,9 @@ local normal_names = {}
for _, name in ipairs(settings.normal) do
normal_names[name] = true
end
-local local_path = lfs.expand_var("$TEXMFLOCAL")--:gsub(":",";")
+local local_path = lfs.expand_var("$TEXMFLOCAL")
+-- local local_path = lfs.expand_var("$TEXMFHOME") -- :gsub(":",";") -- bugfix dpc: no path search gsub 0.0.2
local foundry_path = lfs.ensure_dir (local_path, "tex", "luatex", "blotfonts")
--- local local_path = lfs.expand_var("$TEXMFHOME")
-- local foundry_path = lfs.ensure_dir (local_path, "fonts", "truetype", "public", "gfs")
local library_file = foundry_path .. "/" .. "readable.txt"
-- local library_file = "c:/texlive/texmf-local/tex/plain/pitex/readable.txt"
@@ -578,6 +578,8 @@ end
-- with such a name, so if there's an "f f" ligature in a font, no matter its name, "ff.lig"
-- will point to it.
local function ligature (comp, tb, phantoms)
+ if #tb == 0 then -- fast kludge to evade empty tables. jlrn 231207
+ else
local i = str.gsub(comp[1], "%.lig$", "") .. comp[2] .. ".lig"
phantoms[i] = true
tab.insert(tb.all_ligs, i)
@@ -589,6 +591,7 @@ local function ligature (comp, tb, phantoms)
tab.insert(comp, 1, i)
ligature(comp, tb, phantoms)
end
+ end -- endkludge 231209
end
local function get_lookups (t, lookup_table)
@@ -1208,14 +1211,17 @@ local function load_font (name, size, id, done)
loaded_font = apply_size(loaded_font, size, features.letterspacing, features.space)
loaded_font = activate_lookups(loaded_font, features, features.script, features.lang)
+ if #loaded_font == 0 then -- kludge for missing families/series, etc. 231207. jlrn.
+ else -- kludge 231207
loaded_font.name = loaded_font.name .. id
- loaded_font.fullname = loaded_font.fullname .. id
+ loaded_font.fullname = loaded_font.fullname .. id
local embedding = features.embedding or "subset"
if embedding ~= "no" and embedding ~= "subset" and embedding ~= "full" then
wri.error("Invalid value `%s' for the `embedding' feature. Value should be `no', `subset' or `full'.", embedding)
embedding = "subset"
end
loaded_font.embedding = embedding
+ end -- endkludge 231207
else
loaded_font = fl.read_tfm(lfs.find_file("cmr10", "tfm"), size)
end
@@ -1229,6 +1235,8 @@ callback.register("define_font", load_font)
History
0.0.0 First release
0.0.1 Bugfix
-0.0.2 Bugfix on font path search
-0.0.3 2023-09-02 Bugfix on font path search: empty file extension among font files
+0.0.2 2023-06-28 Bugfix on font path search: removed gsubs for Nix&Win
+0.0.3 2023-09-02 Bugfix on font path search: empty file extensions in font paths
+0.0.4 2023-12-07 Two kludges: one for missing ligatures, another for missing families/series;
+ some cleanup and housekeeping.
--]] \ No newline at end of file
diff --git a/macros/luatex/generic/blopentype/luatex/blot.tex b/macros/luatex/generic/blopentype/luatex/blot.tex
index 09dc58dff1..c4a0a79c99 100644
--- a/macros/luatex/generic/blopentype/luatex/blot.tex
+++ b/macros/luatex/generic/blopentype/luatex/blot.tex
@@ -6,7 +6,7 @@
%
% User interface
%
-\message{This is blopentype, v0.0.3 September 2023}
+\message{This is blopentype, v0.0.4 December 2023}
\input luatex85.sty % deprecated 30.12.2022
\input yax % which itself \input's texapi
@@ -211,54 +211,57 @@
\restorecatcodes
\endinput
-%
-% These are leftovers from Isambert's code: they'll be removed as
-% documentation improves.- 30.12.2022
-%
-% This is piTeX, a set of macros I (Paul Isambert) use to
-% typeset documentations for my packages (that's why it is
-% archived on CTAN).
-%
-% Perhaps in the future, when this achieves some kind of
-% format-like completude, it'll be publicly announced. In the
-% meanwhile, a documentation exists (pitex-doc.pdf, also readable
-% in a text editor as pitex-doc.txt).
-%
-%
-% You can of course use those macros, but you are on your
-% own, and the files will probably be modified without announcement.
-% The file is supposed to be \input on plain TeX with LuaTeX, at least v.0.6.
-%
-%
-% The files needed are:
-%
-% texapi.tex (an independent package for programming)
-% yax.tex (an independent package for key=value interface)
-% gates.tex and gates.lua (an independant package for overall architecture)
-% navigator.tex (an independant package for PDF features)
-% lua.ptx and base.ptxlua (Lua side)
-% files.ptx (file management)
-% fonts.ptx, fonts.ptxlua and foundry-settings.lua
-% (fonts, should be independant some day; actually
-% fonts.ptxlua can be used independantly, but there is
-% no doc)
-% sections.ptx (sectionning commands)
-% blocks.ptx (text blocks)
-% references.ptx (labels and references)
-% verbatim.ptx (typesetting verbatim)
-% inserts.ptx (footnotes and figures, a mess)
-% output.ptx (output routine)
-%
-% The file i-pitex.lua is needed only to typeset the documentation with the
-% Interpreter package.
-%
-%
-% Date: November 2011.
-%
-% --- blopentype history
-%
-% 28-06-2023 fixed bug in blot-fonts.lua which affected nix systems.
-% thanks to david.carlisle for useful patch.
-% 02-08-2023 fixed bug in blot-fonts.lua: failure on empty file extension among font files.
-% thanks to david.carlisle for useful patch.
-%
+
+These notes are leftovers from Isambert's code: they'll be removed as
+documentation improves.- 30.12.2022
+
+This is piTeX, a set of macros I (Paul Isambert) use to
+typeset documentations for my packages (that's why it is
+archived on CTAN).
+
+Perhaps in the future, when this achieves some kind of
+format-like completude, it'll be publicly announced. In the
+meanwhile, a documentation exists (pitex-doc.pdf, also readable
+in a text editor as pitex-doc.txt).
+
+
+You can of course use those macros, but you are on your
+own, and the files will probably be modified without announcement.
+The file is supposed to be \input on plain TeX with LuaTeX, at least v.0.6.
+
+
+The files needed are:
+
+texapi.tex (an independent package for programming)
+yax.tex (an independent package for key=value interface)
+gates.tex and gates.lua (an independant package for overall architecture)
+navigator.tex (an independant package for PDF features)
+lua.ptx and base.ptxlua (Lua side)
+files.ptx (file management)
+fonts.ptx, fonts.ptxlua and foundry-settings.lua
+ (fonts, should be independant some day; actually
+ fonts.ptxlua can be used independantly, but there is
+ no doc)
+sections.ptx (sectionning commands)
+blocks.ptx (text blocks)
+references.ptx (labels and references)
+verbatim.ptx (typesetting verbatim)
+inserts.ptx (footnotes and figures, a mess)
+output.ptx (output routine)
+
+The file i-pitex.lua is needed only to typeset the documentation with the
+Interpreter package.
+
+
+Date: November 2011.
+
+--- blopentype history
+
+28-06-2023 fixed bug in blot-fonts.lua which affected nix systems.
+ thanks to david.carlisle for useful patch.
+02-08-2023 fixed bug in blot-fonts.lua:
+ failure on files with empty extensions in font directories.
+ thanks to david.carlisle for useful patch.
+07-09-2023 fixed bugs in blot-fonts.lua:
+ - quick kludge to avoid empty ligature tables
+ - quick kludge to avoid missing font families/series: fallback to default font