[latex3-commits] [latex3/tagpdf] faster-ref: add user interface (b650312)
github at latex-project.org
github at latex-project.org
Wed Sep 11 00:50:04 CEST 2024
Repository : https://github.com/latex3/tagpdf
On branch : faster-ref
Link : https://github.com/latex3/tagpdf/commit/b65031217e4ffcb3268b2a48132039d6646d8726
>---------------------------------------------------------------
commit b65031217e4ffcb3268b2a48132039d6646d8726
Author: Ulrike Fischer <fischer at troubleshooting-tex.de>
Date: Wed Sep 11 00:50:04 2024 +0200
add user interface
>---------------------------------------------------------------
b65031217e4ffcb3268b2a48132039d6646d8726
CHANGELOG.md | 1 +
doc/tagpdf.tex | 15 +++++++++++++++
tagpdf-struct.dtx | 40 +++++++++++++++++++++++++---------------
tagpdf.dtx | 9 ++-------
4 files changed, 43 insertions(+), 22 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d7ac480..594be7a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@ this project uses date-based 'snapshot' version identifiers.
### Changed
- \tag_stop:n and \tag_start:n no longer expand key in debug mode.
+ - speeding up the creation of Ref keys
## [2024-08-02]
Version 0.99d
diff --git a/doc/tagpdf.tex b/doc/tagpdf.tex
index 1e1516a..50d56d9 100644
--- a/doc/tagpdf.tex
+++ b/doc/tagpdf.tex
@@ -1881,6 +1881,21 @@ structure already has a parent you will get a warning.
\subsubsection{Handling the \texttt{Ref} key in structures}\label{sec:Refkey}
+Structures that cross reference other structures, e.g. citation commands, table of
+content entries, footnote require often a \texttt{Ref} key. \texttt{Ref}
+can be added with the |ref| key if \cs{tagstructbegin} described above
+but as it is a task that often has to be done automatically in code
+there exist also a command. The target structure of a \texttt{Ref} key
+can be identified with three methods: through a label name set with the |label| key,
+through a destination name if a \cs{MakeLinkTarget} has been used in
+the target structure---this also works if hyperref has not been loaded---and through
+the structure number, which has been stored e.g. in a label.
+
+\begin{docCommands}
+ {
+ {doc name=\tag_struct_gput_ref:nnn,doc parameter=\marg{structure number}\marg{keyword}\marg{value}},
+ }\end{docCommands}
+
\subsubsection{Root structure}
diff --git a/tagpdf-struct.dtx b/tagpdf-struct.dtx
index c3e644a..f4c7dd3 100644
--- a/tagpdf-struct.dtx
+++ b/tagpdf-struct.dtx
@@ -121,6 +121,18 @@
% the Ref key (an array)
% \end{function}
%
+% \begin{function}{\tag_struct_gput_ref:nnn}
+% \begin{syntax}
+% \cs{tag_struct_gput_ref:nnn}\Arg{structure number}\Arg{keyword}\Arg{value}
+% \end{syntax}
+% This is an user interface to add a Ref key to an
+% existing structure. The target structure doesn't have to exist yet
+% but can be addressed by label, destname or even num.
+% \meta{keyword} is currently either \texttt{label}, \texttt{dest}
+% or \texttt{num}. The value is then either a label name, the name of a destination
+% or a structure number.
+% \end{function}
+%
% \section{Public keys}
% \subsection{Keys for the structure commands}
% \begin{function}{tag (struct-key)}
@@ -1316,19 +1328,8 @@
\tl_clear:N\l_@@_tmpa_tl
\clist_map_inline:on {#1}
{
- \tl_put_right:Nn \l_@@_tmpa_tl
- {\@@_struct_Ref_label:nN{##1},}
- }
- \@@_struct_gput_data_ref:no
- { \int_use:N \c at g_@@_struct_abs_int } {\l_@@_tmpa_tl}
- },
- refdest .code:n = % ref property
- {
- \tl_clear:N\l_@@_tmpa_tl
- \clist_map_inline:on {#1}
- {
- \tl_put_right:Nn \l_@@_tmpa_tl
- {\@@_struct_Ref_dest:nN{##1},}
+ \tl_put_right:Ne \l_@@_tmpa_tl
+ {\exp_not:N\@@_struct_Ref_label:nN{##1},}
}
\@@_struct_gput_data_ref:no
{ \int_use:N \c at g_@@_struct_abs_int } {\l_@@_tmpa_tl}
@@ -1959,10 +1960,19 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\tag_struct_add_ref:nnn}
+% \begin{macro}{\tag_struct_gput_ref:nnn}
+% This is an user interface to add a Ref key to an
+% existing structure. The target structure doesn't have to exist yet
+% but can be addressed by label, destname or even num.
% \begin{macrocode}
+%<base>\cs_new_protected:Npn \tag_struct_gput_ref:nnn #1 #2 #3{}
%<*package>
-
+\cs_set_protected:Npn \tag_struct_gput_ref:nnn #1 #2 #3
+%#1 structnum, #2 label, dest or num, #3 value
+ {
+ \@@_struct_gput_data_ref:no
+ { #1 } {\cs:w @@_struct_Ref_#2:nN \cs_end: { #3 } , }
+ }
%</package>
% \end{macrocode}
% \end{macro}
diff --git a/tagpdf.dtx b/tagpdf.dtx
index f03c9b2..4842bff 100644
--- a/tagpdf.dtx
+++ b/tagpdf.dtx
@@ -200,10 +200,7 @@
{
\cs_set_protected:Npn \__fnote_gput_ref:nn #1 #2 %#1 the structure number receiving the ref #2
{
- \tag_if_active:T
- {
- \tag_struct_gput:nnn {#1}{ref}{\@@_struct_Ref_num:nN { #2 }}
- }
+ \tag_struct_gput_ref:nnn {#1}{num}{#2}
}
}
\AddToHook{package/latex-lab-testphase-toc/after}
@@ -212,9 +209,7 @@
{
\prop_map_inline:Nn\g_@@_struct_ref_by_dest_prop
{
- \@@_struct_gput_data_ref:nn
- { ##1 }
- { \@@_struct_Ref_dest:nN{ ##2 }}
+ \tag_struct_gput_ref:nnn {##1}{dest}{##2}
}
}
}
More information about the latex3-commits
mailing list.