% \iffalse meta-comment
%
% Copyright (C) 2019-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr>
%
% This file may be distributed and/or modified under the conditions of
% the LaTeX Project Public License, either version 1.3 of this license
% or (at your option) any later version.  The latest version of this
% license is in:
%
%   http://www.latex-project.org/lppl.txt
%
% and version 1.3 or later is part of all distributions of LaTeX version
% 2005/12/01 or later.
% \fi
%
% \iffalse
%<*driver>
\ProvidesFile{spacingtricks.dtx}
%</driver>
%<*package> 
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesPackage{spacingtricks}
    [2023/12/06 v1.8 .dtx spacingtricks file]
%</package>
%<*driver>
\documentclass{ltxdoc}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}
\usepackage{mathptmx}
\usepackage[pifont]{spacingtricks}
\usepackage{amsmath}
\usepackage{tikz}
\usepackage{sectsty}
\usepackage{xcolor}

\definecolor{darkbrown}{rgb}{0.5,0.1,0.1}
\allsectionsfont{\color{darkbrown}}
\DisableCrossrefs
%\CodelineIndex
%\RecordChanges
\usepackage{hyperref}
\hypersetup{%
    colorlinks,
    linkcolor=blue, %red by default
    citecolor=red, %green by default
    pdftitle={spacingtricks},
    pdfsubject={LaTeX package},
    pdfauthor={Antoine Missier}
}
\begin{document}
\DeleteShortVerb{\|}
\MakeShortVerb{\"}
\DocInput{spacingtricks.dtx}
%\PrintChanges
%\PrintIndex
\end{document}
%</driver>
% \fi
%
% \CheckSum{261}
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
%
% \changes{v0.1}{2011/12/27}{Initial version}
% \changes{v1.0}{2019/05/04}{dtx and ins files, adding the footnote command}
% \changes{v1.0}{2019/06/16}{English translation of the documentation}
%
% \changes{v1.1}{2019/09/06}{
%    - No automatic line breaking at the end of the centered command,
%    - new length compactitemlist}
%
% \changes{v1.2}{2019/09/09}{
%    - A bug correction in the last update}
%
% \changes{v1.3}{2020/11/02}{
%    - Loading the setspace package, 
%    - small changes in compactlist environment, 
%    - improvement in dualboxes macro}
%
% \changes{v1.4}{2021/09/21}{
%    - A mistake in the documentation is now corrected}
%
% \changes{v1.5}{2023/02/23}{
%    - Changing font to times (with the mathptmx package),
%    - changing pstricks figure to tikz to avoid double compilation,
%    - tests and comments about wrapfig and picinpar packages}
% \changes{v1.5}{2023/02/25}{
%    - adding the centeredline package,
%    - adding the pifont package as option,
%    - taking over the juxtapose environment from Christian Obrecht,
%    - topsep of indentblock environment reduced to zero}
% \changes{v1.5}{2023/02/26}{
%    - Tests and comments about paracol and reledpar packages}
%
% \changes{v1.6}{2023/03/05}{
%    - Any list symbol is followed by a space if there is no punctuation character after it,
%    - some changes in documentation}
%
% \changes{v1.7}{2023/07/27}{
%    - Minor adjustments in the documentation}

% \changes{v1.8}{2023/12/05}{
%    - New macro cstrut}
%
% \GetFileInfo{spacingtricks.sty}
%
% \title{The \textsf{spacingtricks} package\thanks{This document
% corresponds to \textsf{spacingtricks}~\fileversion, dated \filedate.}}
% \author{Antoine Missier \\ \texttt{antoine.missier@ac-toulouse.fr}}
% \date{December 6, 2023}
% \maketitle
%
% \section{Introduction}
%
% This package offers several macros to address spacing issues:
% \begin{compactlist}
% \item \hyperlink{centered}{\texttt{\bslash centered}} offers horizontal 
% centering without introducing vertical spacing.
% \item \hyperlink{footnote}{\texttt{\bslash footnote}} has been redefined 
% to avoid unsuitable spacing in certain cases.
% \item \hyperlink{vstrut}{\texttt{\bslash vstrut}} generates a strut 
% with variable height or depth for maintaining consistent vertical spacing,
% and \hyperlink{cstrut}{\texttt{\bslash cstrut}} being symmetric around the mathematical axis.
% \item \hyperlink{indent}{\texttt{\bslash indent}} has been redefined 
% to indent a line at the beginning 
% of a particular paragraph even if "\parindent" has been set to 0.
% \item The \hyperlink{indentblock}{\texttt{indentblock}} environment 
% allows indentation of all its content.
% \item The \hyperlink{compactlist}{\texttt{compactlist}} environment 
% creates a compact list, as shown here, without vertical spacing between items.
% Additionally, aliases are provided for shorter
% \hyperlink{symbols}{list symbols}:
% "\bul", "\dash", "\ddash", "\aster", "\hand", "\checksymb", "\arrowsymb".
% \item Common abbreviations, \hyperlink{ie-eg}{\ie and \eg}, 
% are typeset using the macros "\ie" and "\eg" ensuring correct spacing.
% \item The \hyperlink{dualboxes}{\texttt{\bslash dualboxes}} command facilitates placing 
% two boxes (figures, tables, text) side by side by adjusting the vertical positioning.
% \end{compactlist}
% 
% \medskip
% Three other ``spacing'' packages are loaded by \textsf{spacingtricks}:
% \hyperlink{setspace}{\textsf{setspace}}~\cite{SETSP} (natively in \LaTeXe), 
% used for setting line spacing in a piece of text,
% \textsf{xspace}~\cite{XSP}, which adds an inter-word space unless the macro 
% is followed by a punctuation character,
% and \hyperlink{centeredline}{\textsf{centeredline}}~\cite{CENTER} 
% which offers an interesting alternative 
% to our "\centered" macro (see further).
% We also took over the fine \hyperlink{juxtapose}{\texttt{juxtapose}} environment 
% from the \textsf{mafr}~\cite{MAFR}
% distribution, as another way to place boxes side by side.
%
% Furthermore, we have developed the package \textsf{arraycols}~\cite{ARCOL},
% which allows for effective management of spacing in \texttt{tabular} 
% or \texttt{array} environments,
% and \textsf{mismath}~\cite{MSMATH} providing several macros to improve spacing 
% in mathematical formulas.
%
% \section{Usage}
%
% \hypertarget{centered}{}
% \DescribeMacro{\centered}
% The "\centered"\marg{text} command yields a centered line without vertical spacing.
% It functions similarly to "\centerline", except in lists or tables where its behavior
% is notably improved (see the following examples).
% Additionally, the line break before (but not after) the macro is applied automatically.
%
% Here is a comparative example of the centering commands inside a list:
% \begin{enumerate}
% \item Here is a centered line using "\centered": 
% \centered{Lorem ipsum dolor sit amet, consectetuer adipiscing elit.}
% \item Here is another centered line using "\\ \centerline":\\
% \centerline{Lorem ipsum dolor sit amet, consectetuer adipiscing elit.}
% \item Here is another centered line using "\par\centerline":
% \par\centerline{Lorem ipsum dolor sit amet, consectetuer adipiscing elit.}
% \item Here is a centered line using the \texttt{center} environment:
% \begin{center} Lorem ipsum dolor sit amet, consectetuer adipiscing elit. \end{center}
% \end{enumerate}
%
% After using "\centered{...}", the end of line must be explicit, 
% otherwise "\centered" will not function correctly. You can use "\\",
% which is equivalent to "\linebreak", or you can use
% a blank line to begin a new paragraph (equivalent to "\par"). 
% In the former case, no vertical space
% is added after the centered line, while in the latter case, the vertical space
% following the centered line is slightly larger. 
% In the example provided, the centered line comes to an end, without line breaking
% because of the next "\item" command, and the vertical space is determined by the
% \texttt{enumerate} environment.
%
% \medskip
% In tables, "\centered" allows you to center a specific line in a cell independently of 
% the column alignment
% \footnote{In tables, we can also utilize the powerful \texttt{\bslash makecell} command
% from the \textsf{makecell} package~\cite{MKCELL}. However,
% neither the \texttt{\bslash centerline} nor \texttt{\bslash centering} commands
% work for a single line in a cell.},
% Here's an example using "\begin{tabular}{|l|r|}":
%
% \begin{center}
% \begin{tabular}{|l|r|}
% \hline
% left-aligned content & right-aligned content \\
% \hline
% the second cell determines the width  & \centered{another centered content} \\
% \hline
% \centered{a centered cell} & the last cell determines the width \\
% \hline
% \end{tabular}
% \end{center}
%
% \medskip
% \hypertarget{centeredline}{}
% \DescribeMacro{\centeredline}
% A limitation of our "\centered" macro is that it doesn't allow the use of
% \texttt{\bslash verb} commands inside its argument. 
% However, you have the "\centeredline" command from the package
% \textsf{centeredline} by Jean-François Burnol~\cite{CENTER} to address this limitation.
% This small package is now loaded by \textsf{spacingtricks}.
% One other advantage of "\centeredline" is that it does not require an explicit
% end; the text can follow the command on the same line, and the line break will
% be automatic.
% Nevertheless, it doesn't work in tables (like in the example above),
% except when used with the \texttt{p} column declaration.
%
% \hypertarget{setspace}{}
% \medskip
% \DescribeEnv{onehalfspace}\DescribeEnv{doublespace}\DescribeEnv{spacing}
% \begin{onehalfspace}
% The \textsf{setspace} package~\cite{SETSP}, which is loaded by \textsf{spacingtricks},
% provides environments for changing the spacing between lines. 
% The current paragraph is nested in a \texttt{onhalfspace} environment, as you can see.
% The \texttt{spacing} environment can be used to achieve other interline spacing, 
% for example "\begin{spacing}{2.5}".
% \end{onehalfspace}
%
% \hypertarget{footnote}{}
% \medskip
% \DescribeMacro{\footnote}
% The "\footnote" command doesn't handle spacing issues well,
% especially when the \textsf{hyperref} package has been loaded.
% In English tradition, there is no space before numbers (or symbols) of note calls,
% and similarly at the beginning of footnotes,
% the text begins immediately after the note number
% \footnote{The typesetting of footnotes and note calls depends on national typographic
% rules which are, in principle, managed by the \textsf{babel} package.
% For instance, when activating the \texttt{french} option of \textsf{babel},
% a thin space is added before the note calls, and the new \texttt{\bslash footnote}
% macro does not alter this behavior.}.
% To avoid undesirable spaces, you don't have to leave any space before 
% writing "\footnote{", for instance:
% \centeredline{
% "There is no space here\footnote{The old command} before the macro."
% }
% However, it may be convenient to place the "\footnote" command
% on a new line. To achieve this, "\footnote" has been redefined to completely eliminate
% unwanted spaces
% \footnote{Indeed, recommending the use of the \% symbol at the end of a line would suffice
% (but not in dtx files);
% its effect is to cancel the space produced by a line break,
% but it's not always something that comes to mind immediately.
% Furthermore let's note that our definition of \texttt{\bslash footnote} will have no effect
% when using the \texttt{\bslash VerbatimFootnotes} command from the \textsf{fancyvrb} package
% by Timothy Van Zandt~\cite{FVERB}.}.
%
% \medskip
% \noindent\begin{minipage}{5.6cm}
% \begin{verbatim}
%This is a note 
%\footnote{ 
%The old command.}
%with bad spacing.
% \end{verbatim}
% \vspace{-4ex} 
% This is a note
% \footnt{
% The old command.}
% with bad spacing.
% \end{minipage}
% \hfill 
% \begin{minipage}{5.6cm}
% \begin{verbatim}
%This is a note
%\footnote{ 
%The new command.}
%with good spacing.
% \end{verbatim}
% \vspace{-4ex} 
% This is a note 
% \footnote{ 
% The new command.}
% with good spacing.
% \end{minipage}
%
% \medskip
% \DescribeMacro{\footnotespace} \DescribeMacro{\footenoteindent}
% Like the old "\footnote" command, the new one can take also 
% an optional argument to force the number of the note.
% Additionally, we have always had customization macros such as
% "\footnotesize", "\footnotesep", "\footnoterule".
% However, two new macros have been added to manage spacing:
% "\footnotespace" which produces the space before the note call symbol,
% and "\footnoteindent" which produces the space at the beginning of the footnote text.
% For instance, with "\renewcommand{\footnotespace}{\,}" \\
% and "\renewcommand{\footnoteindent}{\enskip}"
% \footnote{\texttt{\bslash enskip} is equivalent to \texttt{\bslash hspace\{0.5em\}}.}
% we get:
%
% \begin{center}
% \renewcommand{\footnotespace}{\,}
% \renewcommand{\footnoteindent}{\enskip}
% \begin{minipage}{7cm}
% This is a note \footnote{en dash spacing at the beginning of the note.}  
% with particular space settings.
% \end{minipage}
% \end{center}
% 
% \hypertarget{vstrut}{}
% \DescribeMacro{\vstrut}
% The command "\vstrut"\oarg{depth}\marg{height} produces a strut with a 
% variable height or depth,
% allowing you to increase the line's height above the baseline or its depth 
% below (optional).
% This command can be used in various contexts, such as a text line, a table, 
% a list, a formula, and more.
% If the values of \meta{height} and \meta{depth} are smaller than the height and depth
% of the current line, the command has no effect.
% Here are some examples:
%
% \begin{juxtapose}
% \begin{verbatim}
%\[\frac{\sqrt{0.5p}}{10} 
%  = \frac{\sqrt{\vstrut{1.7ex} 0.5p}}{10}\]
% \end{verbatim}
% \otherside
% \[\frac{\sqrt{0.5p}}{10} = \frac{\sqrt{\vstrut{1.7ex} 0.5p}}{10}\]
% \end{juxtapose}
% \vspace{-2ex}
% \noindent"\fbox{\vstrut{2ex}$\sigma(X)=1$}" gives
% \fbox{\vstrut{2ex}$\sigma(X)=1$}
% better than \fbox{$\sigma(X)=1$}.
% 
% % \hypertarget{cstrut}{}
% \medskip
% \DescribeMacro{\cstrut}
% The "\cstrut" macro is a alternative of "\vstrut" that adds a symmetric strut in height
% and depth relative to the mathematical center line, which is halfway the height of an `x'. 
% It takes a single parameter "\cstrut"\marg{height}. 
% It's useful in \texttt{array} environments as it maintains
% the mathematical axis at the center of the cell with \meta{height}
% above and under.
%
% In a table, using
% "\renewcommand{\arraystretch}"\marg{stretch}
% allows you to increase the height of all rows, but it
% has a global effect, whereas "\cstrut" (or "\vstrut") allows to adjust the height 
% of each row individually, as in the following table:
% \[  
% \begin{array}{|c|}
% \hline
% \text{bad}\\
% \hline
% \displaystyle \lim_{\substack{x \to 1\\x>1}} \ln\left(\dfrac{x^2}{x-1}\right) \\
% \hline
% \dfrac{a}{b} \\
% \hline
% \displaystyle \int_{1}^{X} \frac{1}{t}\, \mathrm{d}t  \\
% \hline
% \end{array}
% \qquad
% \begin{array}{|c|c|}
% \hline
% \multicolumn{2}{|c|}{\text{good}}\\
% \hline
% \displaystyle\lim_{\substack{x \to 1\\x>1}} \ln\left(\dfrac{x^2}{x-1}\right)\cstrut{3.8ex}
% & \mbox{obtained with } "\cstrut{3.8ex}" \\
% \hline
% \dfrac{a}{b} \cstrut{2.5ex} & "\cstrut{2.5ex}" \\
% \hline
% \displaystyle\int_{1}^{X} \frac{1}{t} \, \mathrm{d} t \vstrut[2.5ex]{4.2ex}
% & "\vstrut[2.5ex]{4.2ex}" \\
% \hline
% \end{array}
%\]
% However, for tables, we have the \textsf{arraycols} package~\cite{ARCOL},
% which is based on \textsf{cellspace}~\cite{CELLSP} and it allows to automatically adjust 
% row heights. Nevertheless, "\cstrut" and "\vstrut" can be useful for fine adjustments. 
%
% \hypertarget{indent}{}
% \medskip
% \DescribeMacro{\indent} 
% The command "\setlength{\parindent}{0cm}" eliminates 
% indentation at the beginning of every paragraph. 
% However, in this case, the "\indent" command does no longer works
% if you want to apply exceptional indentation to a specific paragraph.
% To address this issue, the initial length of "\parindent" is saved in "\parindentlength",
% \DescribeMacro{\parindentlength} 
% and the command "\indent" is redefined to allow indentation
% of the length "\parindentlength".
%
% \hypertarget{indentblock}{}
% \medskip
% \DescribeEnv{indentblock}
% The \texttt{indentblock} environment facilitates the indentation of an entire block of lines.
% It has an optional argument which sets the length of indentation
% (by default it uses "\parindentlength").
% The lyrics below have been indented (and typeset in italic shape) using
% "\begin{indentblock}\itshape" and stanzas 2 and 4 have undergone
% additional indentation using "\begin{indentblock}[3em]".
%
% \smallskip
% \begin{indentblock}\itshape
% Overhead the albatross hangs motionless upon the air \\
% And deep beneath the rolling waves in labyrinths of coral caves \\
% The echo of a distant time comes willowing across the sand \\
% And everything is green and submarine 
% \begin{indentblock}[3em]
%    And no one showed us to the land \\
%    And no one knows the where's or why's \\
%    But something stirs and something tries \\
%    Starts to climb towards the light
% \end{indentblock}
% \noindent
% Strangers passing in the street \\
% By chance two separate glances meet \\
% And I am you and what I see is me \\
% And do I take you by the hand \\
% And lead you through the land \\
% And help me understand the best I can?
% \begin{indentblock}[3em]
%    And no one calls us to move on \\
%    And no one forces down our eyes \\
%    No one speaks and no one tries \\
%    No one flies around the sun
% \end{indentblock}
% \end{indentblock}
% 
% \hypertarget{compactlist}{}
% \DescribeEnv{compactlist}
% As the name suggests, the "compactlist" environment allows you to create
% a ``compact'' list, meaning it has no vertical space above or between items.
% Similar to regular lists in \LaTeX, items are generated using the "\item" command.
% The environment also accepts an optional argument: "\begin{compactlist}"\oarg{symbol}.
% 
% \hypertarget{symbols}{}
% \medskip
% \DescribeMacro{\bul}\DescribeMacro{\dash}\DescribeMacro{\ddash}\DescribeMacro{\aster}
% The default item symbol in the compactlist environment is "\textbullet", 
% but it can be changed.
% We have provided aliases for several symbols commonly used in lists:
% "\bul" \bul\ (alias for "\textbullet"), "\dash" \dash\ (alias for "\textendash"), 
% "\ddash" \ddash\ (alias for "\textemdash"), 
% "\aster" \aster\ ("alias for \textasteriskcentered").
%
% \smallskip
% \DescribeEnv{[pifont]}
% \DescribeMacro{\hand}\DescribeMacro{\checksymb}\DescribeMacro{\arrowsymb}
% Some other common symbols can be found in the \textsf{pifont} package~\cite{PIFONT}.
% Therefore the \textsf{spacingtricks} package includess a \texttt{pifont} option
% that loads this package and creates the appropriate aliases:
% "\hand" \hand for "\ding{43}", "\checksymb" \checksymb for "\ding{51}"
% and "\arrowsymb" \arrowsymb for "\ding{226}".
%
% \medskip \noindent
% The following example is produced by "\begin{compactlist}[\checksymb]":
% \begin{compactlist}[\checksymb]
% \item First item.
% \item Second item.
% \item Third item.
% \end{compactlist}
% \hand These aliases can also be used directly in some text.
% The symbol is followed by a space if there is no punctuation character 
% immediately after it (thanks to the 
% macro \texttt{xspace} from the \textsf{xspace} package~\cite{XSP}).
% Use "\"\meta{symbol}"\unskip" if you want to remove this space.
%
% \smallskip
% \DescribeMacro{\compactlistindent}
% Indentation length is set by "\compactlistindent" (fixed at 0.5\,em by default) 
% and can be modified with "\setlength".
% Notice that that there are several other ways to create a compact list,
% particularly by using the \texttt{noitemsep} key of the \textsf{enumitem} package~\cite{ENUM}.
%
% \medskip
% \DescribeEnv{dinglist}
% The \textsf{pifont} package has also a list environment "\begin{dinglist}"\marg{number}
% to typeset a list with normal spacing, using the "\ding"\marg{number} symbol
% for each "\item" (instead of using "\item[\ding"\marg{number}"]"). 
% So "\begin{dinglist}{226}" yields:
% \begin{dinglist}{51}
% \item The first item in the list.
% \item The second item in the list.
% \item The third item in the list.
% \end{dinglist}
%
% \hypertarget{ie-eg}{}
% \medskip
% \DescribeMacro{\ie} \DescribeMacro{\eg}
% In English, at the end of a sentence, the period is followed by an em space
% which is larger than an inter-word space.
% To achieve correct spacing after the abbreviations `\ie' (\textit{id est}) and `\eg'
% (\textit{exempli gratia}), \eg here, we provide the "\ie" and "\eg" macros,
% suggested in The \LaTeX\ Companion \cite{COMP}.
% In American typography, a comma is often placed after these abbreviations,
% which can be achieved using "\ie,"
% on the other hand, some authors prefer to typeset \textit{\ie} in italic shape,
% which is always possible with "\textit{\ie}". 
%
% \hypertarget{dualboxes}{}
% \medskip
% \DescribeMacro{\dualboxes}
% Several packages aim to typeset text around a figure or a table,
% but some of them require providing the width of the box containing the figure or the table.
% Here we provide another approach with the macro
% "\dualboxes"\oarg{pos}\marg{left}\marg{right},
% which places two boxes, \meta{left} and \meta{right}, side by side.
% These boxes can contain figures, tables, a small line of text, 
% parbox text, \texttt{minipage} environments
% (for several paragraphs and lists), etc.
% The optional \meta{pos} parameter sets the vertical level on which the boxes are aligned,
% and it takes a value between 0 (bottom) and 1 (top, default value).
%
% Here is a first example in which we have adjusted the position
% of the boxes vertically using "\dualboxes[0.6]".
%
% \def\myfigure{%
% \begin{tikzpicture}[scale=0.6]\tiny 
%     \draw[->] (-4.5,0) -- (4.5,0);
%     \draw[->] (0,-2) -- (0,1.5);
%     \foreach \x in {-4,...,4} {\draw (\x,0.1cm) -- (\x,-0.1cm) node[below] {$\x$};}
%     \foreach \y in {-1,1} {\draw (0.1cm,\y) -- (-0.1cm,\y) node[left] {$\y$};}
%     \draw[domain=-4.5:4.5,samples=100,color=red] plot ({\x},{2*\x/(exp(\x)-\x)});
% \end{tikzpicture}}
%
% \def\mytable{
%     $\begin{array}{|*{6}{c|}} \hline
%         x    & -2    & -1    & 0 & 1    & 2    \\ \hline
%         f(x) & -1,87 & -1,46 & 0 & 1,16 & 0,74 \\ \hline
%     \end{array}$
% }
%
% \medskip
% \dualboxes[0.6]{\scriptsize \mytable}{\myfigure}
%
% \noindent
% The horizontal space is equally shared between left margin, inter-box space, 
% and right margin.
% 
% \medskip
% In the following example, boxes are aligned by top, and
% the right box has been shifted back (left) from 3\,cm
% to create an overlapping effect with the left one, 
% which cannot be achieved using \textsf{picins}. 
% 
% \dualboxes{\scriptsize \mytable}{\mbox{} \hspace{-3cm} \myfigure}
% \begin{verbatim}
% \dualboxes{\scriptsize
%     $\begin{array}{|*{6}{c|}} \hline
%         x    & -2    & -1    & 0 & 1    & 2    \\ \hline
%         f(x) & -1,87 & -1,46 & 0 & 1,16 & 0,74 \\ \hline
%     \end{array}$
% }{\mbox{} \hspace{-3cm}
%     \begin{tikzpicture}[scale=0.6]\tiny
%         \draw[->] (-4.5,0) -- (4.5,0);
%         \draw[->] (0,-2) -- (0,1.5);
%         \foreach \x in {-4,...,4} {
%             \draw (\x,0.1cm) -- (\x,-0.1cm) node[below] {$\x$};}
%         \foreach \y in {-1,1} {
%             \draw (0.1cm,\y) -- (-0.1cm,\y) node[left] {$\y$};}
%         \draw[domain=-4.5:4.5,samples=100,color=red] 
%             plot ({\x},{2*\x/(exp(\x)-\x)});
%     \end{tikzpicture}
% }
% \end{verbatim}
%
% \DescribeMacro{\dualboxes*}
% Indeed this command has a starred version that eliminates space before the first box
% and after the second one, but not between them:
% "\dualboxes*"\oarg{pos}\marg{left}\marg{right}.
%
% \smallskip
% \dualboxes*[0.6]{\parbox{6.5cm}{
%     In practice, the \texttt{\bslash dualboxes} macro is suitable for boxes in which 
%     you put figures, tables, or small one-line text.
%     However, for longer text, it must be nested in a paragraph box, \eg 
%     here we used \texttt{\bslash parbox\{6.5cm\}\{...\}}.
%     If you need to include several paragraphs, a list, or a mathematical displayed formula,
%     you should use a \texttt{minipage} environment.}
% }{\myfigure}
%
% \medskip
% Let us mention that, unfortunately, it is not possible to use \texttt{verbatim} environments
% (nor the in-line \texttt{\bslash verb} command)
% within the "\dualboxes" arguments.
% Additionally, using footnotes or margin notes within "\dualboxes" is also not possible.  
%
% \medskip
% For arranging two figures side by side, or a table and a figure, "\dualboxes" is perfect.
% However, for wrapping text around a figure, some other package may be more efficient.
% Les us first mention \textsf{wrapfig}~\cite{WRAPFIG}, one of the easiest, but 
% it requires the text to be contained in a single paragraph (like above), without list. 
% Otherwise you have to place it in a \texttt{minipage} environment.
%
% More sophisticated is the \textsf{picins} package~\cite{PICINS},
% cited in The \LaTeX\ Companion~\cite{COMP}.
% Unlike most others, it can be used with lists;
% however vertical positioning can be tricky,
% and it is not included in common distributions \TeX{}\,Live or MiK\TeX.
% Another package worth mentioning is \textsf{picinpar}~\cite{PICINPAR}, in which
% text can begin after the first line and flow to both sides of the figure.
% It allows several paragraphs, but it does not support lists or verbatim text.
%
% \hypertarget{juxtapose}{}
% \medskip
% \DescribeEnv{juxtapose}
% As a very interesting alternative, we present the powerful \texttt{juxtapose} environment,
% originally written by Christian Obrecht in the \texttt{fiche.cls class} file,
% which is part of the \textsf{mafr} distribution~\cite{MAFR}.
% We have made small improvements, including ensuring proper functionality 
% and allowing customization of certain lengths.
% \DescribeMacro{\juxtopskip}\DescribeMacro{\juxbottomskip}
% \DescribeMacro{\juxsepspace}
% By default, the top and bottom lengths are set to "\smallskipamount",
% and the separation space is set to 1.5\,em.
% If the default lengths do not fit well for spacing above or below the environment,
% you can add a "\bigskip" or a "\vspace"\marg{dimen} for example,
% or, as a last resort, you can redefine the lengths "\juxtopskip" and "\juxbottomskip".
% \begin{juxtapose}
%     In this example the \texttt{juxtapose} environment begins here.
%     It can handle various elements, including figures, tables, as well as:
%     \begin{compactlist}
%         \item verbatim text: "\mytestmacro",
%         \item text with several paragraphs,
%         \item lists, like here (a compact list),
%         \item displayed mathematics as shown on the right side,
%     \end{compactlist} 
%     without the need for \texttt{multipage} environments.

% The two boxes are aligned by their center, but
% unlike "\dualboxes", you cannot adjust vertical positioning directly.
% However, you can use "\vspace" inside a box to alter vertical positioning
% and achieve the desired layout.\smallskip
% 
% \otherside 
%     \myfigure
%     \[ f(x) = \frac{2x}{\mathrm{e}^x-x} \]
%     This is the last line of the environment.
% \end{juxtapose}
%
% Here begins the following text. The syntax of \texttt{juxtapose} is simple: 
% \begin{center}
% "\begin{juxtapose} ... \otherside ... \end{juxtapose}"
% \end{center}
% It has an optional argument "\begin{juxtapose}"\oarg{leftratio}
% where \meta{leftratio} is the width ratio of the left side relative to "\textwidth"
% (the default value is "0.5" which means "0.5\textwidth"). 
%
% Paragraphs are indented inside each side, except the first one.
% For a figure, there's no need to shift it to the right
% (from indent length) to prevent users from forgetting to use "\noindent"
% before the figure.
% If you still want to indent the first paragraph, you can use "\indent".
% For horizontal alignment inside a box, you can use "\centering" or "\flushright",
% particularly useful for figures.
% For a global indentation of the first (or the second) box, you
% enclose it in an \texttt{indentblock} environment, and will work perfectly.
%
% \medskip
% One may ask why not using multi-column environments instead.
% In the classic \textsf{multicol} environment, you cannot choose 
% horizontally unbalanced
% columns, and you cannot control where to transition to the other column.
%
% Some packages improve \textsf{multicol}. 
% For instance, \textsf{vwcol}~\cite{VWCOL} allows fixed column widths.
% However, it still has limitations, such as not accepting verbatim text 
% and not handling lists and figures correctly (as \texttt{juxtapose} did it above).
%
% Let's mention \textsf{paracol}~\cite{PARA} and \textsf{reledpar}~\cite{RELP},
% both designed for typesetting two columns of text in parallel, 
% making them useful for translation or critical editions of text.
% They work fine with lists, figures, verbatim text, footnotes and margin notes.
% However, achieving precise vertical positioning of two boxes
% is not straightforward.
% While they offer synchronization mechanisms, convenient for text, they may not be ideal
% for placing two figures side by side.
% Additionally, they are a bit over-sized for our specific need.
% For our purposes, \texttt{juxtapose} or "\dualboxes" may be more suitable options.
%
% \StopEventually{}
%
% \section{Implementation}
%    \begin{macrocode}
\newif\ifspacingtricks@pifont
\DeclareOption{pifont}{\spacingtricks@pifonttrue}
\ProcessOptions \relax

\RequirePackage{ifthen}
\RequirePackage{calc}
\RequirePackage{setspace}
\RequirePackage{xspace}
\RequirePackage{centeredline}
\ifspacingtricks@pifont \RequirePackage{pifont} \fi

\newcommand*{\centered}[1]{{\setlength{\parskip}{0pt}\par\noindent\hfill
        #1\hfill\mbox{}}}
%    \end{macrocode}
% The double braces are necessary here to ensure that the "\parskip" modification applies
% locally within the command and not globally to the rest of the document. 
% \smallskip
%    \begin{macrocode}
\newcommand{\footnotespace}{}
\newcommand{\footnoteindent}{}
\let\footnt\footnote
\renewcommand{\footnote}[2][]{\unskip\footnotespace%
    \ifthenelse{\equal{#1}{}}{
        \unskip\footnt{\footnoteindent\ignorespaces #2}
    }{
        \unskip\footnt[#1]{\footnoteindent\ignorespaces #2}
    }\unskip
}
%    \end{macrocode}
% "\unskip" eliminates undesirable spaces before and "\ignorespaces" after.
% \smallskip
%    \begin{macrocode}
\newlength{\strutheight}
\newcommand*{\vstrut}[2][0pt]{%
    \setlength{\strutheight}{#2}%
    \addtolength{\strutheight}{#1}%
    \unskip%
    \rule[-#1]{0pt}{\strutheight}%
    \ignorespaces%
}

\newlength{\strutdepth}
\newcommand*{\cstrut}[1]{%
    \setlength\strutdepth{#1}% 
    \setlength\strutheight{2\strutdepth}% total height
    \addtolength{\strutdepth}{-0.5ex}%
    \unskip%
    \rule[-\strutdepth]{0pt}{\strutheight}%
   \ignorespaces%
}

\newlength{\parindentlength}
\setlength{\parindentlength}{\parindent}
\renewcommand{\indent}{\hspace{\parindentlength}}

\newenvironment*{indentblock}[1][\parindentlength]{
    \begin{list}{}{% 
        \setlength{\leftmargin}{#1}
        \setlength{\itemsep}{0pt}
        \setlength{\topsep}{0pt} % previously 1ex
        \setlength{\partopsep}{0pt}
    }
    \item[]
}{\end{list}}

\newlength{\compactlistindent}
\setlength{\compactlistindent}{0.5em}
\newenvironment*{compactlist}[1][\textbullet]{
    \par % sometimes necessary
    \begin{list}{#1\unskip}{% \unskip gobbles space created by \xspace
        \setlength{\itemsep}{0pt}
        \setlength{\parsep}{0pt}
        \setlength{\topsep}{0ex}
        \setlength{\partopsep}{0pt}
        \setlength{\labelwidth}{1em}
        \setlength{\leftmargin}{\labelwidth}
        \addtolength{\leftmargin}{\labelsep}
        \addtolength{\leftmargin}{\compactlistindent}
    }
}{\end{list}}

\providecommand{\bul}{\textbullet\xspace}
\providecommand{\dash}{\textendash\xspace}
\providecommand{\ddash}{\textemdash\xspace}
\providecommand{\aster}{\textasteriskcentered\xspace}
%    \end{macrocode}
% The command "\asterisk" already exists in the \textsf{mathabx} package (for math mode only).\\
% The following macros require the \textsf{pifont} package.
% \smallskip
%    \begin{macrocode}
\ifspacingtricks@pifont
    \providecommand{\hand}{\ding{43}\xspace}
    \providecommand{\checksymb}{\ding{51}\xspace}
    \providecommand{\arrowsymb}{\ding{226}\xspace}
\fi

\providecommand{\ie}{i.e.\@\xspace}
\providecommand{\eg}{e.g.\@\xspace}

\newcommand{\@@dualboxes}[3][1]{
    \par\noindent
    \raisebox{\depth-#1\totalheight}{#2} \hfill % needs calc
    \raisebox{\depth-#1\totalheight}{#3} \smallskip
}
\newcommand{\@dualboxes}[3][1]{
    \par\noindent \hfill
    \raisebox{\depth-#1\totalheight}{#2} \hfill
    \raisebox{\depth-#1\totalheight}{#3} \hfill\mbox{}\smallskip
}
\newcommand{\dualboxes}{\@ifstar{\@@dualboxes}{\@dualboxes}}

%    \end{macrocode}
%
% The following macro was found in the \texttt{fiche.cls} file,
% distributed with the \textsf{mafr} package by Christian Obrecht~\cite{MAFR}.
% It had some minor bugs in spacing.
% I made small changes, including the addition of lengths parameters and the "\linewidth"
% instruction (without which, lists in the first side would send the second side 
% out of the page).
%    \begin{macrocode}
\newlength\juxtopskip
\setlength\juxtopskip{\smallskipamount}
\newlength\juxbottomskip
\setlength\juxbottomskip{\smallskipamount}
\newlength\juxsepspace
\setlength\juxsepspace{1.5em}
\newlength\side@width

\newenvironment{juxtapose}[1][0.5]{% left side ratio
    \def\otherside{\egroup % the internal function remembers \side@width
        \@tempdima=\side@width
        \side@width=\textwidth
        \advance\side@width by -\@tempdima
        \advance\side@width by -\juxsepspace
        \hskip\juxsepspace
        \linewidth=\side@width % for lists environments
        \vcenter\bgroup\hsize=\side@width\noindent % \ignorespaces useless
        }
    \side@width=#1\textwidth
    \advance\side@width by -0.5\juxsepspace
    \linewidth=\side@width % for lists environments
    \par\vskip\juxtopskip%
    \hbox\bgroup\begin{math}
    \vcenter\bgroup\hsize=\side@width\noindent\ignorespaces
    }{\egroup\end{math}\egroup\vskip\juxbottomskip}

%    \end{macrocode}
%
% \medskip
% \begin{thebibliography}{18}
% \begin{raggedright}
% \bibitem{SETSP} \emph{The \textsf{setspace} Package}, Robin Fairbairns, Geoffrey Tobin,
% CTAN, v9.7b 2022/12/04.
% \bibitem{XSP} \emph{The \textsf{xspace} package}, David Carlisle, Morten Høgholm, 
% CTAN v1.13 2014/10/28.
% \bibitem{CENTER} \emph{\textsf{centeredline} -- A macro for centering lines}, Jean-François
% Burnol, CTAN, v1.2 2022/10/10.
% \bibitem{MAFR} \emph{La distribution \textsf{mafr}}, Christian Obrecht, 
% CTAN, v1.0 17/09/2006.
% \bibitem{ARCOL} \emph{The \textsf{arraycols} package}, Antoine Missier, CTAN, 
% v1.4 2031/09/13.
% \bibitem{MSMATH} \emph{\textsf{mismath} -- Miscellaneous mathematical macros}, 
% Antoine Missier, CTAN, v2.8 2023/07/27.
% \bibitem{FVERB} \emph{The \textsf{‘fancyvrb’} package -- Fancy Verbatims in \LaTeX},
% Timothy Van Zandt, CTAN, v4.5a 2023/01/19.
% \bibitem{MKCELL} \emph{The \textsf{makecell} package}, Olga Lapko, CTAN, v0.1e 2009/08/03.
% \bibitem{CELLSP} \emph{The \textsf{cellspace} package}, Josselin Noirel, CTAN, 
% v1.9.0 2022/01/04.
% \bibitem{PIFONT} \emph{\textsf{pifont} -- Using common PostScript fonts with \LaTeX}, 
% Walter Schmidt, CTAN, v9.3 2020/03/25.
% \bibitem{ENUM} \emph{Customizing lists with the \textsf{enumitem} package}, Javier Bezos, 
% CTAN, v3.9 2019/06/20.
% \bibitem{WRAPFIG} \emph{The \textsf{wrapfig} package}, Donald Arseneau, CTAN, 
% v3.6 2003/01/31.
% \bibitem{PICINS} \emph{Bilder in \LaTeX -Dokumenten -- PicIns-Benutzerhandbuch},
% Joachim Bleser, Edmund Lang, CTAN, v3.0 sept. 1992.
% \bibitem{PICINPAR} \emph{The \textsf{picinpar} package}, Friedhelm Sowa, Stefan Blochwitz, 
% CTAN, v1.3 2022/11/25.
% \bibitem{VWCOL} \emph{The \textsf{vwcol} package}, Will Robertson, CTAN, v0.2 2015/02/10.
% \bibitem{PARA} \emph{Package \textsf{paracol}: Yet Another Multi-Column Package 
% to Typeset Columns in Parallel}, Hiroshi Nakashima, CTAN, v1.35 2018/12/31. 
% \bibitem{RELP} \emph{Parallel typesetting for critical editions:
% the \textsf{reledpar} package}, Maïeul Rouquette, Peter Wilson, Herries Press, CTAN,
% 2.25.3 2022/04/22.
% \bibitem{COMP} \emph{The \LaTeX\ Companion}. Frank Mittelbach, Michel Goossens, 
% Johannes Braams, David Carlisle, Chris Rowley, 2nd edition, Pearson Education, 2004.
% \end{raggedright}
% \end{thebibliography}
%
% \Finale
\endinput