<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">% !TeX TXS-program:compile = txs:///pdflatex

\documentclass[11pt,a4paper]{ltxdoc}
\usepackage{sim-os-menus}
\usepackage{graphicx}
\usepackage{fancyvrb}
\usepackage{fancyhdr}
\usepackage{hyperref}
\fancyhf{}
\renewcommand{\headrulewidth}{0pt}
%\rhead{\sffamily\small\affloetalab[Legende]}
\lfoot{\sffamily\small [sim-os-menus]}
\rfoot{\sffamily\small - \thepage{} -}
%\rfoot{\hyperlink{matoc}{\small\faArrowAltCircleUp[regular]}}
\usepackage{hologo}
\providecommand\tikzlogo{Ti\textit{k}Z}
\providecommand\TeXLive{\TeX{}Live\xspace}
\providecommand\PSTricks{\textsf{PSTricks}\xspace}
\let\pstricks\PSTricks
\let\TikZ\tikzlogo

\urlstyle{same}
\hypersetup{pdfborder=0 0 0}
\usepackage[margin=2cm]{geometry}
\setlength{\parindent}{0pt}
\def\TPversion{0.1.6}
\def\TPdate{05/05/2025}
\usepackage{soul}
\sethlcolor{lightgray!25}
\NewDocumentCommand\MontreCode{ m }{%
	\hl{\vphantom{\texttt{pf}}\texttt{#1}}%
}
\usepackage[french]{babel}

\begin{document}

\pagestyle{fancy}

\thispagestyle{empty}

\begin{center}
	\begin{minipage}{0.88\linewidth}
	\begin{tcolorbox}[colframe=yellow,colback=yellow!15]
		\begin{center}
			\begin{tabular}{c}
				{\Huge \texttt{sim-os-menus [fr]}}\\
				\\
				{\LARGE PrÃ©senter un 'terminal', une 'visionneuse'} \\
				{\LARGE ou un 'menu contextuel' comme sur un ordi.} \\
				\\
				{\small \texttt{Version \TPversion{} -- \TPdate}}
		\end{tabular}
		\end{center}
	\end{tcolorbox}
\end{minipage}
\end{center}

\begin{center}
	\begin{tabular}{c}
	\texttt{CÃ©dric Pierquet}\\
	{\ttfamily c pierquet -- at -- outlook . fr}\\
	\texttt{\url{https://forge.apps.education.fr/pierquetcedric/packages-latex}} \\
\end{tabular}
\end{center}

\hrule

\vfill

\begin{tcolorbox}[colframe=lightgray,colback=lightgray!5]
\MenuContextuel[Police=\sffamily,ListeSeps={1,3/1/4/1/},ListeDecals={1,2,1,0}]{%
	Menu1(&gt;),Menu2,Menu3(&gt;)(*),Menu4 Â§
	SousMenuA(&gt;),SousMenuB(&gt;)(*) Â§
	SousSousMenu1,SousSousMenu2,SousSousMenu3(&gt;)(*),SousSousMenu4,SousSousMenu5(&gt;) Â§
	SSSSMa,SSSSMa(&gt;)(*),SSSSMc Â§
	OK(*),KO
}
\end{tcolorbox}

\begin{tcolorbox}[colframe=lightgray,colback=lightgray!5]
\begin{TerminalUnix}[largeur=12cm,Align=center]{}
test@DESKTOP:~$ ping -c 2 ctan.org
PING ctan.org (5.35.249.60) 56(84) bytes of data.
\end{TerminalUnix}
\end{tcolorbox}

\begin{tcolorbox}[colframe=lightgray,colback=lightgray!5]
\begin{VisionnIMG}[Largeur=12cm]{}
\includegraphics[width=5cm]{example-image-b}
\end{VisionnIMG}
\end{tcolorbox}

\begin{tcolorbox}[colframe=lightgray,colback=lightgray!5]
\begin{TerminalMac}[Largeur=14cm,Align=flush left]{}
[test@server]$ ping -c 2 ctan.org
PING ctan.org (5.35.249.60) 56(84) bytes of data.
\end{TerminalMac}
\end{tcolorbox}

\vfill~

\pagebreak

\phantomsection

\hypertarget{matoc}{}

\tableofcontents

\vspace*{5mm}

\hrule

\vspace*{5mm}

\section{Introduction}

\subsection{Description}

Avec ce packages, il est possible de crÃ©er un \og faux \fg{} terminal, ou un \og faux \fg{} menu contextuel, ou encore une \og fausse \fg{} visionneuse, comme sur un Ã©cran d'ordinateur !

Les styles sont \textit{globalement} fixÃ©s, mais quelques personnalisations sont possibles.

\subsection{Chargement}

Pour charger le package, il suffit d'ajouter dans le prÃ©ambule :

\begin{quote}
\begin{verbatim}
\usepackage{sim-os-menus}
\end{verbatim}
\end{quote}

Les packages utiles, et chargÃ©s sont :

\begin{itemize}
	\item \MontreCode{tikz} (avec \MontreCode{calc,positioning}), \MontreCode{pgf}, \MontreCode{pgffor} ;
	\item \MontreCode{calc}, \MontreCode{fontawesome5}, \MontreCode{forest} (avec \MontreCode{edges}) ;
	\item \MontreCode{simplekv}, \MontreCode{xintexpr}, \MontreCode{listofitems}, \MontreCode{xstring} ;
	\item \MontreCode{settobox}, \MontreCode{tabularray} ;
	\item \MontreCode{tcolorbox} (avec \MontreCode{breakable,fitting,skins,listings,listingsutf8,hooks}).
\end{itemize}

Ã€ noter que pour conserver une compatibilitÃ© avec les packages \MontreCode{fontawesome5} et \MontreCode{fontawesome6}, une option de chargement est possible :

\begin{quote}
\begin{verbatim}
\usepackage{sim-os-menus}                  %chargement de fa5, par dÃ©faut
\usepackage[fa6]{sim-os-menus}             %chargement de fa6
\end{verbatim}
\end{quote}

\vfill

\subsection{Historique}

\begin{quote}
\begin{verbatim}
0.1.6 : Correction de bugs + prÃ©-compatibilitÃ© avec fa5/fa6
0.1.4 : Mastodon/BlueSky
0.1.3 : Arborescence type explorateur
0.1.2 : Visionneuse 'like' de scripts
0.1.1 : Ajout des commandes en [fr]
0.1.0 : Version initiale
\end{verbatim}
\end{quote}

\pagebreak

\section{Les commandes disponibles}

\subsection{Menu contextuel}

Dans le but de crÃ©er un menu contextuel, la commande est :

\begin{quote}
\begin{verbatim}
%----menu contextuel
\MenuContextuel[clÃ©s]{liste des items}&lt;options tikz&gt;
\end{verbatim}
\end{quote}

Les \textsf{clÃ©s}, optionnelles et entre \MontreCode{[...]}, sont :

\begin{itemize}
	\item \MontreCode{CoulFond} := couleur du fond ;
	\item \MontreCode{CoulSurlig} : = couleur du surlignage ;
	\item \MontreCode{Arrondi} := boolÃ©en pour arrondir les coins (\MontreCode{true} par dÃ©faut) ;
	\item \MontreCode{Police} := police pour les items (\MontreCode{\textbackslash normalsize\textbackslash normalfont} par dÃ©faut) ;
	\item \MontreCode{CoulItems} := couleur(s) des items (\MontreCode{black} par dÃ©faut) ;
	\item \MontreCode{MargeV} := marge verticale des lignes (\MontreCode{6pt} par dÃ©faut) ;
	\item \MontreCode{MargeH} := marge horizontale des lignes (\MontreCode{12pt} par dÃ©faut) ;
	\item \MontreCode{Fleche} := caractÃ¨re pour la flÃ¨che (\MontreCode{\textbackslash faCaretRight} par dÃ©faut) ;
	\item \MontreCode{ListeSeps} := liste des Ã©ventuels sÃ©parateurs (vide ou pour tous les niveaux !) ;
	\item \MontreCode{ListeIcones} := liste des Ã©ventuelles icones  (vide ou pour tous les niveaux/items !) ;
	\item \MontreCode{ListeDecals} := liste des Ã©ventuels dÃ©calages verticaux pour les sous-menus (Ã&nbsp; partir du nÂ°2, \ldots !) (vide ou pour tous les sous-niveaux !) ;
	\item \MontreCode{Icones} := boolÃ©en pour afficher les icones (\MontreCode{false} par dÃ©faut) ;
	\item \MontreCode{Barre} := boolÃ©en pour une petite barre verticale aprÃ¨s les Ã©ventuelles icones small vertical bar with icons (\MontreCode{true} par dÃ©faut) ;
	\item \MontreCode{Space} := espacement horizontal entre les sous-menus (\MontreCode{-0.125} par dÃ©faut).
\end{itemize}

\medskip

L'argument obligatoire, entre \MontreCode{\{...\}}, correspond Ã&nbsp; la liste des items, sous la forme :

\smallskip

\hfill\MontreCode{item1A,item1B,... Â§ item2A,itemp2B,... Â§ ...}\hfill~

\begin{itemize}
	\item si un item se termine par \MontreCode{(*)}, cela correspond au \textit{dÃ©but} du sous-menu suivant (\underline{un seul} par niveau !) ;
	\item si un item se termine par \MontreCode{(&gt;)} (\underline{avant} un Ã©ventuel \MontreCode{(*)}), une \textit{flÃ¨che} est Ã©crite Ã&nbsp; la fin de la ligne de l'item.
\end{itemize}

Une syntaxe correcte est fondamentale pour que le code prÃ©sente correctement le menu contextuel !

\vspace{5mm}

Quelques conseils, du fait des \textsf{clÃ©s sensibles} \MontreCode{ListeIcones}, \MontreCode{ListeDecals} et \MontreCode{ListeSeps} :

\begin{itemize}
	\item \MontreCode{ListeIcones} doit avoir le mÃªme nombre d'Ã©lÃ©ments que le nombre de menus/items (avec des items vides possibles) ;
	\item \MontreCode{ListeSeps} doit avoir le mÃªme nombre d'Ã©lÃ©ments que le nombre de niveaux (avec des niveaux vides possibles) ;
	\item \MontreCode{ListeDecals} doit avoir le mÃªme nombre d'Ã©lÃ©ments que le nombre de sous-menus (Avec 0 si pas de dÃ©calage !).
\end{itemize}

\begin{tcblisting}{colframe=lightgray,colback=lightgray!5}
%style par dÃ©faut
\MenuContextuel{Item1A(&gt;),Item1B,Item1C(&gt;)(*),Item1D Â§ Item2A(*),Item2B(&gt;),Item2C}
\end{tcblisting}

\begin{tcblisting}{colframe=lightgray,colback=lightgray!5}
%style personnalisÃ©
\MenuContextuel[Arrondi=false,CoulFond=yellow,CoulSurlign=teal,%
  ListeSeps={1,3/2},CoulItems={black/white},Icones,Espacement=0,%
  ListeIcones={\faCut,\faIcon[regular]{copy},\faCopy,\faPaste / \faNotEqual}]
  {Item1A(&gt;)(*),Item1B,Item1C(&gt;),Item1D Â§ Item2A(*),Item2B(&gt;),Item2C}
\end{tcblisting}

\begin{tcblisting}{colframe=lightgray,colback=lightgray!5}
\MenuContextuel[Police=\sffamily,ListeSeps={1,3/1/4/1/},ListeDecals={1,2,1,0}]{%
  Menu1(&gt;),Menu2,Menu3(&gt;)(*),Menu4 Â§
  SousMenuA(&gt;),SousMenuB(&gt;)(*) Â§
  SousSousMenu1,SousSousMenu2,SousSousMenu3(&gt;)(*),SousSousMenu4,SousSousMenu5(&gt;) Â§
  SSSSMa,SSSSMa(&gt;)(*),SSSSMc Â§
  OK(*),KO
}
\end{tcblisting}

\pagebreak

\subsection{Terminal}

Pour crÃ©er un \og faux \fg{} terminal (Win/UNiX/Mac), les environnements sont :

\begin{quote}
\begin{verbatim}
%----Terminal Windows
\begin{TerminalWin}[clÃ©s]{options tcbox}
    ...
\end{TerminalWin}

%----Terminal UNiX
\begin{TerminalUnix}[clÃ©s]{options tcbox}
    ...
\end{TerminalUnix}

%----Terminal OSX
\begin{TerminalMac}[clÃ©s]{options tcbox}
    ...
\end{TerminalMac}
\end{verbatim}
\end{quote}

Les \textsf{clÃ©s}, optionnelles et entre \MontreCode{[...]}, sont :

\begin{itemize}
	\item \MontreCode{Titre} := titre du terminal (\MontreCode{Terminal Win/UNiX/Mac} par dÃ©faut) ;
	\item \MontreCode{Align} := alignement horizontal (paragraphe) du terminal (\MontreCode{center} par dÃ©faut) ;
	\item \MontreCode{Largeur} := largeur du terminal (\MontreCode{\textbackslash linewidth} par dÃ©faut) ;
	\item \MontreCode{Icones} := boolÃ©en pour afficher des icones (\MontreCode{true} par dÃ©faut).
\end{itemize}

\medskip

L'argument obligatoire, entre \MontreCode{\{...\}}, correspond Ã&nbsp; des options spÃ©cifiques, Ã&nbsp; passer Ã&nbsp; la \textsf{tcolorbox}.

\begin{tcblisting}{colframe=lightgray,colback=lightgray!5}
\begin{TerminalWin}{}
Microsoft Windows [version 10.0.22000.493]
(c) Microsoft Corporation. Tous droits rÃ©servÃ©s.
C:\Users\test&gt;ping ctan.org
Envoi d'une requÃªte 'ping' sur ctan.org [5.35.249.60] avec 32 octets de donnÃ©es :
RÃ©ponse de 5.35.249.60 : octets=32 temps=35 ms TTL=51
RÃ©ponse de 5.35.249.60 : octets=32 temps=37 ms TTL=51
RÃ©ponse de 5.35.249.60 : octets=32 temps=35 ms TTL=51
RÃ©ponse de 5.35.249.60 : octets=32 temps=39 ms TTL=51
Statistiques Ping pour 5.35.249.60:
Paquets : envoyÃ©s = 4, reÃ§us = 4, perdus = 0 (perte 0%),
DurÃ©e approximative des boucles en millisecondes :
Minimum = 35ms, Maximum = 39ms, Moyenne = 36ms
\end{TerminalWin}
\end{tcblisting}

\begin{tcblisting}{colframe=lightgray,colback=lightgray!5}
\begin{TerminalUnix}[Align=flush right]{hbox}
test@DESKTOP:~$ ping -c 2 ctan.org
PING ctan.org (5.35.249.60) 56(84) bytes of data.
\end{TerminalUnix}
\end{tcblisting}

\begin{tcblisting}{colframe=lightgray,colback=lightgray!5}
\begin{TerminalMac}[Largeur=14cm,Align=flush left]{}
[test@server]$ ping -c 2 ctan.org
PING ctan.org (5.35.249.60) 56(84) bytes of data.
\end{TerminalMac}
\end{tcblisting}

\pagebreak

\subsection{Visionneuses}

Pour crÃ©er une \og fausse\fg{} visionneuse, les environnements sont :

\begin{quote}
\begin{verbatim}
%----Visionneuse PDF
\begin{VisionnPDF}[clÃ©s]{options tcbox}
    ....
\end{VisionnPDF}

%----Visionneuse d'images
\begin{VisionnIMG}[clÃ©s]{options tcbox}
    ....
\end{VisionnIMG}

%----Visionneuse de script python
\begin{VisionnPY}[clÃ©s]{options tcbox}
    ....
\end{VisionnPY}
\end{verbatim}
\end{quote}

Les \textsf{clÃ©s}, optionnelles et entre \MontreCode{[...]}, sont :

\begin{itemize}
	\item \MontreCode{Titre} := titre de la visionneuse par dÃ©faut ;
	\item \MontreCode{Align} := alignement horizontal (paragraphe) de la visionneuse (\MontreCode{center} par dÃ©faut) ;
	\item \MontreCode{AlignH} := alignement horizontal (du contenu) de la visionneuse (\MontreCode{center} par dÃ©faut) ;
	\item \MontreCode{Largeur} := largeur de la visionneuse (\MontreCode{\textbackslash linewidth} par dÃ©faut) ;
	\item \MontreCode{Icones} := boolÃ©en pour afficher des icones (\MontreCode{true} par dÃ©faut).
\end{itemize}

\medskip

L'argument obligatoire, entre \MontreCode{\{...\}}, correspond Ã&nbsp; des options spÃ©cifiques, Ã&nbsp; passer Ã&nbsp; la \textsf{tcolorbox}.

\begin{tcblisting}{colframe=lightgray,colback=lightgray!5}
\begin{VisionnPDF}{hbox}
\fbox{\includegraphics[page=35,width=6cm]{ProfLycee-doc.pdf}}%
\fbox{\includegraphics[page=36,width=6cm]{ProfLycee-doc.pdf}}
\end{VisionnPDF}
\end{tcblisting}

\begin{tcblisting}{colframe=lightgray,colback=lightgray!5}
\begin{VisionnPDF}[Largeur=14cm,Icones=false]{}
\fbox{\includegraphics[page=65,width=4.75cm]{ProfLycee-doc.pdf}}
\end{VisionnPDF}
\end{tcblisting}

\begin{tcblisting}{colframe=lightgray,colback=lightgray!5}
\begin{VisionnIMG}[Icones=false]{hbox}
\includegraphics[width=5cm]{example-image-b}
\end{VisionnIMG}
\end{tcblisting}

\begin{tcblisting}{colframe=lightgray,colback=lightgray!5}
\begin{VisionnIMG}[Largeur=12cm]{}
\includegraphics[width=3cm]{example-image}
\end{VisionnIMG}
\end{tcblisting}

\begin{tcblisting}{colframe=lightgray,colback=lightgray!5}
%avec un environnement de prÃ©sentation de codes si nÃ©cessaire
\begin{VisionnPY}[Largeur=12cm]{}
\begin{lstlisting}%
    [
        language=python,basicstyle=\ttfamily\small,
        keywordstyle=\color{green!50!black},tabsize=4,
        keywordstyle={[2]\color{magenta}},
        numbers=left,numbersep=3mm,xleftmargin=5mm,
        aboveskip=0pt,belowskip=0pt,
        numberstyle=\footnotesize\ttfamily\color{gray}
    ]
nterms = int(input("Entrez un nombre: "))

n1 = 0
n2 = 1

print("\n la suite Fibonacci est : ")
print(n1, ",", n2, end=", ")

for i in range(2, nterms):
    suivant = n1 + n2
    print(suivant, end=", ")

n1 = n2
n2 = suivant
\end{lstlisting}
\end{VisionnPY}
\end{tcblisting}

\pagebreak

\subsection{Arborescence de dossiers/fichiers}

Le package \MontreCode{forest}, et sa librairie \MontreCode{edges}, permet de prÃ©senter des arbres, Ã&nbsp; la maniÃ¨re d'une arborescence de fichiers.

\begin{quote}
\begin{verbatim}
\begin{ArborDossiers}[clÃ©s]{options forest}
    [dossier,ADdos
        [sous-dossier,ADdos]
        [sous-dossier,ADdos
            [fichier1,ADfic]
            [fichier2,ADfic]
        ...
    ]
        ...
    ]
\end{ArborDossiers}
\end{verbatim}
\end{quote}

Les \textsf{clÃ©s}, optionnelles et entre \MontreCode{[...]}, sont :

\begin{itemize}
	\item \MontreCode{Police} := police des labels ;
	\item \MontreCode{CoulIcoD} := couleur des icones \textsf{dossier} (\MontreCode{gray} par dÃ©faut) ;
	\item \MontreCode{CoulIcoF} := couleur des icones \textsf{fichier} (\MontreCode{gray} par dÃ©faut) ;
	\item \MontreCode{AffIcoD} := boolÃ©en pour afficher les icones \textsf{dossier} ;
	\item \MontreCode{AffIcoF} := boolÃ©en pour afficher les icones \textsf{fichier} ;
	\item \MontreCode{EspaceV} := espace vertical entre les items (\MontreCode{0.15em} par dÃ©faut) ;
	\item \MontreCode{IcoD} := icone par dÃ©faut \textsf{dossier} ;
	\item \MontreCode{IcoF} := icone par dÃ©faut \textsf{fichier}.
\end{itemize}

\medskip

Les \textsf{dossiers} sont Ã&nbsp; dÃ©clarer sous la forme \MontreCode{&lt;nom\_dossier&gt;,ADdos}.

Les \textsf{fichiers} sont Ã&nbsp; dÃ©clarer sous la forme \MontreCode{&lt;nom\_fichier&gt;,ADfic}.

\medskip

L'argument obligatoire, entre \MontreCode{\{...\}}, correspond Ã&nbsp; des options spÃ©cifiques, Ã&nbsp; passer en langage \textsf{forest}.

\begin{tcblisting}{colframe=lightgray,colback=lightgray!5}
\begin{ArborDossiers}{}
    [dossier,ADdos
        [sous-dossier,ADdos]
        [sous-dossier,ADdos
            [fichier1,ADfic]
            [fichier2,ADfic]
        ]
        [fichier3,ADfic]
    ]
\end{ArborDossiers}
\end{tcblisting}

\begin{tcblisting}{colframe=lightgray,colback=lightgray!5}
\begin{ArborDossiers}%
    [Police=\sffamily,CoulIcoD=yellow!50!pink,AffIcoF,CoulIcoF=teal,EspaceV=0.5em]%
    {}
    [dossier,ADdos
        [sous-dossier,ADdos]
        [sous-dossier,ADdos
            [fichier1,ADfic]
            [fichier2,ADfic]
        ]
        [fichier3,ADfic]
    ]
\end{ArborDossiers}
\end{tcblisting}

Les styles sont dÃ©finis de maniÃ¨re globale, et ils peuvent Ãªtre redÃ©finis si besoin.

\begin{tcblisting}{colframe=lightgray,colback=lightgray!5}
\tikzset{ADtrait/.style={thick,-&gt;,densely dashed,red,&gt;=latex}}
\begin{ArborDossiers}%
    [Police=\sffamily,CoulIcoD=yellow!50!pink,AffIcoF,CoulIcoF=teal,EspaceV=0.5em]%
    {l sep=2em}
    [dossier,ADdos
        [sous-dossier,ADdos]
        [sous-dossier,ADdos
            [fichier1,ADfic]
            [fichier2,ADfic]
        ]
        [fichier3,ADfic]
    ]
\end{ArborDossiers}
\end{tcblisting}

\pagebreak

\subsection{Pouets comme sous Mastodon ou BlueSky}

Il est possible de prÃ©senter des messages comme sur les plateformes Mastodon ou BlueSky.

\begin{quote}
\begin{verbatim}
\begin{MastodonPost}[clÃ©s]&lt;options tcolorbox&gt;
...
\end{MastodonPost}

\begin{BlueSkyPost}[clÃ©s]&lt;options tcolorbox&gt;
...
\end{BlueSkyPost}
\end{verbatim}
\end{quote}

Les \textsf{clÃ©s} disponibles sont, Ã&nbsp; donner entre \MontreCode{[...]} :
\begin{itemize}
	\item \MontreCode{width} : largeur de la boÃ®te ;
	\item \MontreCode{avatar} : avatar du compte  (si possible en format \textit{carrÃ©});
	\item \MontreCode{name} : pseudo du compte ;
	\item \MontreCode{account} : compte ;
	\item \MontreCode{time} : temps passÃ© depuis le post ;
	\item \MontreCode{counters} : compteurs pour les views/likes/shares ;
	\item \MontreCode{font} : police du message ;
	\item \MontreCode{colbg} : couleur de fond de la boÃ®te.
\end{itemize}

Les entÃªtes et pies peuvent Ãªtre redÃ©finis grÃ¢ce aux macros suivante :

\begin{tcblisting}{colframe=lightgray,colback=lightgray!5,listing only}
\newcommand\mastodonheader{%
	\begin{tblr}{width=\linewidth,colspec={Q[c,m]X[m,l]Q[m,l]},
			colsep=0pt,cells={font=\scriptsize\sffamily}}
		$\vcenter{\hbox{\includegraphics[height=4ex]{\mastodonaccountavatar}}}$&amp; {\hspace*{1.25ex}\mastodonaccountname \\ \hspace*{1.25ex}\color{darkgray}{\mastodonaccountadress}} &amp; \color{darkgray}{\faGlobeAmericas~\mastodontime} \\
	\end{tblr}\par\medskip
}

\newcommand\blueskyheader{%
	{\scriptsize\sffamily\textbf{\mastodonaccountname}~
	\textcolor{darkgray}{\mastodonaccountadress~
	\textperiodcentered~\mastodontime}}\par\medskip
}

\newcommand\mastodonfooter{%
	\textcolor{darkgray}{\scriptsize\scalebox{-1}[1]{\faShare}~\mastodonnumbers[1] \hfill \faRetweet~\mastodonnumbers[2] \hfill \faStar[regular]~\mastodonnumbers[3] \hfill \faBookmark[regular] \hfill \faEllipsisH}
}

\newcommand\blueskyfooter{%
	\textcolor{darkgray}{\scriptsize\faComment*[regular]~\mastodonnumbers[1] \hfill \faRetweet~\mastodonnumbers[2] \hfill \faHeart[regular]~\mastodonnumbers[3] \hfill \faEllipsisH \hfill~}
}
\end{tcblisting}

\begin{tcblisting}{colframe=lightgray,colback=lightgray!5}
\begin{MastodonPost}
\textbf{TeX} est un systÃ¨me logiciel libre de composition de documents, indÃ©pendant du matÃ©riel utilisÃ© pour la visualisation ou l'impression. Il a Ã©tÃ© crÃ©Ã© Ã&nbsp; partir de 1977 par le mathÃ©maticien et informaticien Donald Knuth, excÃ©dÃ© par la piÃ¨tre qualitÃ© de la typographie des logiciels d'Ã©dition de l'Ã©poque. \TeX\ a vu le jour pour la premiÃ¨re fois en 1978. Il est principalement conÃ§u pour l'Ã©dition de documents techniques et est largement utilisÃ© par les scientifiques, particuliÃ¨rement en mathÃ©matiques, physique, bio-informatique, astronomie et informatique. Il est Ã©galement extensible et permet notamment l'Ã©dition de documents plus complexes (affiches, plaquettes publicitaires, partitions musicales\ldots).

\medskip

\url{https://www.latex-project.org}
\end{MastodonPost}
\end{tcblisting}

\begin{tcblisting}{colframe=lightgray,colback=lightgray!5}
\begin{BlueSkyPost}[width=12cm,account={\symbol{64}TeX.bluesky.social}]
\textbf{TeX} est un systÃ¨me logiciel libre de composition de documents, indÃ©pendant du matÃ©riel utilisÃ© pour la visualisation ou l'impression. Il a Ã©tÃ© crÃ©Ã© Ã&nbsp; partir de 1977 par le mathÃ©maticien et informaticien Donald Knuth, excÃ©dÃ© par la piÃ¨tre qualitÃ© de la typographie des logiciels d'Ã©dition de l'Ã©poque. \TeX\ a vu le jour pour la premiÃ¨re fois en 1978. Il est principalement conÃ§u pour l'Ã©dition de documents techniques et est largement utilisÃ© par les scientifiques, particuliÃ¨rement en mathÃ©matiques, physique, bio-informatique, astronomie et informatique. Il est Ã©galement extensible et permet notamment l'Ã©dition de documents plus complexes (affiches, plaquettes publicitaires, partitions musicales\ldots).

\smallskip

\hfill\includegraphics[width=0.667\linewidth]{example-image-16x9.pdf}\hfill~

\smallskip

\url{https://www.latex-project.org}
\end{BlueSkyPost}
\end{tcblisting}

\end{document}</pre></body></html>