summaryrefslogtreecommitdiff
path: root/macros
diff options
context:
space:
mode:
Diffstat (limited to 'macros')
-rw-r--r--macros/generic/witharrows/README.md7
-rw-r--r--macros/generic/witharrows/witharrows-french.pdfbin260589 -> 266363 bytes
-rw-r--r--macros/generic/witharrows/witharrows-french.tex160
-rw-r--r--macros/generic/witharrows/witharrows.dtx609
-rw-r--r--macros/generic/witharrows/witharrows.pdfbin616385 -> 639742 bytes
-rw-r--r--macros/latex/contrib/bibleref/CHANGES5
-rw-r--r--macros/latex/contrib/bibleref/bibleref.dtx43
-rw-r--r--macros/latex/contrib/bibleref/bibleref.pdfbin286825 -> 286852 bytes
-rw-r--r--macros/latex/contrib/bibleref/samples/sample-categories.pdfbin12303 -> 12301 bytes
-rw-r--r--macros/latex/contrib/bibleref/samples/sample-indextools.pdfbin9463 -> 9462 bytes
-rw-r--r--macros/latex/contrib/bibleref/samples/sample-xidx.pdfbin19439 -> 19167 bytes
-rw-r--r--macros/latex/contrib/bibleref/samples/sample.pdfbin39426 -> 39145 bytes
-rw-r--r--macros/latex/contrib/fbox/CHANGELOG1
-rw-r--r--macros/latex/contrib/fbox/doc/fbox.pdfbin43022 -> 44756 bytes
-rw-r--r--macros/latex/contrib/fbox/doc/fbox.tex53
-rw-r--r--macros/latex/contrib/fbox/latex/fbox.sty45
-rw-r--r--macros/latex/contrib/xfakebold/Changes1
-rw-r--r--macros/latex/contrib/xfakebold/doc/xfakebold-doc.pdfbin96288 -> 96190 bytes
-rw-r--r--macros/latex/contrib/xfakebold/doc/xfakebold-doc.tex7
-rw-r--r--macros/latex/contrib/xfakebold/latex/xfakebold.sty8
20 files changed, 758 insertions, 181 deletions
diff --git a/macros/generic/witharrows/README.md b/macros/generic/witharrows/README.md
index a8453ea275..3ca957c2a0 100644
--- a/macros/generic/witharrows/README.md
+++ b/macros/generic/witharrows/README.md
@@ -22,11 +22,12 @@ The package `witharrows` is present in the distributions MiKTeX, TeXLive and Mac
For a manual installation:
-* put the files `witharrows.ins` dans `witharrows.dtx` in the same directory;
+* put the files `witharrows.ins` and `witharrows.dtx` in the same directory;
* run `latex witharrows.ins`.
The files `witharrows.sty` and `witharrows.tex` will be generated.
-The file `witharrows.sty` is the only file necessary to use the extension `witharrows` with LaTeX (with `\usepackage{witharrows}`).
+The file `witharrows.sty` is the only file necessary to use the extension `witharrows` with LaTeX (with `\usepackage{witharrows}`). You have to put it in the same directory as your document or (best) in a `texmf` tree.
-The file `witharrows.tex` is the only file necessary to use the extension `witharrows` with plain-TeX (with `\input{witharrows}`).
+
+The file `witharrows.tex` is the only file necessary to use the extension `witharrows` with plain-TeX (with `\input{witharrows}`). You have to put it in the same directory as your document or (best) in a `texmf` tree.
diff --git a/macros/generic/witharrows/witharrows-french.pdf b/macros/generic/witharrows/witharrows-french.pdf
index ffb9a424e2..9a9a5e3918 100644
--- a/macros/generic/witharrows/witharrows-french.pdf
+++ b/macros/generic/witharrows/witharrows-french.pdf
Binary files differ
diff --git a/macros/generic/witharrows/witharrows-french.tex b/macros/generic/witharrows/witharrows-french.tex
index 1d3605543a..95b3e77256 100644
--- a/macros/generic/witharrows/witharrows-french.tex
+++ b/macros/generic/witharrows/witharrows-french.tex
@@ -82,11 +82,11 @@ le calcul mathématique présenté.
\vspace{1cm}
Dans la suite, on décrira l'extension LaTeX \pkg{witharrows} (néanmoins \pkg{witharrows} peut aussi être utilisé en
-plain-TeX : voir à ce sujet p.~\pageref{plain-TeX}). Cette extension peut être utilisée avec |xelatex|,
-|lualatex|, |pdflatex| mais aussi avec le cheminement classique |latex|-|dvips|-|ps2pdf|
-(ou Adobe Distiller). L'extension \pkg{witharrows} charge les extensions \pkg{expl3}, \pkg{xparse}, \pkg{tikz}
-ainsi que les extensions Tikz \pkg{arrows.meta} et \pkg{bending}. Les flèches sont tracées avec Tikz et donc
-plusieurs compilations peuvent être nécessaires.
+plain-TeX : voir à ce sujet p.~\pageref{plain-TeX}). Cette extension peut être utilisée avec |xelatex|, |lualatex|,
+|pdflatex| mais aussi avec le cheminement classique |latex|-|dvips|-|ps2pdf| (ou Adobe Distiller). L'extension
+\pkg{witharrows} charge les extensions \pkg{l3keys2e}, \pkg{xparse}, \pkg{tikz}, \pkg{varwidth} ainsi que les
+bibliothèques Tikz \pkg{arrows.meta} et \pkg{bending}. Les flèches sont tracées avec Tikz et donc plusieurs
+compilations peuvent être nécessaires.
\bigskip
Cette extension fournit un environnement |{WithArrows}| pour construire des alignements d'équations
@@ -95,7 +95,7 @@ avec des flèches pour les explications sur le côté droit.
\begin{Verbatim}
$\begin{WithArrows}
A & = (a+1)^2 ~emphase#\Arrow{on développe}@ \\
- & = a^2 + 2a + 1 % ne pas mettre de \\ ici
+ & = a^2 + 2a + 1 % <------ ne pas mettre de \\ ici
\end{WithArrows}$
\end{Verbatim}
@@ -209,7 +209,7 @@ A & = (a+1)^2 \Arrow[tikz=<-]{on factorise} \\
\end{WithArrows}$
\interitem
-Il est aussi possible de supprimer les deux pointes de flèche avec l'option Tikz «|-|».
+Il est aussi possible de supprimer les deux pointes de flèche avec l'option Tikz «|-|».\par\nobreak
\begin{Verbatim}
$\begin{WithArrows}
A & = (a+1)^2 \Arrow[~emphase#tikz=-@]{très classique} \\
@@ -494,7 +494,6 @@ présenté p.~\pageref{DispWithArrows}).
\begin{Verbatim}
\begin{DispWithArrows*}[~emphase#format = ccccc@,
wrap-lines,
- tikz = {align = flush left},
interline=1mm]
k & \;\le\; & t & \;\le\; & k+1 \\
\frac{1}{k+1} & \le & \frac{1}{t} & \le & \frac{1}{k}
@@ -507,7 +506,6 @@ k & \;\le\; & t & \;\le\; & k+1 \\
\end{Verbatim}
\begin{DispWithArrows*}[format = ccccc,
wrap-lines,
- tikz = {align = flush left},
interline=1mm]
k & \;\le\; & t & \;\le\; & k+1 \\
\frac{1}{k+1} & \le & \frac{1}{t} & \le & \frac{1}{k}
@@ -559,7 +557,7 @@ l'une des options |lr|, |rl| et |ll| (\emph{l} for \emph{left} en anglais). Ces
non verticales.
-Therefore
+Ainsi\enskip
$\begin{WithArrows}[displaystyle]
I
& = \int_{\frac{\pi}4}^0 \ln\Bigl(1+\tan\left(\tfrac{\pi}4-u\right)\Bigr)(-d u)
@@ -600,6 +598,7 @@ $\begin{WithArrows}
\interitem
L'environnement |{WithArrows}| propose aussi une option |group|. Avec cette option,
\emph{toutes} les flèches de l'environnement sont regroupées sur une même verticale calée à gauche.
+\label{group}
%
\begin{Verbatim}[formatcom=\small\color{gray}]
$\begin{WithArrows}[~emphase#displaystyle,group@]
@@ -636,12 +635,12 @@ une même verticale qui est calée à gauche.
\bigskip
$\begin{WithArrows}[groups]
-A & = B \Arrow{one} \\
- & = C+D \Arrow{two} \\
+A & = B \Arrow{un} \\
+ & = C+D \Arrow{deux} \\
& = D' \\
& = E+F+G+H+I \\
- & = K + L + M \Arrow{three}\\
- & = N \Arrow{four}\\
+ & = K + L + M \Arrow{trois}\\
+ & = N \Arrow{quatre}\\
& = O
\end{WithArrows}$
@@ -685,6 +684,90 @@ $\begin{WithArrows}[interline=1mm,groups]
& = \frac1{\cos^nx}\cdot\frac{\sin(n+1)x}{\sin x}
\end{WithArrows}$
+
+\interitem
+\section{L'option « o » pour des flèches individuelles}
+
+\label{option-o}
+
+Considérons, dans un environnement donné, deux flèches notées formellement $a$ et $b$.
+
+On notera $i_a$ et $i_b$ les numéros des lignes de départ de $a$ et $b$ et $f_a$ et $f_b$ les numéros de leurs
+lignes d'arrivée. On a bien entendu $i_a \le f_a$ et $i_b \le f_b$
+
+\smallskip
+On dira que la flèche~$a$ \emph{recouvre} la flèche~$b$ lorsque $i_a \le i_b \le f_b \le f_a$
+
+
+\medskip
+\parbox{8cm}{Dans l'exemple ci-contre, la flèche rouge recouvre la flèche bleue.}\hspace{3cm}
+$\begin{WithArrows}[c]
+A & = B \Arrow[tikz=red,jump=3]{}\\
+ & = C \Arrow[tikz=blue]{}\\
+ & = D \\
+ & = E
+\end{WithArrows}$
+
+\bigskip
+Au niveau local, il existe une option |o|. Cette option n'est disponible que lorsque l'on est en mode |group| ou bien
+en mode |groups| (cf. p.~\pageref{group}).
+
+Une flèche de type |o| est tracée avec un décalage horizontal (comme celui fixé par |xoffset|) calculé
+automatiquement en fonction des flèches qu'elle recrouvre.\footnote{Parmi les flèches recouvertes, les flèches
+ indépendantes (c'est-à-dire celles qui ont une option explicite |rr|, |ll|, |rl|, |lr|, |i|, |up| ou |down|) ne
+ sont pas prises en compte pour le calcul du |xoffset|.}
+
+
+\bigskip
+\begin{BVerbatim}[boxwidth=10cm,baseline=c]
+$\begin{WithArrows}[groups]
+A & = B \Arrow{un}\Arrow[~emphase#o@,jump=3]{direct} \\
+ & = C + C \Arrow{deux} \\
+ & = D + D + D \Arrow{trois} \\
+ & = E + E \\
+ & = F + F
+\end{WithArrows}$
+\end{BVerbatim}
+$\begin{WithArrows}[c,groups]
+A & = B \Arrow{un}\Arrow[o,jump=3]{direct} \\
+ & = C + C \Arrow{deux} \\
+ & = D + D + D \Arrow{trois} \\
+ & = E + E \\
+ & = F + F
+\end{WithArrows}$
+
+
+
+\interitem
+Les flèches de type |o| peuvent elles-mêmes être recouvertes par d'autres flèches de type~|o|:\par\nobreak
+
+\bigskip
+\begin{BVerbatim}
+$\begin{WithArrows}[groups]
+A & = B \Arrow{un}\Arrow[~emphase#o@,jump=2]{deux}\Arrow[~emphase#o@,jump=3]{trois}\\
+ & = C \\
+ & = D \\
+ & = E + E + E + E + E + E + E
+\end{WithArrows}$
+\end{BVerbatim}
+
+
+\bigskip
+$\begin{WithArrows}[c,groups]
+A & = B \Arrow{un}\Arrow[o,jump=2]{deux}\Arrow[o,jump=3]{trois}\\
+ & = C \\
+ & = D \\
+ & = E + E + E + E + E + E + E
+\end{WithArrows}$
+
+\bigskip
+L'espace (horizontal) entre une flèche de type \verb|o| et les flèches immédiatement recouvertes est fixé par le
+paramètre \verb|xoffset-for-o-arrows| que l'on peut régler avec \verb|\WithArrowsOptions| (valeur initiale : 2~mm).
+
+\bigskip
+\emph{Remarque} : La lettre |o| a été choisie car c'est la première lettre du mot anglais \emph{over}. Une flèche
+de type~|o| est \emph{au-dessus} des flèches qu'elle recouvre.
+
\interitem
\section{Les options « up » et « down » pour des flèches individuelles}
@@ -717,8 +800,8 @@ A & = B
\vspace{1cm}
-Les options |up| et |down| nécessitent l'extension \pkg{varwidth} et l'extension Tikz \pkg{calc}. Si elles n'ont
-pas été chargées au préalable par l'utilisateur, une erreur sera levée.
+Les options |up| et |down| nécessitent la bibliothèque Tikz \pkg{calc}. Si elle n'a pas été chargée au préalable par
+l'utilisateur, une erreur sera levée.
\vspace{1cm}
Les options |up| et |down| peuvent en fait prendre comme valeur une liste de couples clé-valeur.
@@ -1283,7 +1366,8 @@ P & \vartriangleleft Q
\medskip
Dans le cas présent, il aurait été plus facile d'utiliser une commande |\Arrow| dans le |code-after| mais
-c'était seulement un exemple pour expliquer comment les nœuds Tikz créés par \pkg{witharrows} peuvent être utilisés.
+c'était seulement un exemple pour illustrer comment les nœuds Tikz créés par \pkg{witharrows} peuvent être
+utilisés.
\bigskip
Dans l'exemple suivant, on crée des environnements |{WithArrows}| nommés «|premier|» et «|second|» et on dessine
@@ -2113,6 +2197,48 @@ $\begin{WithArrows}[interline=0.5ex]
\bigskip
+\subsection{Une commande \textbackslash DoubleArrow}
+
+En utilisant l'option |o| (cf. p. \pageref{option-o}) disponible au niveau local, on peut facilement écrire une
+commande |\DoubleArrow| pour deux flèches allant en sens inverse l'une de l'autre.
+
+\bigskip
+\begin{Verbatim}
+\NewDocumentCommand \DoubleArrow { O {} m m }
+ {
+ \Arrow[tikz=->,~#1]{~#2}%
+ \Arrow[o,tikz=<-,~#1]{~#3}
+ }
+\end{Verbatim}
+
+
+\NewDocumentCommand \DoubleArrow { O {} m m }
+ {
+ \Arrow[tikz=->,#1]{#2}%
+ \Arrow[o,tikz=<-,#1]{#3}
+ }
+
+
+\bigskip
+Exemple d'utilisation :
+
+\begin{Verbatim}
+$\begin{WithArrows}[groups]
+A & = (a+b)^2 \DoubleArrow[tikz={font=\bfseries}]{développement}{factorisation} \\
+ & = a^2 + 2ab+b^2
+\end{WithArrows}$
+\end{Verbatim}
+
+\bigskip
+$\begin{WithArrows}[groups]
+A & = (a+b)^2 \DoubleArrow[tikz={font=\bfseries}]{développement}{factorisation} \\
+ & = a^2 + 2ab+b^2
+\end{WithArrows}$
+
+
+
+
+\bigskip
\subsection{Modifier la forme des nœuds}
Il est possible de changer la forme des étiquettes, qui sont des nœuds Tikz, en
diff --git a/macros/generic/witharrows/witharrows.dtx b/macros/generic/witharrows/witharrows.dtx
index fc8cd3ae2a..9a4b5067ef 100644
--- a/macros/generic/witharrows/witharrows.dtx
+++ b/macros/generic/witharrows/witharrows.dtx
@@ -15,8 +15,8 @@
%
% \fi
% \iffalse
-\def\myfileversion{2.4}
-\def\myfiledate{2020/03/31}
+\def\myfileversion{2.5}
+\def\myfiledate{2020/06/22}
%
%
%<*batchfile>
@@ -96,13 +96,12 @@ version 2005/12/01 or later.
% \end{abstract}
%
%
-% \vspace{1cm}
-% In this document, we describe the LaTeX extension
+% \vspace{1cm} In this document, we describe the LaTeX extension
% \pkg{witharrows} (however, \pkg{witharrows} can also be used with plain-TeX:
% see p.~\pageref{plain-TeX}). This package can be used with |xelatex|,
% |lualatex|, |pdflatex| but also by the classical workflow
% |latex|-|dvips|-|ps2pdf| (or Adobe Distiller). This package loads the packages
-% \pkg{expl3}, \pkg{l3keys2e}, \pkg{xparse}, \pkg{tikz} and the Tikz libraries
+% \pkg{l3keys2e}, \pkg{xparse}, \pkg{varwidth}, \pkg{tikz} and the Tikz libraries
% \pkg{arrows.meta} and \pkg{bending}. The arrows are drawn with Tikz and that's
% why several compilations may be necessary.
%
@@ -113,7 +112,7 @@ version 2005/12/01 or later.
% \begin{Verbatim}
% $\begin{WithArrows}
% A & = (a+1)^2 ~emphase#\Arrow{we expand}@ \\
-% & = a^2 + 2a + 1 % don't put \\ here
+% & = a^2 + 2a + 1 % <------- don't put \\ here
% \end{WithArrows}$
% \end{Verbatim}
%
@@ -500,6 +499,7 @@ version 2005/12/01 or later.
% command |\MultiArrow|: these commands are described in the section concerning
% the nested environments, p.~\pageref{NestedEnv}.
%
+% \interitem
% \section{Numbers of columns}
%
% So far, we have used the environment |{WithArrows}| with two columns. However,
@@ -556,6 +556,7 @@ version 2005/12/01 or later.
% \end{DispWithArrows*}
%
%
+% \interitem
% \section{Precise positioning of the arrows}
%
%
@@ -638,6 +639,7 @@ version 2005/12/01 or later.
% The environment |{WithArrows}| gives also a |group| option. With this option,
% \emph{all} the arrows of the environment are grouped on a same vertical line
% and at a leftmost position.
+% \label{group}
% %
% \begin{Verbatim}[formatcom=\small\color{gray}]
% $\begin{WithArrows}[~emphase#displaystyle,group@]
@@ -724,6 +726,88 @@ version 2005/12/01 or later.
% & = \frac1{\cos^nx}\cdot\frac{\sin(n+1)x}{\sin x}
% \end{WithArrows}$
%
+%
+% \interitem
+% \section[The option 'o' for individual arrows]%
+% {The option ``o'' for individual arrows}
+%
+% \label{option-o}
+%
+% Let's consider, in a given environment, two arrows called $a$ and $b$.
+% We will note $i_a$ and $i_b$ the numbers of the initial lines of $a$ et $b$
+% dans $f_a$ and $f_b$ the numbers of the final lines. Of course, we have $i_a
+% \le f_a$ and $i_b \le f_b$
+%
+% \smallskip
+% We will say that the arrow~$a$ \emph{covers} the arrow~$b$ when $i_a \le i_b
+% \le f_b \le f_a$. We will also say that the arrow $a$ is \emph{over} the arrow~$b$.
+%
+% \bigskip
+% \parbox{8cm}{In the exemple on the right, the red arrow covers the blue one.}\hspace{3cm}
+% $\begin{WithArrows}[c]
+% A & = B \Arrow[tikz=red,jump=3]{}\\
+% & = C \Arrow[tikz=blue]{}\\
+% & = D \\
+% & = E
+% \end{WithArrows}$
+%
+% \medskip
+% On the local level, there exists a key |o|. This key is available only when
+% the option |group| or the option |groups| is in force (cf.~p.~\pageref{group}).
+%
+% An arrow of type |o| is drawn with an horizontal shift (such as those set by
+% |xoffset|) automatically computed by taking into account the arrows covered by
+% our arrow.\footnote{Among the covered arrows, the independent ones (that is to
+% say with an explicit key |rr|, |ll|, |lr|, |rl|, |i|, |up| or |down|) are not
+% taken into account in the computation of the value of |xoffset|.}
+%
+% \bigskip
+% \begin{BVerbatim}[boxwidth=10cm,baseline=c]
+% $\begin{WithArrows}[groups]
+% A & = B \Arrow{one}\Arrow[~emphase#o@,jump=3]{direct} \\
+% & = C + C \Arrow{two} \\
+% & = D + D + D \Arrow{three} \\
+% & = E + E \\
+% & = F + F
+% \end{WithArrows}$
+% \end{BVerbatim}
+% $\begin{WithArrows}[c,groups]
+% A & = B \Arrow{one}\Arrow[o,jump=3]{direct} \\
+% & = C + C \Arrow{two} \\
+% & = D + D + D \Arrow{three} \\
+% & = E + E \\
+% & = F + F
+% \end{WithArrows}$
+%
+%
+% \interitem
+% Arrows of type |o| may themselves be covered by other arrows of type~|o|.\par\nobreak
+%
+% \bigskip
+% \begin{BVerbatim}
+% $\begin{WithArrows}[groups]
+% A & = B \Arrow{one}\Arrow[~emphase#o@,jump=2]{two}\Arrow[~emphase#o@,jump=3]{three}\\
+% & = C \\
+% & = D \\
+% & = E + E + E + E + E + E + E
+% \end{WithArrows}$
+% \end{BVerbatim}
+%
+%
+% \bigskip
+% $\begin{WithArrows}[c,groups]
+% A & = B \Arrow{one}\Arrow[o,jump=2]{two}\Arrow[o,jump=3]{three}\\
+% & = C \\
+% & = D \\
+% & = E + E + E + E + E + E + E
+% \end{WithArrows}$
+%
+% \bigskip
+% The horizontal space between an arrow of type |o| and the arrows immediately
+% covered is fixed by the dimension \verb|xoffset-for-o-arrows| which can be set
+% which the command |\WithArrowsOptions| (initial value: 2~mm).
+%
+%
% \interitem
%
% \section[The options 'up' and 'down' for individual arrows]%
@@ -757,9 +841,8 @@ version 2005/12/01 or later.
%
%
% \vspace{1cm}
-% The options |up| and |down| require the package \pkg{varwidth} and the Tikz
-% library \pkg{calc}. It they are not previously loaded by the user, an error
-% will be raised.
+% The options |up| and |down| require the Tikz library \pkg{calc}. It it has not
+% been previously loaded by the user, an error will be raised.
%
% \vspace{1cm}
% In fact, the options |up| and |down| may be used with a value which is a list
@@ -1019,6 +1102,7 @@ version 2005/12/01 or later.
% \right.$
%
%
+% \interitem
% \section{Arrows in nested environments}
%
% \label{NestedEnv}
@@ -1102,7 +1186,7 @@ version 2005/12/01 or later.
% \bigskip
% The specification of the row is constructed with the position of the concerned
% environment in the nesting tree, followed (after an hyphen) by the number of
-% the row.
+% that row.
%
% \bigskip
% In the previous example, there are two environments |{WithArrows}| nested in
@@ -1223,7 +1307,7 @@ version 2005/12/01 or later.
% in a future release).
%
%
-% \bigskip
+% \interitem
% \section{Arrows from outside environments \{WithArrows\}}
%
% If someone wants to draw arrows from outside the environments |{WithArrows}|,
@@ -1388,6 +1472,7 @@ version 2005/12/01 or later.
% to ([xshift=3mm]second-1-r.north) ;
% \end{tikzpicture}
%
+% \interitem
% \section{The environment \{DispWithArrows\}}
% \label{DispWithArrows}
%
@@ -1534,7 +1619,7 @@ version 2005/12/01 or later.
% \medskip
% In the following example, the key |{subequations}| is fixed by the command
% |\WithArrowsOptions|. Each environment |{DispWithArrows}| will be subnumerated
-% (in the scope of the |\WithArrowsOptions|)
+% (in the scope of |\WithArrowsOptions|)
% \begin{Verbatim}
% ~emphase#\WithArrowsOptions{subequations}@
% First environment.
@@ -1782,7 +1867,7 @@ version 2005/12/01 or later.
% ``|replace-left-brace-by = [\enskip|'' will compose with a bracket and add also a
% |\enskip| after this bracket.
%
-% \bigskip
+% \interitem
% \section{Advanced features}
%
% \subsection{Utilisation with plain-TeX}
@@ -1813,6 +1898,7 @@ version 2005/12/01 or later.
% deal with the number of the equations are not available (since they rely upon
% the system of tags of LaTeX).
%
+% \bigskip
% \subsection{The option tikz-code : how to change the shape of the arrows}
%
% \label{tikz-code}
@@ -2153,6 +2239,7 @@ version 2005/12/01 or later.
%
%
%
+% \interitem
% \section{Examples}
%
% \subsection{\textbackslash MoveEqLeft}
@@ -2189,6 +2276,49 @@ version 2005/12/01 or later.
%
%
% \bigskip
+% \subsection{A command \textbackslash DoubleArrow}
+%
+% By using the key |o| (cf. p. \pageref{option-o}) available at the local level,
+% it's easy to write a command |\DoubleArrow| for two arrows going in opposite
+% directions.
+%
+% \bigskip
+% \begin{Verbatim}
+% \NewDocumentCommand \DoubleArrow { O {} m m }
+% {
+% \Arrow[tikz=->,~#1]{~#2}%
+% \Arrow[o,tikz=<-,~#1]{~#3}
+% }
+% \end{Verbatim}
+%
+%
+% \NewDocumentCommand \DoubleArrow { O {} m m }
+% {
+% \Arrow[tikz=->,#1]{#2}%
+% \Arrow[o,tikz=<-,#1]{#3}
+% }
+%
+%
+% \bigskip
+% Example of utilisation:
+%
+% \begin{Verbatim}
+% $\begin{WithArrows}[groups]
+% A & = (a+b)^2 \DoubleArrow[tikz={font=\bfseries}]{expansion}{factorization} \\
+% & = a^2 + 2ab+b^2
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% \bigskip
+% $\begin{WithArrows}[groups]
+% A & = (a+b)^2 \DoubleArrow[tikz={font=\bfseries}]{expansion}{factorization} \\
+% & = a^2 + 2ab+b^2
+% \end{WithArrows}$
+%
+%
+%
+%
+% \bigskip
% \subsection{Modifying the shape of the nodes}
%
% It's possible to change the shape of the labels, which are Tikz nodes, by
@@ -2506,7 +2636,6 @@ version 2005/12/01 or later.
% \begin{macrocode}
%<*LaTeX>
\RequirePackage{tikz}
-\RequirePackage{expl3}[2020/02/08]
%</LaTeX>
%<*plain-TeX>
\input tikz.tex
@@ -2546,11 +2675,9 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
-% The package \pkg{xparse} will be used to define the environments
-% |{WithArrows}|, |{DispWithArrows}|, |{DispWithArrows*}| and the commands
-% |\Arrow|, |\WithArrowsOptions| and |\WithArrowsNewStyle|.
% \begin{macrocode}
\RequirePackage { xparse } [ 2019-01-01 ]
+\RequirePackage { varwidth }
%</LaTeX>
% \end{macrocode}
%
@@ -2739,7 +2866,7 @@ version 2005/12/01 or later.
\clist_map_inline:nn
{
amsmath, amsthm, autonum, cleveref, hyperref, mathtools, showlabels,
- typedref, unicode-math, varwidth
+ typedref, unicode-math
}
{
\bool_new:c { c_@@_#1_loaded_bool }
@@ -3194,7 +3321,7 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
-% The parameter |\l_@@_up_and_down_radius_dim| corresponds to the option
+% The parameter |\l_@@_up_and_down_radius_dim| corresponds to option
% |radius_for_up_and_down|.
% \begin{macrocode}
\dim_new:N \l_@@_up_and_down_radius_dim
@@ -3202,6 +3329,23 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
+% The sequence |\l_@@_o_arrows_seq| will be used to store the numbers of the
+% arrows which are of type |o| (for \emph{over}) (they are drawn \emph{after}
+% the other arrows).
+% \begin{macrocode}
+\seq_new:N \l_@@_o_arrows_seq
+% \end{macrocode}
+%
+% \bigskip
+% The dimension |\l_@@_xoffset_for_o_arrows_dim| is the xoffset added when
+% drawing an arrow of type |o| (for \emph{over}).
+%
+% \begin{macrocode}
+\dim_new:N \l_@@_xoffset_for_o_arrows_dim
+\dim_set:Nn \l_@@_xoffset_for_o_arrows_dim { 2 mm }
+% \end{macrocode}
+%
+% \bigskip
% \subsection{The definition of the options}
%
% There are four levels where options can be set:
@@ -3591,6 +3735,8 @@ version 2005/12/01 or later.
allow-duplicate-names .code:n =
\@@_msg_redirect_name:nn { Duplicate~name } { none } ,
allow-duplicate-names .value_forbidden:n = true ,
+ xoffset-for-o-arrows .dim_set:N = \l_@@_xoffset_for_o_arrows_dim ,
+ xoffset-for-o-arrows .value_required:n = true ,
unknown .code:n =
\@@_sort_seq:N \l_@@_options_WithArrowsOptions_seq
\@@_error:n { Unknown~option~WithArrowsOptions }
@@ -3609,7 +3755,7 @@ version 2005/12/01 or later.
displaystyle, end-adjust, fleqn, group, groups, i, interline, jot, ll, lr,
mathindent, max-length-of-arrow, no-arrows, up-and-down, rl, rr,
show-node-names, show-nodes, start-adjust, t, tikz, wrap-lines, xoffset,
- ygap, ystart,
+ xoffset-for-o-arrows, ygap, ystart,
%<*LaTeX>
allow-multiple-labels, nonumber, notag, standard-behaviour-with-items,
tagged-lines
@@ -3652,7 +3798,7 @@ version 2005/12/01 or later.
% The options of an individual arrow are parsed twice. The first pass is when
% the command |\Arrow| is read. The second pass is when the arrows are drawn
% (after the end of the environment |{WithArrows}| or |{DispWithArrows}|). Now,
-% we present the keys set for the first pass. The main goal is to extract
+% we present the set of keys for the first pass. The main goal is to extract
% informations which will be necessary during the scan of the arrows. For
% instance, we have to know if some arrows are ``independent'' or use the
% option ``new-group''.
@@ -3674,11 +3820,22 @@ version 2005/12/01 or later.
rl .default:n = NoValue ,
lr .default:n = NoValue ,
i .default:n = NoValue ,
- new-group .value_forbidden:n = true,
+ new-group .value_forbidden:n = true ,
new-group .code:n =
\int_compare:nTF { \l_@@_pos_arrow_int = 6 }
{ \str_set:Nn \l_@@_status_arrow_str { new-group } }
{ \@@_error:n { new-group~without~groups } } ,
+ o .code:n =
+ \str_if_empty:NTF \l_@@_previous_key_str
+ {
+ \int_compare:nNnTF \l_@@_pos_arrow_int < 6
+ { \@@_error:n { invalid~key~o } }
+ {
+ \str_set:Nn \l_@@_status_arrow_str { over }
+ \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_str
+ }
+ }
+ { \@@_error:n { Incompatible~options~in~Arrow } } ,
% \end{macrocode}
%
% \medskip
@@ -3718,8 +3875,8 @@ version 2005/12/01 or later.
\seq_new:N \l_@@_options_Arrow_seq
\@@_set_seq_of_str_from_clist:Nn \l_@@_options_Arrow_seq
{
- adjust, end-adjust, i, jump, ll, lr, rl, rr, start-adjust, tikz, tikz-code,
- xoffset
+ adjust, end-adjust, i, jump, ll, lr, o , rl, rr, start-adjust, tikz,
+ tikz-code, xoffset
}
% \end{macrocode}
%
@@ -3753,6 +3910,7 @@ version 2005/12/01 or later.
rl .code:n = \@@_fix_pos_arrow:n 2 ,
lr .code:n = \@@_fix_pos_arrow:n 0 ,
i .code:n = \@@_fix_pos_arrow:n 5 ,
+ o .code:n = \str_set:Nn \l_@@_previous_key_str { o } ,
% \end{macrocode}
%
% \medskip
@@ -3848,7 +4006,7 @@ version 2005/12/01 or later.
% ``final'', ``status'', ``options'', ``label'' and ``input-line''. In order to
% compute the value of ``final'' (the destination row of the arrow), we have to
% take into account a potential option |jump|. In order to compute the value of
-% the field ``status'', we have to take into account options as |ll|, |rl|,
+% the field ``status'', we have to take into account options |ll|, |rl|,
% |rr|, |lr|, etc. or |new-group|.
%
% We will do that job with a first analyze of the options of the command
@@ -3878,8 +4036,8 @@ version 2005/12/01 or later.
\prop_put:NnV \l_tmpa_prop { final } \l_tmpa_int
% \end{macrocode}
%
-% \item The ``status'' of the arrow, with 3 possible values: empty,
-% |independent|, or |new-group|.
+% \item The ``status'' of the arrow, with 4 possible values: empty,
+% |independent|, |new-group| or |over|.
% \begin{macrocode}
\prop_put:NnV \l_tmpa_prop { status } \l_@@_status_arrow_str
% \end{macrocode}
@@ -3895,10 +4053,17 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \item The number of the line where the command |\Arrow| is issued in the TeX
-% source (as of now, this is only useful for an error message).
+% source (as of now, this is only useful for some error messages).
% \begin{macrocode}
\prop_put:Nnx \l_tmpa_prop { input-line } \msg_line_number:
% \end{macrocode}
+%
+% \item The total width of the arrow (with the label)... but we don't know it
+% now and that's why we put |0 pt|. There are used for the arrows of type~|o|.
+% \begin{macrocode}
+ \prop_put:Nnn \l_tmpa_prop { width } { 0 pt }
+% \end{macrocode}
+%
% \end{enumerate}
%
% The property list has been created in a local variable for convenience. Now,
@@ -3986,14 +4151,13 @@ version 2005/12/01 or later.
% The variable |\l_@@_input_line_str| will be used only to store, for each
% command |\Arrow| the line (in the TeX file) where the command is issued. This
% information will be stored in the field ``input-line'' of the arrow. As of
-% now, this information is used only in the error message of an arrow impossible
-% to draw (because it arrives after the last row of the environment).
+% now, this information is used only in some error messages.
% \begin{macrocode}
\str_clear_new:N \l_@@_input_line_str
% \end{macrocode}
%
%
-% The initialization of the counters |\g_@@_arrow_int|, |\g_@@_line_int|,
+% Initialization of |\g_@@_arrow_int|, |\g_@@_line_int|,
% |\g_@@_col_int| and |\g_@@_static_col_int|. However, we have to save their
% previous values with the stacks created for this end.
% \begin{macrocode}
@@ -4822,12 +4986,12 @@ version 2005/12/01 or later.
\bool_if:NT \l_@@_qedhere_bool
{ \hbox_overlap_left:n \@@_qedhere_i: }
%</LaTeX>
- \pgfpicture
- \pgfrememberpicturepositiononpagetrue
- \pgfcoordinate
- { wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - v }
- \pgfpointorigin
- \endpgfpicture
+ \pgfpicture
+ \pgfrememberpicturepositiononpagetrue
+ \pgfcoordinate
+ { wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - v }
+ \pgfpointorigin
+ \endpgfpicture
%<*LaTeX>
}
%</LaTeX>
@@ -4859,7 +5023,7 @@ version 2005/12/01 or later.
%<*LaTeX>
\cs_new_protected:Npn \@@_analyze_end:Nn #1 #2
{
- \exp_args:NV \str_if_eq:nnT \l_@@_type_env_str { #2 }
+ \str_if_eq:VnT \l_@@_type_env_str { #2 }
{
\@@_error:n { newline~at~the~end~of~env }
\group_begin:
@@ -5224,7 +5388,9 @@ version 2005/12/01 or later.
{ pgf @ sh @ ns @ wa - \l_@@_prefix_str - \l_tmpa_int - v }
{ \@@_fatal:n { Inexistent~v-node } }
{
- \pgfpointanchor { wa - \l_@@_prefix_str - \l_tmpa_int - v } { center }
+ \pgfpointanchor
+ { wa - \l_@@_prefix_str - \l_tmpa_int - v }
+ { center }
\dim_compare:nNnT \pgf@x < \g_@@_right_x_dim
{ \dim_gset_eq:NN \g_@@_right_x_dim \pgf@x }
}
@@ -5562,7 +5728,8 @@ version 2005/12/01 or later.
{ g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
{ input-line } \l_@@_input_line_str
% \end{macrocode}
-%
+%
+%
% \bigskip
% We recall that, after the construction of the |\halign|, |\g_@@_line_int| is
% the total number of lines of the environment. Therefore, the conditionnal
@@ -5576,7 +5743,7 @@ version 2005/12/01 or later.
\int_compare:nNnF \l_@@_pos_arrow_int = 8
{ \@@_error:n { Too~few~lines~for~an~arrow } }
}
- \@@_code_for_possible_arrow:
+ \@@_treat_an_arrow_in_scan:
% \end{macrocode}
%
% \bigskip
@@ -5594,16 +5761,23 @@ version 2005/12/01 or later.
% situation occurs when all the arrows of the potential group arrive after the
% last line of the environment).
% \begin{macrocode}
- \bool_lazy_and:nnT
- { \bool_not_p:n { \int_compare_p:nNn \l_@@_pos_arrow_int = 7 } }
- { \int_compare_p:nNn \l_@@_first_arrow_of_group_int > 0 }
+ \bool_if:nT
+ {
+ ! \int_compare_p:nNn \l_@@_pos_arrow_int = 7
+ &&
+ \int_compare_p:nNn \l_@@_first_arrow_of_group_int > 0
+ }
{ \@@_draw_arrows:nn \l_@@_first_arrow_of_group_int \g_@@_arrow_int }
}
% \end{macrocode}
%
% \bigskip
+% The following command is only for the lisibility of the code. It's used only
+% once. Its name may be misleading. Indeed, it treats an arrow in the scan but
+% it \emph{may} trigger the construction of all arrows of a group if it detects
+% that a group has just been completed (with |\@@_draw_arrows:nn|)
% \begin{macrocode}
-\cs_new_protected:Npn \@@_code_for_possible_arrow:
+\cs_new_protected:Npn \@@_treat_an_arrow_in_scan:
{
% \end{macrocode}
% We test whether the previous arrow was in fact the last arrow of a group. In
@@ -5676,11 +5850,10 @@ version 2005/12/01 or later.
{
% \end{macrocode}
%
-% If the arrow is independent, we don't take into account this arrow for the
+% If the arrow is independent, we don't take into account that arrow for the
% detection of the end of the group.
% \begin{macrocode}
- \bool_if:nF
- { \str_if_eq_p:Vn \l_@@_status_arrow_str { independent } }
+ \str_if_eq:VnF \l_@@_status_arrow_str { independent }
{
% \end{macrocode}
% If the arrow is not independent, the arrow belongs to the current group and we
@@ -5710,7 +5883,7 @@ version 2005/12/01 or later.
% 8), we don't initialize |\l_@@_x_dim| because we want to use the same value of
% |\l_@@_x_dim| (computed during the first step) for all the groups.
% \begin{macrocode}
- \bool_if:nF { \str_if_eq_p:Vn \l_@@_status_arrow_str { independent } }
+ \str_if_eq:VnF \l_@@_status_arrow_str { independent }
{
\int_compare:nNnF \l_@@_pos_arrow_int = 8
{ \@@_update_x:nn \l_@@_initial_int \l_@@_final_int }
@@ -5767,6 +5940,9 @@ version 2005/12/01 or later.
{ g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
{ final } \l_tmpa_tl
\int_set:Nn \l_@@_final_int \l_tmpa_tl
+ \prop_get:cnN
+ { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+ { status } \l_@@_status_arrow_str
% \end{macrocode}
%
% \bigskip
@@ -5775,20 +5951,31 @@ version 2005/12/01 or later.
% that, after the construction of the |\halign|, |\g_@@_line_int| is the total
% number of lines of the environment).
% \begin{macrocode}
- \int_compare:nT { \l_@@_final_int <= \g_@@_line_int } \@@_draw_arrows_i:
+ \int_compare:nNnF \l_@@_final_int > \g_@@_line_int
+% \end{macrocode}
+%
+% \bigskip
+% If the arrow is of type |over| (key |o|), we don't draw that arrow now (those
+% arrows will be drawn after all the other arrows).
+% \begin{macrocode}
+ {
+ \str_if_eq:VnTF \l_@@_status_arrow_str { over }
+ { \seq_put_right:NV \l_@@_o_arrows_seq \l_@@_arrow_int }
+ \@@_draw_arrow:
+ }
\int_incr:N \l_@@_arrow_int
}
+ \@@_draw_o_arrows_of_the_group:
\group_end:
}
% \end{macrocode}
%
% \bigskip
-% The macro |\@@_draw_arrows_i:| is only for the lisibility of the code. The
-% first |\group_begin:| is for the options of the arrows (but we remind that the
-% options |ll|, |rr|, |rl|, |lr|, |i| and |jump| have already been extracted and
-% are not present in the field |options| of the property list of the arrow).
+% The first |\group_begin:| is for the options of the arrows (but we remind that
+% the options |ll|, |rr|, |rl|, |lr|, |i| and |jump| have already been extracted
+% and are not present in the field |options| of the property list of the arrow).
% \begin{macrocode}
-\cs_new_protected:Npn \@@_draw_arrows_i:
+\cs_new_protected:Npn \@@_draw_arrow:
{
\group_begin:
% \end{macrocode}
@@ -5863,9 +6050,6 @@ version 2005/12/01 or later.
\tl_set:Nx \l_@@_final_tl
{ \int_use:N \l_@@_final_int - \bool_if:NTF \l_@@_final_r_bool rl }
% \end{macrocode}
-% We use ``|.south|'' and ``|.north|'' because we want a small gap between two
-% consecutive arrows (and the Tikz nodes created have the shape of small
-% vertical segments: use option |show-nodes| to visualize the nodes).
%
% \bigskip
% The label of the arrow will be stored in |\l_tmpa_tl|.
@@ -6024,11 +6208,25 @@ version 2005/12/01 or later.
%<*plain-TeX>
\tikzpicture
%</plain-TeX>
- [
- @@_standard ,
- every~path / .style = WithArrows / arrow
- ]
+ [
+ @@_standard ,
+ every~path / .style = WithArrows / arrow
+ ]
+% \end{macrocode}
+% You keep track of the bouding box because we want to compute the total width
+% of the arrow (with the label) for the arrows of type |over|.
+% \begin{macrocode}
+ \pgf@relevantforpicturesizetrue
#1
+ \dim_compare:nNnTF \pgf@picminx = { 16000 pt }
+ { \dim_set_eq:NN \l_tmpa_dim \c_zero_dim }
+ { \dim_set:Nn \l_tmpa_dim { \pgf@picmaxx - \pgf@picminx } }
+ \dim_add:Nn \l_tmpa_dim \l_@@_xoffset_dim
+ \prop_gput:cnV
+ { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+ { width }
+ \l_tmpa_dim
+ \pgfresetboundingbox
%<*LaTeX>
\end{tikzpicture}
%</LaTeX>
@@ -6052,7 +6250,7 @@ version 2005/12/01 or later.
% |\l_@@_tikz_code_tl| (which corresponds to the option |tikz-code|).
% \begin{macrocode}
\bool_lazy_and:nnT \l_@@_wrap_lines_bool \l_@@_in_DispWithArrows_bool
- { \tl_set_eq:NN \l_@@_tikz_code_tl \c_@@_tikz_code_wrap_lines_tl }
+ { \tl_set_eq:NN \l_@@_tikz_code_tl \c_@@_tikz_code_wrap_lines_tl }
% \end{macrocode}
%
% \medskip
@@ -6110,14 +6308,26 @@ version 2005/12/01 or later.
% \begin{macrocode}
\dim_compare:nNnT \l_tmpa_dim > \c_zero_dim
{
- \path ( @@_label.west )
+ \path ( @@_label.west )
+%<*LaTeX>
+ node [ anchor = west ]
+ {
+ \begin { varwidth } { \l_tmpa_dim }
+ #3
+ \end { varwidth }
+ } ;
+%</LaTeX>
+%<*plain-TeX>
node [ anchor = west , text~width = \dim_use:N \l_tmpa_dim ]
- { #3 } ;
+ { #3 } ;
+%</plain-TeX>
}
}
% \end{macrocode}
%
% \bigskip
+% \subsubsection{The command update_x}
+%
% The command |\@@_update_x:nn| will analyze the lines between |#1| and
% |#2| in order to modify |\l_@@_x_dim| in consequence. More precisely,
% |\l_@@_x_dim| is increased if a line longer than the current value of
@@ -6140,8 +6350,185 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+% \bigskip
+% \subsubsection{We draw the arrows of type o}
+%
+% We recall that the arrows of type~|o| will be drawn \emph{over} (hence the
+% letter |o|) the other arrows. The arrows of type~|o| are available only when
+% the option |group| or the option |groups| is in force. The arrows of type~|o|
+% will be drawn group by group. The command |\@@_draw_o_arrows_of_the_group:| is
+% called after the construction of the (other) arrows of the group.
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_draw_o_arrows_of_the_group:
+ {
+% \end{macrocode}
+%
+% The numbers of the arrows of type |o| we have to draw are in the sequence
+% |\l_@@_o_arrows_seq|. We have to sort that sequence because the order in which
+% these arrows will be drawn matters.
+%
+% \begin{itemize}
+% \item The arrows which arrive first must be drawn first.
+% \item For arrows with the same final line, the arrows with lower initial line
+% must be drawn after (because they encompass the previous ones).
+% \end{itemize}
+%
+%
+% The second point ensures the expected output in situations such as in the
+% following example :
%
% \bigskip
+% \begin{BVerbatim}[boxwidth=6cm,baseline=c]
+% $\begin{WithArrows}[groups]
+% A & = B \Arrow[o,jump=3]{one}\\
+% & = C \Arrow[o,jump=2]{two}\\
+% & = D \Arrow{three} \\
+% & = E + E
+% \end{WithArrows}$
+% \end{BVerbatim}
+% \hspace{2cm}
+% $\begin{WithArrows}[groups,c]
+% A & = B \Arrow[o,jump=3]{one}\\
+% & = C \Arrow[o,jump=2]{two}\\
+% & = D \Arrow{three} \\
+% & = E + E
+% \end{WithArrows}$
+%
+% \bigskip
+% \begin{macrocode}
+ \seq_sort:Nn \l_@@_o_arrows_seq
+ {
+ \prop_get:cnN
+ { g_@@_arrow _ \l_@@_prefix_str _ ##1 _ prop }
+ { final } \l_tmpa_tl
+% \end{macrocode}
+% We recall that |\prop_get:cnN| retrieves token lists (here |\l_tmpa_tl| and
+% |\l_tmpb_tl|). We don't need to do an explicit conversion in \pkg{expl3}
+% integers because such token lists can be used directly in |\int_compare:nNnTF|.
+% \begin{macrocode}
+ \prop_get:cnN
+ { g_@@_arrow _ \l_@@_prefix_str _ ##2 _ prop }
+ { final } \l_tmpb_tl
+ \int_compare:nNnTF \l_tmpa_tl < \l_tmpb_tl
+ \sort_return_same:
+ {
+ \int_compare:nNnTF \l_tmpa_tl > \l_tmpb_tl
+ \sort_return_swapped:
+ {
+ \prop_get:cnN
+ { g_@@_arrow _ \l_@@_prefix_str _ ##1 _ prop }
+ { initial } \l_tmpa_tl
+ \prop_get:cnN
+ { g_@@_arrow _ \l_@@_prefix_str _ ##2 _ prop }
+ { initial } \l_tmpb_tl
+ \int_compare:nNnTF \l_tmpa_tl < \l_tmpb_tl
+ \sort_return_swapped:
+ \sort_return_same:
+ }
+ }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% Now, we can draw the arrows of type~|o| of the group in the order of the
+% sequence.
+% \begin{macrocode}
+ \seq_map_inline:Nn \l_@@_o_arrows_seq
+ {
+% \end{macrocode}
+% We retrieve the initial row and the final row of the arrow.
+% \begin{macrocode}
+ \prop_get:cnN
+ { g_@@_arrow _ \l_@@_prefix_str _ ##1 _ prop }
+ { initial } \l_tmpa_tl
+ \int_set:Nn \l_@@_initial_int \l_tmpa_tl
+ \prop_get:cnN
+ { g_@@_arrow _ \l_@@_prefix_str _ ##1 _ prop }
+ { final } \l_tmpa_tl
+ \int_set:Nn \l_@@_final_int \l_tmpa_tl
+% \end{macrocode}
+% The string |\l_@@_input_line_str| will be used only in some error messages.
+% \begin{macrocode}
+ \prop_get:cnN
+ { g_@@_arrow _ \l_@@_prefix_str _ ##1 _ prop }
+ { input-line } \l_@@_input_line_str
+% \end{macrocode}
+% We have to compute the maximal width of all the arrows (with their labels)
+% which are covered by our arrow. We will compute that dimension in
+% |\g_tmpa_dim|. We need global dimension because we will have to exit a
+% |\pgfpicture|.
+% \begin{macrocode}
+ \dim_gzero:N \g_tmpa_dim
+% \end{macrocode}
+% We will raise the boolean |\g_tmpa_bool| if we find an arrow ``under'' our
+% arrow (we should find at least once since you are drawing an arrow of
+% type~|o|: if not, we will raise an error\footnote{Maybe we will change that in
+% future versions.}).
+% \begin{macrocode}
+ \bool_set_false:N \g_tmpa_bool
+ \pgfpicture
+ \pgfrememberpicturepositiononpagetrue
+ \int_step_inline:nnn \l_@@_first_arrow_int \l_@@_last_arrow_int
+ {
+ \prop_get:cnN
+ { g_@@_arrow _ \l_@@_prefix_str _ ####1 _ prop }
+ { initial } \l_tmpa_tl
+ \prop_get:cnN
+ { g_@@_arrow _ \l_@@_prefix_str _ ####1 _ prop }
+ { final } \l_tmpb_tl
+ \prop_get:cnN
+ { g_@@_arrow _ \l_@@_prefix_str _ ####1 _ prop }
+ { status } \l_@@_status_arrow_str
+ \bool_if:nT
+ {
+ ! \int_compare_p:n { ##1 = ####1 }
+ && \int_compare_p:n { \l_@@_initial_int <= \l_tmpa_tl }
+ && \int_compare_p:n { \l_tmpb_tl <= \l_@@_final_int }
+% \end{macrocode}
+% We don't take into account the independent arrows because we have only
+% computed the \emph{width} of the arrows and that's why our arrow of type~|o|
+% will be positionned only relatively to the current group.
+% \begin{macrocode}
+ && ! \str_if_eq_p:Vn \l_@@_status_arrow_str { independent }
+ }
+ {
+% \end{macrocode}
+% The total width of the arrow (with its label) has been stored in a ``field''
+% of the arrow.
+% \begin{macrocode}
+ \bool_gset_true:N \g_tmpa_bool
+ \prop_get:cnN
+ { g_@@ _ arrow _ \l_@@_prefix_str _ ####1 _ prop }
+ { width }
+ \l_tmpa_tl
+% \end{macrocode}
+% We have to do a global affectation in order to exit the |pgfpicture|.
+% \begin{macrocode}
+ \dim_gset:Nn \g_tmpa_dim { \dim_max:nn \g_tmpa_dim \l_tmpa_tl }
+ }
+ }
+ \endpgfpicture
+% \end{macrocode}
+% The boolean |\g_tmpa_bool| is raised if at least one arrow has been found
+% ``under'' our arrow (it should be the case since we are drawing an arrow of
+% type~|o|).
+% \begin{macrocode}
+ \bool_if:NTF \g_tmpa_bool
+ {
+ \int_set:Nn \l_@@_arrow_int { ##1 }
+ \dim_set_eq:NN \l_@@_xoffset_dim \g_tmpa_dim
+ \dim_add:Nn \l_@@_xoffset_dim \l_@@_xoffset_for_o_arrows_dim
+% \end{macrocode}
+% \begin{macrocode}
+ \@@_draw_arrow:
+ }
+ { \@@_error:n { o~arrow~with~no~arrow~under } }
+ }
+ }
+% \end{macrocode}
+%
+% \bigskip
% The command |\WithArrowsLastEnv| is not used by the package \pkg{witharrows}.
% It's only a facility given to the final user. It gives the number of the last
% environment |{WithArrows}| at
@@ -6153,7 +6540,7 @@ version 2005/12/01 or later.
{ \int_use:N \g_@@_last_env_int }
%</LaTeX>
%<*plain-TeX>
-\cs_new:Npn \WithArrowsLastEnv { \int_use:N \g_@@_last_env_int }
+\cs_new:Npn \WithArrowsLastEnv { \int_use:N \g_@@_last_env_int }
%</plain-TeX>
% \end{macrocode}
%
@@ -6525,6 +6912,15 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \begin{macrocode}
+\@@_msg_new:nn { invalid~key~o }
+ {
+ The~key~'o'~for~individual~arrows~can~be~used~only~in~mode~
+ 'group'~or~in~mode~'groups'.\\
+ \c_@@_option_ignored_str
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
\@@_msg_new:nn { Value~for~a~key }
{
The~key~'\l_keys_key_str'~should~be~used~without~value. \\
@@ -6561,7 +6957,6 @@ version 2005/12/01 or later.
\seq_use:Nnnn \l_@@_options_WithArrows_seq {~and~} {,~} {~and~}.
}
% \end{macrocode}
-%
% \begin{macrocode}
\@@_msg_new:nnn { Unknown~option~DispWithArrows }
{
@@ -6626,7 +7021,7 @@ version 2005/12/01 or later.
This~error~is~fatal.
}
% \end{macrocode}
-%
+%
% \begin{macrocode}
\@@_msg_new:nn { Negative~jump }
{
@@ -6656,13 +7051,22 @@ version 2005/12/01 or later.
{ Too~few~lines~for~an~arrow }
{
Line~\l_@@_input_line_str\
- :~an~arrow~specified~in~the~row~\int_use:N \l_@@_initial_int\
+ :~an~arrow~specifiead~in~the~row~\int_use:N \l_@@_initial_int\
of~your~environment~\{\l_@@_type_env_str\}~can't~be~drawn~
because~it~arrives~after~the~last~row~of~the~environment. \\
If~you~go~on,~this~arrow~will~be~ignored.
}
% \end{macrocode}
%
+% \begin{macrocode}
+\@@_msg_new:nn { o~arrow~with~no~arrow~under }
+ {
+ Line~\l_@@_input_line_str\
+ :~there~is~no~arrow~'under'~your~arrow~of~type~'o'.\\
+ If~you~go~on,~this~arrow~won't~be~drawn.
+ }
+% \end{macrocode}
+%
% \begin{macrocode}
\@@_msg_new:nn { WithArrows~outside~math~mode }
{
@@ -6676,7 +7080,7 @@ version 2005/12/01 or later.
\@@_msg_new:nn { DispWithArrows~in~math~mode }
{
The~environment~\{\l_@@_type_env_str\}~should~be~used~only~outside~math~
- mode~like~the~environment~\{align\}~of~amsmath. \\
+ mode~like~the~environments~\{align\}~and~\{align*\}~of~amsmath. \\
This~error~is~fatal.
}
% \end{macrocode}
@@ -6936,11 +7340,10 @@ version 2005/12/01 or later.
% corresponding code is given here. It is independent of the main code of the
% extension \pkg{witharrows}.
%
-% This code is the only part of the code of \pkg{witharrows} which uses the
-% package \pkg{varwidth} and also the Tikz library |calc|. That's why we have
-% decided not to load by default this package and this library. If they are not
-% loaded, the user will have an error only when using the option |up| or the
-% option |down|.
+% This code is the only part of the code of \pkg{witharrows} which uses the the
+% Tikz library |calc|. That's why we have decided not to load by default this
+% library. If it is not loaded, the user will have an error only when using the
+% option |up| or the option |down|.
%
% \bigskip
% The keys |up| and |down| can be used with a value. This value is a list of
@@ -7002,7 +7405,7 @@ version 2005/12/01 or later.
{
\dim_set:Nn \l_tmpa_dim { \x2 - \x1 }
\begin { varwidth } \l_tmpa_dim
-% \end{macrocode}
+% \end{macrocode}a
% |\narrowragged| is a command of the package \pkg{varwidth}.
% \begin{macrocode}
\narrowragged
@@ -7227,51 +7630,35 @@ version 2005/12/01 or later.
\str_if_empty:NT \l_@@_previous_key_str
{
\str_set:Nn \l_@@_previous_key_str { up }
-%<*LaTeX>
- \bool_if:NTF \c_@@_varwidth_loaded_bool
+ \cs_if_exist:cTF { tikz@library@calc@loaded }
{
-%</LaTeX>
- \cs_if_exist:cTF { tikz@library@calc@loaded }
- {
- \keys_set:nV { WithArrows / up-and-down } \l_keys_value_tl
- \int_set:Nn \l_@@_pos_arrow_int 1
+ \keys_set:nV { WithArrows / up-and-down } \l_keys_value_tl
+ \int_set:Nn \l_@@_pos_arrow_int 1
% \end{macrocode}
% We have to set |\l_@@_wrap_lines_bool| to |false| because, otherwise, if the
% option |wrap_lines| is used at a higher level (global or environment), we will
% have a special affectation to |tikz-code| that will overwrite our affectation.
% \begin{macrocode}
- \bool_set_false:N \l_@@_wrap_lines_bool
+ \bool_set_false:N \l_@@_wrap_lines_bool
% \end{macrocode}
% The main action occurs now. We change the value of the |tikz-code|.
% \begin{macrocode}
- \tl_set_eq:NN \l_@@_tikz_code_tl \c_@@_tikz_code_up_tl
- }
- { \@@_error:n { calc~not~loaded } }
-%<*LaTeX>
+ \tl_set_eq:NN \l_@@_tikz_code_tl \c_@@_tikz_code_up_tl
}
- { \@@_error:n { varwidth~not~loaded } }
-%</LaTeX>
+ { \@@_error:n { calc~not~loaded } }
} ,
down .code:n =
\str_if_empty:NT \l_@@_previous_key_str
{
\str_set:Nn \l_@@_previous_key_str { down }
-%<*LaTeX>
- \bool_if:NTF \c_@@_varwidth_loaded_bool
+ \cs_if_exist:cTF { tikz@library@calc@loaded }
{
-%</LaTeX>
- \cs_if_exist:cTF { tikz@library@calc@loaded }
- {
- \keys_set:nV { WithArrows / up-and-down } \l_keys_value_tl
- \int_set:Nn \l_@@_pos_arrow_int 1
- \bool_set_false:N \l_@@_wrap_lines_bool
- \tl_set_eq:NN \l_@@_tikz_code_tl \c_@@_tikz_code_down_tl
- }
- { \@@_error:n { calc~not~loaded } }
-%<*LaTeX>
+ \keys_set:nV { WithArrows / up-and-down } \l_keys_value_tl
+ \int_set:Nn \l_@@_pos_arrow_int 1
+ \bool_set_false:N \l_@@_wrap_lines_bool
+ \tl_set_eq:NN \l_@@_tikz_code_tl \c_@@_tikz_code_down_tl
}
- { \@@_error:n { varwidth~not~loaded } }
-%</LaTeX>
+ { \@@_error:n { calc~not~loaded } }
}
}
% \end{macrocode}
@@ -7282,15 +7669,6 @@ version 2005/12/01 or later.
\seq_put_right:Nn \l_@@_options_Arrow_seq { up }
% \end{macrocode}
%
-%
-% \begin{macrocode}
-\@@_msg_new:nn { varwidth~not~loaded }
- {
- You~can't~use~the~option~'\l_keys_key_str'~because~
- you~don't~have~loaded~the~package~'varwidth'. \\
- \c_@@_option_ignored_str
- }
-% \end{macrocode}
%
% \begin{macrocode}
\@@_msg_new:nn { calc~not~loaded }
@@ -7508,6 +7886,11 @@ version 2005/12/01 or later.
%
% Correction of a bug with |{DispWithArrows}| : cf. question 535989 on |TeX StackExchange|.
%
+% \subsection*{Changes between 2.4 and 2.5}
+%
+% Arrows of type |o| which are \emph{over} other arrows.
+%
+% \pkg{witharrows} now requires and loads \pkg{varwidth}
%
%
% \PrintIndex
diff --git a/macros/generic/witharrows/witharrows.pdf b/macros/generic/witharrows/witharrows.pdf
index 31c50353bf..64cd930e62 100644
--- a/macros/generic/witharrows/witharrows.pdf
+++ b/macros/generic/witharrows/witharrows.pdf
Binary files differ
diff --git a/macros/latex/contrib/bibleref/CHANGES b/macros/latex/contrib/bibleref/CHANGES
index 29d7c6e962..57e8427525 100644
--- a/macros/latex/contrib/bibleref/CHANGES
+++ b/macros/latex/contrib/bibleref/CHANGES
@@ -1,5 +1,8 @@
+1.25
+ * Add \ibible macro
+ * Add more abbreviations
1.24
- * Add more abbreviation
+ * Add more abbreviations
* Add more \brthreeabbrvname
1.23
* Add Tt abbreviation
diff --git a/macros/latex/contrib/bibleref/bibleref.dtx b/macros/latex/contrib/bibleref/bibleref.dtx
index 0802fcf73b..1eb50d8004 100644
--- a/macros/latex/contrib/bibleref/bibleref.dtx
+++ b/macros/latex/contrib/bibleref/bibleref.dtx
@@ -220,9 +220,9 @@
%Note that \meta{name} must be the full name, not the
%abbreviated name of the book. For example, to change
%Revelation to Apoc, do
-%\verb|\setbookname{Revelation}{Apoc}|
+%\verb|\setbooktitle{Revelation}{Apoc}|
%(\textbf{Note} that you shouldn't do
-%\verb|\setbookname{Rev}{Apoc}|)
+%\verb|\setbooktitle{Rev}{Apoc}|)
%
%If you want a different title for a book depending on whether it's
%in the main body of the document or in the index, you can set the
@@ -309,6 +309,12 @@
%This is similar to \cs{ibiblechvs} except that it only displays the
%verse(s) in the text.
%
+%\begin{definition}[\DescribeMacro{\ibible}]
+%\cs{ibible}\oarg{format}\marg{book title}\texttt(\marg{chapter}\texttt{:}\meta{verse(s)}\texttt)
+%\end{definition}
+%This is similar to \cs{ibiblech} except that it does not display the
+%anything in the text.
+%
%You may need to create your own custom \app{makeindex} style file
%as the default uses a comma and space to separate the item from
%the page number, which may cause confusion. For example, you
@@ -1008,7 +1014,7 @@
% Declare package
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{bibleref}[2019/12/10 1.24 (NLCT and MR)]
+\ProvidesPackage{bibleref}[2020/06/22 1.25 (NLCT and MR)]
% \end{macrocode}
% Need to do some conditional stuff
% \begin{macrocode}
@@ -1604,6 +1610,7 @@
\newcommand*\br@Wis{\br@Wisdom}%
\newcommand*\br@Wisd{\br@Wisdom}%
\newcommand*\br@Ecclus{\br@Ecclesiasticus}%
+\newcommand*\br@Sir{\br@Ecclesiasticus}%
\newcommand*\br@Isa{\br@Isaiah}%
\newcommand*\br@Jer{\br@Jeremiah}%
\newcommand*\br@Lam{\br@Lamentations}%
@@ -2668,6 +2675,36 @@ defined}{}}}
% \end{macrocode}
%\end{macro}
%
+% \begin{macro}{\ibible}
+%\changes{1.25}{2020/06/22}{new}
+% Only displays verse(s) but indexes under the book and chapters.
+% \begin{macrocode}
+\newcommand*{\ibible}[1][\bvidxpgformat]{%
+ \let\@bv@current@titlestyle\BRbooktitlestyle
+ \let\@bv@current@chapterstyle\BRchapterstyle
+ \let\@bv@current@versestyle\BRversestyle% added on analogy with previous line
+ \let\@bv@current@bkchsep\BRbkchsep
+ \let\@bv@current@chvsep\BRchvsep
+ \let\@bv@current@vrsep\BRvrsep% add me, too!
+ \def\@bv@restore{%
+ \let\BRbooktitlestyle\@bv@current@titlestyle
+ \let\BRchapterstyle\@bv@current@chapterstyle
+ \let\BRversestyle\@bv@current@versestyle% added on analogy with previous line
+ \let\BRbkchsep\@bv@current@bkchsep
+ \let\BRchvsep\@bv@current@chvsep
+ \let\BRvrsep\@bv@current@vrsep% add me, too!
+ }%
+ \def\BRbooktitlestyle##1{}%
+ \def\BRchapterstyle##1{}%
+ \def\BRversestyle##1{}% added on analogy with previous line
+ \def\BRbkchsep{}%
+ \def\BRchvsep{}%
+ \def\BRvrsep{}% add me, too!
+ \def\@bv@idxpgformat{#1}%
+ \@bv@idxtrue\def\@bv@idxentry{}\@bible@verse
+}
+% \end{macrocode}
+% \end{macro}
%\begin{macro}{\bvidxpgformat}
% Default page number format for bible verse index entries
% \begin{macrocode}
diff --git a/macros/latex/contrib/bibleref/bibleref.pdf b/macros/latex/contrib/bibleref/bibleref.pdf
index 99a06b2011..d4ff6eaae5 100644
--- a/macros/latex/contrib/bibleref/bibleref.pdf
+++ b/macros/latex/contrib/bibleref/bibleref.pdf
Binary files differ
diff --git a/macros/latex/contrib/bibleref/samples/sample-categories.pdf b/macros/latex/contrib/bibleref/samples/sample-categories.pdf
index 4ccfb376e4..492e1feea3 100644
--- a/macros/latex/contrib/bibleref/samples/sample-categories.pdf
+++ b/macros/latex/contrib/bibleref/samples/sample-categories.pdf
Binary files differ
diff --git a/macros/latex/contrib/bibleref/samples/sample-indextools.pdf b/macros/latex/contrib/bibleref/samples/sample-indextools.pdf
index 21662c8438..de8d024b7e 100644
--- a/macros/latex/contrib/bibleref/samples/sample-indextools.pdf
+++ b/macros/latex/contrib/bibleref/samples/sample-indextools.pdf
Binary files differ
diff --git a/macros/latex/contrib/bibleref/samples/sample-xidx.pdf b/macros/latex/contrib/bibleref/samples/sample-xidx.pdf
index a4d31ce675..8fdf835425 100644
--- a/macros/latex/contrib/bibleref/samples/sample-xidx.pdf
+++ b/macros/latex/contrib/bibleref/samples/sample-xidx.pdf
Binary files differ
diff --git a/macros/latex/contrib/bibleref/samples/sample.pdf b/macros/latex/contrib/bibleref/samples/sample.pdf
index 3f58999daa..23b4900838 100644
--- a/macros/latex/contrib/bibleref/samples/sample.pdf
+++ b/macros/latex/contrib/bibleref/samples/sample.pdf
Binary files differ
diff --git a/macros/latex/contrib/fbox/CHANGELOG b/macros/latex/contrib/fbox/CHANGELOG
index 18d2e1fd7c..07945b1413 100644
--- a/macros/latex/contrib/fbox/CHANGELOG
+++ b/macros/latex/contrib/fbox/CHANGELOG
@@ -1,3 +1,4 @@
+0.05 2020-06-22 - added optional arguments boxrule and boxsep
0.04 2020-01-03 - added \fparbox[]{}
0.03 2019-11-04 - added star version
0.02 2019-03-08 - modified version for expandable \lowercase
diff --git a/macros/latex/contrib/fbox/doc/fbox.pdf b/macros/latex/contrib/fbox/doc/fbox.pdf
index 43ff42d426..a8a9986a54 100644
--- a/macros/latex/contrib/fbox/doc/fbox.pdf
+++ b/macros/latex/contrib/fbox/doc/fbox.pdf
Binary files differ
diff --git a/macros/latex/contrib/fbox/doc/fbox.tex b/macros/latex/contrib/fbox/doc/fbox.tex
index 1f18a9de8b..4cbfc2d36d 100644
--- a/macros/latex/contrib/fbox/doc/fbox.tex
+++ b/macros/latex/contrib/fbox/doc/fbox.tex
@@ -1,4 +1,4 @@
-%% $Id: fbox.tex 1128 2020-01-03 20:57:59Z herbert $
+%% $Id: fbox.tex 10 2020-06-22 10:15:39Z herbert $
%
\listfiles\setcounter{errorcontextlines}{100}
\documentclass[paper=a4,fontsize=11pt,DIV=13,parskip=half-,
@@ -62,7 +62,7 @@ Equipped with the talking points above, you’re ready to help anyone search and
\def\setVersion#1{\setVVersion#1!!}
\def\setVVersion#1=#2!!{\def\fboxVersion{#2}}
-\setVersion{version = 0.04}%
+\setVersion{version = 0.05}%
\title{Package \texttt{fbox} \\--\\ \normalsize \fboxVersion\ (\today)}
\author{Herbert Voß\thanks{\url{hvoss@tug.org}\newline Thanks to Rolf Niepraschk}}
@@ -91,10 +91,15 @@ user, e.g.:
\fparbox ...
\end{verbatim}
-The optional argument can be of any combination of the letters
-l, r, b, and t or altenatively L, R, B, and T. This l)eft, r)right, b)ottom, and t)op
-for the frame parts. A missing or an empty argument is the same as the default
-\Lcs{fbox} from standard \LaTeX.
+The optional argument can be
+\begin{description}
+\item[boxrule] The rule width is predefined to the current value of \Ldim{fboxrule} (0.4pt)
+\item[boxsep] The box separation is predefined to the current value of \Ldim{fboxsep} (3pt)
+\item[<letters>] Any combination of the letters
+l, r, b, and t, or altenatively L, R, B, and T for l)eft, r)right, b)ottom, and t)op
+of the frame parts. A missing or an empty argument is the same as the default
+\Lcs{fbox} command from standard \LaTeX.
+\end{description}
\begin{LTXexample}
@@ -142,24 +147,27 @@ for the frame parts. A missing or an empty argument is the same as the default
\end{LTXexample}
\begin{LTXexample}
-\setlength\fboxrule{5pt}
-\fbox[bT]{foo gar baz}
+\fbox[bT,boxrule=5pt]{foo gar baz}
\end{LTXexample}
\begin{LTXexample}
-\setlength\fboxrule{5pt}
-\fbox*[bT]{foo gar baz}
+\fbox*[bT,boxrule=5pt]{foo gar baz}
\end{LTXexample}
+
\begin{LTXexample}
-\setlength\fboxrule{5pt}
-\fbox[Br]{foo gar baz}
+\fbox[Br,boxrule=5pt]{foo gar baz}
\end{LTXexample}
+
\begin{LTXexample}
-\setlength\fboxrule{5pt}
-\fbox*[Br]{foo gar baz}
+\fbox*[boxrule=5pt,Br]{foo gar baz}
+\end{LTXexample}
+
+
+\begin{LTXexample}
+\fbox*[boxsep=5mm,bT,boxrule=2pt]{foo gar baz}
\end{LTXexample}
@@ -172,6 +180,7 @@ for the frame parts. A missing or an empty argument is the same as the default
\fparbox[]{\demoText}
\end{LTXexample}
+
\begin{LTXexample}
\fparbox[rbt]{\demoText}
\fparbox[brt]{\demoText}
@@ -209,24 +218,24 @@ for the frame parts. A missing or an empty argument is the same as the default
\end{LTXexample}
\begin{LTXexample}
-\setlength\fboxrule{5pt}
-\fparbox[bT]{\demoText}
+\fparbox[bT,boxrule=5pt]{\demoText}
\end{LTXexample}
\begin{LTXexample}
-\setlength\fboxrule{5pt}
-\fparbox*[bT]{\demoText}
+\fparbox*[bT,boxrule=5pt,boxsep=6pt]{\demoText}
+\end{LTXexample}
+
+\begin{LTXexample}
+\fparbox*[bT,boxrule=3pt,boxsep=10pt]{\demoText}
\end{LTXexample}
\begin{LTXexample}
-\setlength\fboxrule{5pt}
-\fparbox[Br]{\demoText}
+\fparbox[Br,boxrule=5pt,boxsep=10pt]{\demoText}
\end{LTXexample}
\begin{LTXexample}
-\setlength\fboxrule{5pt}
-\fparbox*[Br]{\demoText}
+\fparbox*[boxrule=5pt,Br]{\demoText}
\end{LTXexample}
diff --git a/macros/latex/contrib/fbox/latex/fbox.sty b/macros/latex/contrib/fbox/latex/fbox.sty
index 24dd9a7106..9c6aa93fd4 100644
--- a/macros/latex/contrib/fbox/latex/fbox.sty
+++ b/macros/latex/contrib/fbox/latex/fbox.sty
@@ -11,11 +11,23 @@
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%
-% $Id: fbox.sty 1128 2020-01-03 20:57:59Z herbert $
+% $Id: fbox.sty 10 2020-06-22 10:15:39Z herbert $
%
% -------------------------------------
-\ProvidesPackage{fbox}[2020/01/03 v. 0.04 allow parts of the frame (hv)]
+\ProvidesPackage{fbox}[2020/06/22 v. 0.05 allow parts of the frame (hv)]
%
+\RequirePackage{xkeyval}
+
+\newlength\fbox@@rule
+\newlength\fbox@@sep
+\define@key{fbox}{boxrule}[3pt]{\setlength\fbox@@rule{#1}}
+\define@key{fbox}{boxsep}[0.4pt]{\setlength\fbox@@sep{#1}}
+\setkeys*{fbox}{boxrule=\fboxrule,boxsep=\fboxsep}
+
+% latex.ltx
+%\fboxsep = 3pt
+%\fboxrule = .4pt
+
\let\orig@fbox\fbox
\def\fb@lowerc@se#1{% make \lowercase expandable
\begingroup\edef\x{%
@@ -30,6 +42,9 @@
\def\FBox@*{\@ifnextchar[\FBox@i\orig@fbox}
%
\def\FBox@i[#1]{%
+ \def\XKV@rm{}%
+ \setkeys*{fbox}{boxrule=\fboxrule, boxsep=\fboxsep, #1}%
+ \typeout{===>#1: \XKV@rm}%
\if@fbox@star
\@fbox@space@leftfalse
\@fbox@space@rightfalse
@@ -37,11 +52,11 @@
\@fbox@space@lefttrue
\@fbox@space@righttrue
\fi
- \ifx\relax#1\relax
+ \expandafter\ifx\expandafter\relax\XKV@rm\relax
\@tempcntb=15
\else
\@tempcntb=\z@
- \fb@lowerc@se{#1}%
+ \expandafter\fb@lowerc@se\expandafter{\XKV@rm}%
\expandafter\FBox@ii\@tempa\@nil\relax
\fi
\FBox@iii
@@ -64,34 +79,34 @@
\leavevmode
\setbox\@tempboxa\hbox{%
\color@begingroup
- \if@fbox@space@left\kern\fboxsep\fi{#1}\if@fbox@space@right\kern\fboxsep\fi
+ \if@fbox@space@left\kern\fbox@@sep\fi{#1}\if@fbox@space@right\kern\fbox@@sep\fi
\color@endgroup}%
\@FrameB@x\relax}
%
\def\@FrameB@x#1{%
- \@tempdima\fboxrule
- \advance\@tempdima\fboxsep
+ \@tempdima\fbox@@rule
+ \advance\@tempdima\fbox@@sep
\advance\@tempdima\dp\@tempboxa
\hbox{%
\lower\@tempdima\hbox{%
\vbox{%
\ifnum\the\@tempcntb>8\relax
\advance\@tempcntb by -8
- \hrule\@height\fboxrule % top
+ \hrule\@height\fbox@@rule % top
\fi
\hbox{%
\ifnum\@tempcntb>3
\advance\@tempcntb by -4
- \vrule\@width\fboxrule
+ \vrule\@width\fbox@@rule
\fi % left
#1%
\vbox{%
- \vskip\fboxsep
+ \vskip\fbox@@sep
\box\@tempboxa
- \vskip\fboxsep}%
+ \vskip\fbox@@sep}%
#1%
- \ifnum\@tempcntb>1\vrule\@width\fboxrule\fi}% right
- \ifodd\@tempcntb\hrule\@height\fboxrule\fi}% bottom
+ \ifnum\@tempcntb>1\vrule\@width\fbox@@rule\fi}% right
+ \ifodd\@tempcntb\hrule\@height\fbox@@rule\fi}% bottom
}%
}%
}
@@ -101,10 +116,10 @@
\long\def\fparbox{\@ifnextchar*{\@fbox@startrue\FParBox@}{\@fbox@starfalse\FParBox@*}}
\def\FParBox@*{\@ifnextchar[\FParBox@i\FParBox@ii}
\long\def\FParBox@i[#1]#2{%
- \savebox\fpar@b@x{\parbox{\dimexpr\linewidth-2\fboxsep-2\fboxrule}{#2}}%
+ \savebox\fpar@b@x{\parbox{\dimexpr\linewidth-2\fbox@@sep-2\fbox@@rule}{#2}}%
\FBox@i[#1]{\usebox\fpar@b@x}}
\long\def\FParBox@ii#1{%
- \savebox\fpar@b@x{\parbox{\dimexpr\linewidth-2\fboxsep-2\fboxrule}{#1}}%
+ \savebox\fpar@b@x{\parbox{\dimexpr\linewidth-2\fbox@@sep-2\fbox@@rule}{#1}}%
\orig@fbox{\usebox\fpar@b@x}}
diff --git a/macros/latex/contrib/xfakebold/Changes b/macros/latex/contrib/xfakebold/Changes
index 9750606c8f..54671b5a7b 100644
--- a/macros/latex/contrib/xfakebold/Changes
+++ b/macros/latex/contrib/xfakebold/Changes
@@ -1,5 +1,6 @@
xfakebold.sty ----------------
+v 0.07 2020-06-22 fix bug for pdflatex (thanks to Scott Pakin)
v 0.06 2019-12-29 support for xetex and ptex with (x)dvipdfmx
v 0.05 2019-09-21 fix pdflatex
v 0.04 2018-08-21 typo in \fake@bold
diff --git a/macros/latex/contrib/xfakebold/doc/xfakebold-doc.pdf b/macros/latex/contrib/xfakebold/doc/xfakebold-doc.pdf
index f6522da142..54db165a54 100644
--- a/macros/latex/contrib/xfakebold/doc/xfakebold-doc.pdf
+++ b/macros/latex/contrib/xfakebold/doc/xfakebold-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/xfakebold/doc/xfakebold-doc.tex b/macros/latex/contrib/xfakebold/doc/xfakebold-doc.tex
index 973873ee2e..c7ac5d15d3 100644
--- a/macros/latex/contrib/xfakebold/doc/xfakebold-doc.tex
+++ b/macros/latex/contrib/xfakebold/doc/xfakebold-doc.tex
@@ -1,4 +1,4 @@
-% $Id: xfakebold-doc.tex 1125 2019-12-29 21:34:19Z herbert $
+% $Id: xfakebold-doc.tex 9 2020-06-22 07:46:03Z herbert $
\listfiles
\documentclass[english]{article}
\usepackage{dejavu-otf}
@@ -12,7 +12,7 @@
\usepackage{babel}
\usepackage[a4paper,tmargin=1cm,bmargin=1.5cm,includeheadfoot]{geometry}
\usepackage{listings}
-\title{\texttt{xfakebold}, v. 0.06\\ using bold characters with\\ \texttt{pdflatex}, \texttt{lualatex} or \texttt{xelatex}}
+\title{\texttt{xfakebold}, v. 0.07\\ using bold characters with\\ \texttt{pdflatex}, \texttt{lualatex} or \texttt{xelatex}}
\author{Herbert Voß}
\lstset{basicstyle=\ttfamily\small,language={[LaTeX]TeX},frame=lrtb}
@@ -22,6 +22,7 @@
\tableofcontents
+\vspace{1cm}
\begin{abstract}
The package fakes a vector font with outline characters by the text render of PDF.
It writes directly into the pdf output with \verb|\pdfliteral| (pdflatex ) or \verb|\pdfextension| \verb|literal|
@@ -31,7 +32,7 @@ math mode where only some free math fonts provide a bold version.
\end{abstract}
\vfill
-\small Thanks to: Will Robertson; Yusuke Terada;
+\small Thanks to: Scott Pakin, Will Robertson; Yusuke Terada;
%\meaning\setBold
%\meaning\unsetBold
diff --git a/macros/latex/contrib/xfakebold/latex/xfakebold.sty b/macros/latex/contrib/xfakebold/latex/xfakebold.sty
index db10f5096a..0e0d5d4068 100644
--- a/macros/latex/contrib/xfakebold/latex/xfakebold.sty
+++ b/macros/latex/contrib/xfakebold/latex/xfakebold.sty
@@ -1,8 +1,8 @@
-% $Id: xfakebold.sty 1125 2019-12-29 21:34:19Z herbert $
+% $Id: xfakebold.sty 9 2020-06-22 07:46:03Z herbert $
%%
%% This is file `xfakebold.sty',
%%
-%% Copyright (C) 1919, 2020 Herbert Voss
+%% Copyright (C) 2019, 2020 Herbert Voss
%%
%% It may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
@@ -14,7 +14,7 @@
%%
%%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{xfakebold}[1919/12/29 v0.06 using bold characters]
+\ProvidesPackage{xfakebold}[2020/06/22 v0.07 using bold characters]
\RequirePackage{xkeyval}
\@ifpackagelater{iftex}{2019/10/24}{%
@@ -51,7 +51,7 @@
\else
\ifpdftex
\ifnum\pdfoutput=\@ne
- \pdfliteral direct { 2 Tr #1 w }\relax
+ \pdfliteral direct { 2 Tr \fkbld@bold w }\relax
\else
\special{pdf:literal direct 2 Tr \fkbld@bold w }\relax
\fi