summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/base/ltnews38.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex/base/ltnews38.tex')
-rw-r--r--Master/texmf-dist/doc/latex/base/ltnews38.tex602
1 files changed, 602 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/base/ltnews38.tex b/Master/texmf-dist/doc/latex/base/ltnews38.tex
new file mode 100644
index 00000000000..04ffe1a0ed2
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/base/ltnews38.tex
@@ -0,0 +1,602 @@
+% \iffalse meta-comment
+%
+% Copyright 2023
+% The LaTeX Project and any individual authors listed elsewhere
+% in this file.
+%
+% This file is part of the LaTeX base system.
+% -——————————————
+%
+% It may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% https://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008 or later.
+%
+% This file has the LPPL maintenance status "maintained".
+%
+% The list of all files belonging to the LaTeX base distribution is
+% given in the file `manifest.txt'. See also `legal.txt' for additional
+% information.
+%
+% The list of derived (unpacked) files belonging to the distribution
+% and covered by LPPL is defined by the unpacking scripts (with
+% extension .ins) which are part of the distribution.
+%
+% \fi
+% Filename: ltnews38.tex
+%
+% This is issue 38 of LaTeX News.
+
+\NeedsTeXFormat{LaTeX2e}[2020-02-02]
+
+\documentclass{ltnews}
+
+%% Maybe needed only for Chris' inadequate system:
+\providecommand\Dash {\unskip \textemdash}
+
+%% NOTE: Chris' preferred hyphens!
+%%\showhyphens{parameters}
+%% \hyphenation{because parameters parameter}
+
+\usepackage[T1]{fontenc}
+
+\usepackage{lmodern,url,hologo}
+
+\usepackage{csquotes}
+\usepackage{multicol}
+\usepackage{color}
+
+\providecommand\hook[1]{\texttt{#1}}
+
+\providecommand\meta[1]{$\langle$\textrm{\itshape#1}$\rangle$}
+\providecommand\option[1]{\texttt{#1}}
+\providecommand\env[1]{\texttt{#1}}
+\providecommand\Arg[1]{\texttt\{\meta{#1}\texttt\}}
+
+
+\providecommand\eTeX{\hologo{eTeX}}
+\providecommand\XeTeX{\hologo{XeTeX}}
+\providecommand\LuaTeX{\hologo{LuaTeX}}
+\providecommand\pdfTeX{\hologo{pdfTeX}}
+\providecommand\MiKTeX{\hologo{MiKTeX}}
+\providecommand\CTAN{\textsc{ctan}}
+\providecommand\TL{\TeX\,Live}
+\providecommand\githubissue[2][]{\ifhmode\unskip\fi
+ \quad\penalty500\strut\nobreak\hfill
+ \mbox{\small\slshape(%
+ \href{https://github.com/latex3/latex2e/issues/\getfirstgithubissue#2 \relax}%
+ {github issue#1 #2}%
+ )}%
+ \par\smallskip}
+%% But Chris has to mostly disable \href for his TEXPAD app:
+%% \def\href #1{} % Only For Chris' deficient TeX engine
+
+% simple solution right now (just link to the first issue if there are more)
+\def\getfirstgithubissue#1 #2\relax{#1}
+
+\providecommand\sxissue[1]{\ifhmode\unskip
+ \else
+ % githubissue preceding
+ \vskip-\smallskipamount
+ \vskip-\parskip
+ \fi
+ \quad\penalty500\strut\nobreak\hfill
+ \mbox{\small\slshape(\url{https://tex.stackexchange.com/#1})}\par}
+
+\providecommand\gnatsissue[2]{\ifhmode\unskip\fi
+ \quad\penalty500\strut\nobreak\hfill
+ \mbox{\small\slshape(%
+ \href{https://www.latex-project.org/cgi-bin/ltxbugs2html?pr=#1\%2F\getfirstgithubissue#2 \relax}%
+ {gnats issue #1/#2}%
+ )}%
+ \par}
+
+\let\cls\pkg
+\providecommand\env[1]{\texttt{#1}}
+\providecommand\acro[1]{\textsc{#1}}
+
+\vbadness=1400 % accept slightly empty columns
+
+
+\let\finalpagebreak\pagebreak % for TUB (if they use it)
+
+\makeatletter
+% maybe not the greatest design but normally we wouldn't have subsubsections
+\renewcommand{\subsubsection}{%
+ \@startsection {subsubsection}{2}{0pt}{1.5ex \@plus 1ex \@minus .2ex}%
+ {-1em}{\@subheadingfont\colonize}%
+}
+\providecommand\colonize[1]{#1:}
+\makeatother
+
+\let\finalvspace\vspace % for document layout fixes
+
+% Undo ltnews's \verbatim@font with active < and >
+\makeatletter
+\def\verbatim@font{%
+ \normalsize\ttfamily}
+\makeatletter
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\providecommand\tubcommand[1]{}
+\tubcommand{\input{tubltmac}}
+
+\publicationmonth{November}
+%\publicationyear{2023 --- DRAFT version for upcoming release}
+\publicationyear{2023}
+
+\publicationissue{38}
+
+\begin{document}
+
+\tubcommand{\addtolength\textheight{4.2pc}} % only for TUB
+
+\maketitle
+{\hyphenpenalty=10000 \exhyphenpenalty=10000 \spaceskip=3.33pt \hbadness=10000
+\tableofcontents}
+
+\setlength\rightskip{0pt plus 3em}
+
+\medskip
+
+%\section{Introduction}
+
+
+\section{News from the \enquote{\LaTeX{} Tagged PDF} project}
+
+The multi-year project to automatically tag \LaTeX{} documents in
+order to make them accessible~\cite{38:blueprint} is progressing
+steadily (at this point in time mainly as experimental
+\texttt{latex-lab} code).
+
+Just recently we added support for automatic tagging of tabular
+structures including environments from \pkg{tabularx} and
+\pkg{longtable}. The code is still in its early stages and lacks
+configuration possibilities\Dash these will be added in the future.
+
+\subsection{Approaching an important milestone}
+
+Nevertheless, with this new addition we are more or less able to
+automatically tag any document that confines itself to the commands
+and environments described in Leslie Lamport's \emph{\LaTeX{}
+Manual}~\cite{38:Lamport} by simply adding a single configuration line
+at the top.
+
+In addition, a number of extension packages that go beyond Lamport are
+already supported, most importantly perhaps \pkg{amsmath} (providing
+extended math capabilities) and \pkg{hyperref} (enhancing \LaTeX{}
+with interactive hyperlinking features).
+\finalpagebreak
+Also already supported are
+some of the major bibliography support packages such as \pkg{natbib}
+and \pkg{biblatex}.
+
+For now activation is done through the line
+\begin{verbatim}
+\DocumentMetadata
+ {testphase={phase-III,math,tabular}}
+\end{verbatim}
+The math and the tabular support are not yet incorporated into
+\texttt{phase-III} but need their own activation, so that we can
+better experiment with additions and code adjustments.
+
+The \texttt{latex-lab} bundle contains various (still untagged)
+documentation files about the new code that can be accessed with
+\verb|texdoc -l latex-lab|.
+
+\subsection{A GitHub repository dedicated to the project}
+
+We have also started a new GitHub repository mainly intended for
+reporting issues, and offering a platform for discussions. For
+example, there is one discussion on ways to extend the \LaTeX{}
+\env{tabular} syntax to allow describing the logical structure of
+tables (e.g., which cells are header cells, etc.).
+
+Having all issues and discussions related to the project in a single
+place instead of being spread across multiple repositories such as
+\pkg{latex2e}, \pkg{latex3}, \pkg{tagpdf}, \pkg{hyperref},
+\pkg{pdfresources}, etc., helps people to find information easily
+and report any issue related to the project without needing to know in which
+code repository the problematic code resides.
+
+You find this repository at
+\url{https://github.com/latex3/tagging-project} and the mentioned
+discussion on \env{tabular} syntax at
+\url{https://github.com/latex3/tagging-project/discussions/1}.
+
+Your feedback is important and reporting what doesn't yet work is
+beneficial to all users, so we hope to see you there and thank you for
+any contribution, whether it is an issue or a post on a discussion
+thread.
+
+
+\section{Hooks, sockets and plugs}
+
+In previous releases of \LaTeX{} we introduced the general concept of
+hooks (both specific and generic ones). These are places in the
+code into which different packages (or the user in the document
+preamble) can safely add their own code to extend the functionality of
+existing commands and environments without the need to overwrite or
+patch them in incompatible ways. An important feature of such hooks is
+that the code chunks added by different packages can be ordered by
+rules, if necessary,
+\finalpagebreak
+thereby avoiding problems arising from
+differences in package loading order. See \LaTeX{} News issues
+32--34~\cite{38:ltnews} for more information.
+
+However, sometimes you need a kind of \enquote{hook} into which only a
+single chunk of code is placed at any time.\footnote{While this is in
+theory possible to model with the existing hook mechanism, it is
+inefficient and cumbersome.} For example, there is code that
+implements footnote placement in relation to bottom floats (above or
+below them). But at any time in the document only one such placement
+code can be in force. Or consider the extra code needed for making
+\LaTeX{} documents accessible (e.g., adding tags to the PDF
+output). Such code is either there (perhaps in alternative versions)
+or not at all, but it cannot have code from other packages added at
+the same point interfering with the algorithm.
+
+For these use cases we now introduce the concept of sockets and plugs.
+A socket is a place in the code into which one can put a plug (a
+chunk of code with a name) after which the socket is in use; to put in
+a different plug, the former one has to be taken out
+first.\footnote{Think of electric outlets and plugging something into
+them.} A socket may or may not have inputs that can then be used by
+the plugs.
+%
+While this is technically not much different to putting a command in
+the code and at some point alter its definition, the advantage is that
+this offers a consistent interface, allows for status information,
+supports tracing, etc.
+
+You declare a new socket and possibly some plugs for it with
+\begin{flushleft}
+ \cs{NewSocket}\Arg{socket name}\Arg{\# of inputs} \\
+ \cs{NewSocketPlug}\Arg{socket name}\Arg{plug name}\Arg{code}
+\end{flushleft}
+For example, after the declaration \verb=\NewSocket{foo}{0}= you can
+immediately use this socket in your code with \verb=\UseSocket{foo}=.
+The \cs{NewSocket} declaration automatically defines a simple plug
+with the name \texttt{noop} for the socket and assigns it to the socket
+(plugs it in), thus your \cs{UseSocket} sits idle doing
+nothing\footnote{Sockets with one input also define an
+\texttt{identity} plug and initially assign that to the socket\Dash
+this means that their input is simply returned without processing.}
+until you assign it a different plug, which is done with
+\cs{AssignSocketPlug}. This takes the current plug out and puts the
+new one in.
+%
+All the declarations and commands are also available in the \LaTeX3
+programming layer as \cs{socket\_new:nn}, \cs{socket\_new\_plug:nnn},
+etc.
+
+With this concept we can, for example, add tagging support for the
+\enquote{\LaTeX{} Tagged PDF} project to various packages without
+altering their behavior if the tagging code is inactive. Activating
+one or the other form of tagging then just means to assign named plugs
+to the different sockets.
+
+This is just a brief introduction to the mechanism; for more detailed
+documentation see \texttt{texdoc ltsockets-doc}.
+
+
+\finalpagebreak
+
+\section{Document properties and cross-referencing}
+
+Traditional \LaTeX{} uses \cs{label}\Arg{key} to record the values of two
+\enquote{local} properties of the document: the textual
+representations of the \emph{current page number} and the
+\emph{current \textup{\cs{ref}} value} set by \cs{refstepcounter}
+declarations~\cite[p.~209]{38:Lamport}. (These declarations are
+issued, for example, by sectioning commands, by numbered environments
+like \env{equation}, and by \cs{item} in an \env{enumerate} or
+similar environment.)
+
+These two recorded values can then be accessed and typeset (from
+anywhere in the next run of the document) by use of the
+(non-expandable) commands \cs{ref} and \cs{pageref} using the
+\emph{key} that was specified as the argument to \cs{label} when
+recording these values. This supported basic cross-referencing
+(within a document), using these recorded values to provide both
+page-related and counter-related information (such as the page xvii or
+the subsection number 4.5.2).\footnote{In the Spring 2023 release of
+\LaTeX{}, the \cs{label} command was extended to record, in addition,
+both a title (such as the text used in a section head) and the
+\emph{logical name} used for an associated link target provided these
+have been set by packages such as \pkg{nameref} or \pkg{hyperref}.}
+
+
+Over the years \LaTeX{} packages have appeared that extend
+this basic \enquote{label-ref system} in various ways.
+%
+For example, the \pkg{refcount} package made a small but significant change
+to the functions used to access recorded values, by making them expandable.
+And the \pkg{smart-ref} package supports the storage of a larger
+collection of counter values so that, for example, a cross-reference
+can refer to the relevant chapter together with an equation tag.
+The \pkg{cleveref} package stores (by means of a second, internal
+\enquote{logical label}) extra information such as the name of the counter.
+The \pkg{hyperref} package adds the \cs{autoref} command, which
+tries to retrieve the name of a counter from the \emph{logical name}
+used for a link target.
+The \pkg{tikzmarks} library records information about
+ \emph{labelled positions} on the page when using \pkg{tikz}.
+Finally, the \pkg{zref} package implements many related ideas, including a general
+idea of properties and lists of properties, with methods to record, and
+subsequently access, the value of any declared property.
+
+
+Starting with this release, the \LaTeX{} kernel provides handling of
+general document properties as a core functionality with standard
+interfaces.
+%
+This is based on concepts introduced by the \pkg{zref} package but
+with some differences in detail, particularly in the implementation.
+It supports the declaration of new properties, and the recording of
+the values of any list of properties. These values are retrieved
+expandably.
+
+To set up a new property that is the current chapter
+number, for example, here is the declaration to use.
+\begin{verbatim}
+ \NewProperty{chapter}{now}{?}{\thechapter}
+\end{verbatim}
+\par\finalpagebreak\noindent
+The second argument means that the property value will be recorded
+immediately (\enquote{now}), and not \enquote{during the next
+ \cs{shipout}}. The third argument sets a default to be used when,
+for example, an unknown label is supplied.
+%
+The final argument contains the code that will, as part of the
+recording process, be expanded to obtain the value to record for this
+property.
+
+Then, to record the value of this new property,
+together with others, use this command.
+\begin{verbatim}
+ \RecordProperties{mylabel}
+ {chapter,page,label}
+\end{verbatim}
+This records the current values for the properties \texttt{chapter},
+\texttt{page}, and \texttt{label}, using \texttt{mylabel} as the
+label, or \emph{key}, for the record.
+
+To \emph{reference} (i.e., retrieve) this recorded value for use in a
+cross-reference to this chapter, use the \cs{RefProperty} command with
+two arguments: the label, or \emph{key}, and the property.
+\begin{verbatim}
+ \RefProperty{mylabel}{chapter}
+\end{verbatim}
+
+The
+\LaTeX{} kernel itself contains
+declarations for some generally useful properties,
+including these:
+\begin{description}
+\item[\texttt{label}] the textual representation of the \emph{current
+\textup{\cs{ref}} value}, see above;
+
+\item[\texttt{page}] the textual representation of the page number for
+ the page currently under construction;
+
+\item[\texttt{title}] the title, if set by, e.g.,~\pkg{nameref};
+
+\item[\texttt{target}] the logical name of the associated link target,
+ if set by, e.g.,~\pkg{hyperref};
+
+\item[\texttt{pagetarget}] the logical name of the target added by
+ \pkg{hyperref} at the origin of each shipped out page;
+
+\item[\texttt{pagenum}] the value of the \LaTeX{} counter
+ \texttt{page} in Arabic numerals;
+
+\item[\texttt{abspage}] the absolute page number of the page under
+ construction, i.e., one more than the number of pages shipped out so
+ far (thus it starts at 1 and is increased by 1 whenever a page is
+ shipped out);
+
+\item[\texttt{counter}] the name of the counter that produced the
+ \emph{current \textup{\cs{ref}} value}, i.e., the counter that was
+ stepped in the most recent \cs{refstepcounter} within the current
+ scope;
+
+\item[\texttt{xpos}, \texttt{ypos}] the position on the shipped out
+ page as set by the most recent \cs{pdfsavepos}: recording these
+ properties should be done as soon as possible after saving the
+ position.
+\end{description}
+
+Both \LaTeXe{} commands (using camel-case names) and
+\LaTeX3 programming layer commands are provided.
+%
+For a more complete documentation, see \texttt{texdoc ltproperties-doc}.
+
+
+
+\finalpagebreak
+
+\section{New or improved commands}
+
+\subsection{Testing for the \LaTeX3 programming layer version: \cs{IfExplAtLeastTF}}
+
+The integration of \pkg{expl3} (the \LaTeX3 programming layer)
+into the kernel means that programmers can use all of the features
+available without needing to load it explicitly. However, as \pkg{expl3}
+is upgraded separately from \LaTeXe{} and is not a separate package, its
+version is different from that of \LaTeXe{} and cannot be tested using
+\cs{IfPackageAtLeastTF}. To date, low-level methods have therefore
+been needed to check for the availability of features in
+\pkg{expl3}. We have now added \cs{IfExplAtLeastTF} as a test working
+in the same way as \cs{IfPackageAtLeastTF} but focused on the
+pre-loaded programming layer. Programmers can check the date of
+\pkg{expl3} they are using in the \texttt{.log}, as it appears both at
+the start and end in the format
+\begin{verbatim}
+ L3 programming layer <YYYY-MM-DD>
+\end{verbatim}
+just after the line which identifies the format (\texttt{LaTeX2e}, etc.).
+%
+\githubissue{1004}
+
+
+\section{Code improvements}
+
+\subsection{Support for tabs in \cs{verb*} and \env{verbatim*}}
+
+\LaTeX{} converts a single tab to a single space, which is then treated like a
+\enquote{real} space in typesetting. The same has been true to date inside
+\cs{verb}, but was done in a way that meant that they remained as normal spaces
+even in \cs{verb*}, etc. We have now adjusted the code so that tabs are
+retained within the argument to \cs{verb} and \cs{verb*}, and the
+\env{verbatim} and \env{verbatim*} environments, independently from
+spaces, and are set up to print in the same way spaces do. This means that they
+now generate visible spaces inside \cs{verb*} and \env{verbatim*}, and their
+behavior can be adjusted if required to be different from that of spaces.
+%
+\githubissue{1085}
+
+
+\subsection{Improved argument checking for box commands}
+Previously if an alignment option had an unexpected value, such as
+\verb|\makebox[4cm][x]{text}|,
+no warning was given but the box content was silently discarded.
+This will now produce a warning and act like the default \texttt{c} alignment.
+\cs{framebox} and \cs{parbox} have a similar change.
+%
+\githubissue{1072}
+
+
+\subsection{Aligning status of tilde with other active characters}
+
+Some time ago we revised the definition of active characters in \pdfTeX{} to
+allow the full range of UTF-8 codepoints to be used in for example labels,
+file names, etc. However, \verb|~| was not changed at that point as it is active
+independent of the engine in use. This has now been corrected: the definition
+of \verb|~| is an engine-protected one which gives the string version of the
+character if used inside a csname.
+
+\finalpagebreak
+
+\subsection{In the programming layer}
+
+In the programming layer (\pkg{expl3}), we have revised the behavior of the
+titlecasing function to enable this to either titlecase only the first word of
+the input, or to titlecase every word. This should be transparent at the
+document level but will be useful for programmers.
+
+We have also added the ability to define variables and functions inside
+\cs{fpeval} (at the \pkg{expl3} level this is \cs{fp\_eval:n}). This allows
+programmers to create non-standard functions that can then be used inside
+\cs{fpeval}. For example, this could be used to create a new function
+\texttt{dinner}:
+\begin{verbatim}
+\ExplSyntaxOn
+\fp_new_variable:n{duck}
+\fp_new_function:n{dinner}
+\fp_set_function:nnn{dinner}{duck}
+ {duck - 0.25 * duck}
+\fp_set_variable:nn{duck}{1}
+$\fp_eval:n{duck}
+ >\fp_eval:n{dinner(duck)}
+ \fp_set_variable:nn{duck}{dinner(duck)}
+ >\fp_eval:n{dinner(duck)}
+ \fp_set_variable:nn{duck}{dinner(duck)}
+ >\fp_eval:n{dinner(duck)}
+ \fp_set_variable:nn{duck}{dinner(duck)}
+ >\fp_eval:n{dinner(duck)}
+$
+\ExplSyntaxOff
+\end{verbatim}
+
+The computation above would then generate
+\begin{quote}
+\ExplSyntaxOn
+\fp_new_variable:n{duck}
+\fp_new_function:n{dinner}
+\fp_set_function:nnn{dinner}{duck}
+ {duck - 0.25 * duck}
+\fp_set_variable:nn{duck}{1}
+$\fp_eval:n{duck}
+ >\fp_eval:n{dinner(duck)}
+ \fp_set_variable:nn{duck}{dinner(duck)}
+ >\fp_eval:n{dinner(duck)}
+ \fp_set_variable:nn{duck}{dinner(duck)}
+ >\fp_eval:n{dinner(duck)}
+ \fp_set_variable:nn{duck}{dinner(duck)}
+ >\fp_eval:n{dinner(duck)}
+$
+\ExplSyntaxOff
+\end{quote}
+
+Users will be able to access added functions without needing to use the
+\pkg{expl3} layer. It is possible that a future release of \LaTeX{} will
+add the ability to create and set floating point variables at the
+document level: this will be examined based on feedback on the
+utility of the programming layer change.
+
+
+\section{\emph{Removed} kernel commands}
+
+It is very rare that commands are removed from the \LaTeX{} kernel. However, in
+this release we have elected to remove \cs{GetDocumentCommandArgSpec},
+\cs{GetDocumentEnvironmentArgSpec}, \cs{ShowDocumentCommandArgSpec} and
+\cs{ShowDocumentEnvironmentArgSpec} from the kernel. These commands have been
+moved back to the \enquote{stub} \pkg{xparse} provided in \pkg{l3packages}. The
+reason for this change is that the removed commands exposed implementation
+details. They were essentially debugging tools which with hindsight should
+not have been made available directly in the kernel.
+
+
+% \section{Bug fixes}
+
+\finalpagebreak
+
+\section{Changes to packages in the \pkg{tools} category}
+
+\subsection{\pkg{longtable}: correct p-column definition}
+
+In general the \pkg{longtable} implementation follows the \pkg{array}
+usage but the package didn't take over a change made 1992 in
+\pkg{array} which adjusted the handling of the strut inserted at the
+begin of p-columns. As a consequence there are a number of
+inconsistencies in the output of p-columns between \pkg{tabular} and
+\pkg{longtable}. This has been corrected; \pkg{longtable} now uses for
+the strut the same definition as \pkg{array}.
+%
+\githubissue{1128}
+
+\medskip
+\tubcommand{\newpage}
+
+\begin{thebibliography}{9}
+
+%\fontsize{9.3}{11.3}\selectfont
+
+
+\bibitem{38:Lamport}
+Leslie Lamport.
+\newblock \emph{{\LaTeX}: {A} Document Preparation System: User's Guide and Reference
+ Manual}.
+\newblock \mbox{Addison}-Wesley, Reading, MA, USA, 2nd edition, 1994.
+\newblock ISBN 0-201-52983-1.
+\newblock Reprinted with corrections in 1996.
+
+
+\bibitem{38:ltnews} \LaTeX{} Project Team.
+ \emph{\LaTeXe{} news 1--38}.\\
+ \url{https://latex-project.org/news/latex2e-news/ltnews.pdf}
+
+\bibitem{38:blueprint} Frank Mittelbach and Chris Rowley.
+ \emph{\LaTeX{} Tagged PDF \Dash A blueprint for a large project}.\\
+ \url{https://latex-project.org/publications/indexbyyear/2020/}
+
+
+
+\end{thebibliography}
+
+\end{document}