[latex3-commits] [latex3/latex2e] develop: add properties and MakeLinkTarget to clsguide (bc2b56b7)
github at latex-project.org
github at latex-project.org
Thu Oct 26 19:43:00 CEST 2023
Repository : https://github.com/latex3/latex2e
On branch : develop
Link : https://github.com/latex3/latex2e/commit/bc2b56b7bc2ebc6a0f476a85180a8d195f440790
>---------------------------------------------------------------
commit bc2b56b7bc2ebc6a0f476a85180a8d195f440790
Author: Ulrike Fischer <fischer at troubleshooting-tex.de>
Date: Tue Oct 10 20:19:54 2023 +0200
add properties and MakeLinkTarget to clsguide
>---------------------------------------------------------------
bc2b56b7bc2ebc6a0f476a85180a8d195f440790
base/doc/clsguide.tex | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 107 insertions(+)
diff --git a/base/doc/clsguide.tex b/base/doc/clsguide.tex
index 79194ce5..3697a005 100644
--- a/base/doc/clsguide.tex
+++ b/base/doc/clsguide.tex
@@ -1191,6 +1191,113 @@ defined as
where |#1| is the user input and the first argument to
\cs{MakeUppercaseAux} takes two arguments, the locale and input text.
+\subsection{Extended and expandable references of properties}
+
+A property is something that \LaTeX{} can track, such as a page number, a section number or a name. Such properties
+can be labeled, their current value written to the \texttt{aux}-file and referenced in the next compilation, similar to the standard \cs{label}/\cs{ref} commands.
+
+\begin{decl}
+ |\RecordProperties|\arg{label}\arg{list of properties}
+\end{decl}
+This command writes the current or shipout value (depending on the declaration of the property)
+of the properties in the list into the \texttt{aux}-file labeled by \meta{label}. The arguments can contain commands which are expanded. \meta{label} can expand to an arbitrary string (as long as it can safely be written to the \texttt{aux}-file) but note that the label names of \cs{label} and \cs{RecordProperties} share a singe namespace. That means that you get a \texttt{Label `A' multiply defined} warning with the following code:
+\begin{verbatim}
+\label{A}\RecordProperties{A}{page}
+\end{verbatim}
+
+
+\begin{decl}
+ |\RefProperty|\arg{label}\arg{property}
+\end{decl}
+This command allows to reference the value of the property \meta{property} labeled by \meta{label}. Differently to the standard \cs{ref} command the command is expandable and the value can for example---if it is a number---be used in an assignment.
+
+\begin{verbatim}
+\section{A section}
+\RecordProperties{mylabel}{pagenum,counter}
+\RefProperty{mylabel}{counter} % outputs section
+\setcounter{mycounter}{\RefProperty{mylabel}{pagenum}}
+\end{verbatim}
+
+
+
+As \cs{RefProperty} is expandable it can not issue a rerun warning if a label is not found. If needed such a warning can be forced by the following command:
+\begin{decl}
+ |\RefUndefinedWarn|\arg{label}\arg{property}
+\end{decl}
+
+\LaTeX{} predefines a set of properties, this set contains also the properties stored by the
+standard \cs{label} command:
+\begin{description}
+ \item[\texttt{abspage}] The absolute value of the current page: starts at $1$ and increases
+ monotonically at each shipout.
+ \item[page] The current page as given by \cs{thepage}: this may or may not
+ be a numerical value, depending on the current style. Contrast with
+ \texttt{abspage}. You get this value also with the standard \cs{label}/\cs{pageref}.
+ \item[\texttt{pagenum}] The current page as arabic number. This is suitable for integer operations and
+ comparisions.
+ \item[\texttt{currentlabel}] The content of \cs{@currentlabel}. This is the value that
+ you get also with the standard \cs{label}/\cs{ref}.
+ \item[\texttt{title}] The content of \cs{@currentlabelname}.
+ This command is filled beside others by the \pkg{nameref} package and some
+ classes (e.g.~\pkg{memoir}) and typically gives the title of some sectioning command.
+ \item[\texttt{target}] The content of \cs{@currentHref}.
+ This command is normally filled by \pkg{hyperref} and gives the name of the last destination it created.
+ \item[\texttt{counter}] The content of \cs{@currentcounter}.
+ This command contains after a \cs{refstepcounter} the name of the counter.
+ \item[\texttt{xpos}, \texttt{ypos}] These properties records the $x$~and $y$ coordinates of a point previously
+ stored with \cs{pdfsavepos}/\cs{savepos}.
+ E.g.~(if \pkg{bidi} is used it can be necessary to save the position
+ before and after the label):
+ \begin{verbatim}
+ \pdfsavepos
+ \RefProperty{myposition}{xpos,ypos}%
+ \pdfsavepos
+ \end{verbatim}
+\end{description}
+
+Class and package authors can define more properties to store other values they are interested in.
+\begin{decl}
+ |\NewProperty|\arg{name}\arg{setpoint}\arg{default}\arg{code}\\
+ |\SetProperty|\arg{name}\arg{setpoint}\arg{default}\arg{code}
+\end{decl}
+These commands declare or change a property \meta{name}\footnote{The standard set of properties and properties of other package should not be changed!}. If a new property
+is declared within a package it is suggested that its name is always structured as follows:
+\meta{package-name}\texttt{/}\meta{property-name}. \meta{setpoint} is either |now| or |shipout| and decides if the
+value is written directly or at the next shipout. \meta{default} is used if the property is referenced but not yet known.
+\meta{code} is the code executed when storing the value. For example the \texttt{pagenum} property is declare as
+\begin{verbatim}
+\NewProperty{pagenum}{shipout}{0}{\the\value{page}}
+\end{verbatim}
+
+The commands related to properties are offered as a set of CamelCase
+commands for traditional \LaTeXe{} packages (and for use in the
+document preamble if needed) as well as \texttt{expl3} commands
+for modern packages, that use the L3 programming layer of
+\LaTeX{}. The \texttt{expl3} commands and more details can by found in \texttt{ltproperties-doc.pdf}.
+
+\subsection{Preparing link targets}
+
+Active links in a document need targets where they can jump to. Such targets are often created automatically (if the package \pkg{hyperref} is loaded) by the \cs{refstepcounter} command but there are also cases where class or package authors need to add a target manually for example in unnumbered sectioning commands or in environments. For this \LaTeX{} provides the following commands. \emph{Without} \pkg{hyperref} they do nothing or insert only a whatsits, \emph{with} \pkg{hyperref} they add the necessary targets. Details about the behaviour and the arguments of the following commands can by found in the \pkg{hyperref} package in \texttt{hyperref-linktarget.pdf}.
+
+\begin{decl}
+ |\MakeLinkTarget|\oarg{prefix}\arg{counter}\\
+ |\MakeLinkTarget|\oarg{prefix}\{\}\\
+ |\MakeLinkTarget|*\arg{manual target}\\
+\end{decl}
+This command prepares the creations of targets.
+
+\begin{decl}
+ |\LinkTargetOn|\\
+ |\LinkTargetOff|
+\end{decl}
+These commands allow to enable and disable locally the creation of targets. This can be useful to suppress targets created
+automatically by \cs{refstepcounter}.
+
+\begin{decl}
+ |\NextLinkTarget|\arg{manual target}
+\end{decl}
+This changes the name of the next target that will be created.
+
\section{Commands superseded for new material}
A small number of commands were introduced as part of \LaTeXe{} in the
More information about the latex3-commits
mailing list.