% \iffalse meta-comment % % Copyright (C) 2019-2023 by Antoine Missier % % 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} % %<*package> \NeedsTeXFormat{LaTeX2e}[2005/12/01] \ProvidesPackage{spacingtricks} [2023/12/06 v1.8 .dtx spacingtricks file] % %<*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} % % \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