% !TeX TXS-program:compile = txs:///arara
% arara: pdflatex: {shell: no, synctex: no, interaction: batchmode}
% arara: pdflatex: {shell: no, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)')

\documentclass[french,11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{DejaVuSerifCondensed}
\usepackage[scale=1.075]{inconsolata}
\usepackage{enumitem}
\usepackage{circularglyphs}
\usepackage{multicol}
\usepackage{soul}
\usepackage{multicol}
\usepackage{fontawesome5}
\usepackage{fancyvrb}
\usepackage{fancyhdr}
\usepackage{tabularx}
\usepackage{tabularray}
\fancyhf{}
\renewcommand{\headrulewidth}{0pt}
\lfoot{\sffamily\small [circularglyphs]}
\cfoot{\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

\usepackage{hyperref}
\urlstyle{same}
\hypersetup{pdfborder=0 0 0}
\usepackage[margin=1.5cm]{geometry}
\setlength{\parindent}{0pt}

\def\TPversion{0.1.1}
\def\TPdate{6 octobre 2023}

\usepackage{babel}

\usepackage[most]{tcolorbox}
\tcbuselibrary{listingsutf8}
\newtcblisting{DemoCode}[1][]{%
	enhanced,width=0.95\linewidth,center,%
	bicolor,size=title,%
	colback=cyan!2!white,%
	colbacklower=cyan!1!white,%
	colframe=cyan!75!black,%
	listing options={%
		breaklines=true,%
		breakatwhitespace=true,%
		style=tcblatex,basicstyle=\small\ttfamily,%
		tabsize=4,%
		commentstyle={\itshape\color{gray}},
		keywordstyle={\color{blue}},%
		classoffset=0,%
		keywords={},%
		alsoletter={-},%
		keywordstyle={\color{blue}},%
		classoffset=1,%
		alsoletter={-},%
		morekeywords={center,justify},%
		keywordstyle={\color{violet}},%
		classoffset=2,%
		alsoletter={-},%
		morekeywords={\CircGlyph},%
		keywordstyle={\color{green!50!black}},%
		classoffset=3,%
		morekeywords={Ext,Inline},%
		keywordstyle={\color{orange}}
	},%
	#1
}

\sethlcolor{lightgray!25}
\NewDocumentCommand\MontreCode{ m }{%
	\hl{\vphantom{\texttt{pf}}\texttt{#1}}%
}

\begin{document}

\pagestyle{fancy}

\thispagestyle{empty}

\begin{center}
	\begin{minipage}{0.75\linewidth}
	\begin{tcolorbox}[colframe=yellow,colback=yellow!15]
		\begin{center}
			\begin{tabular}{c}
				{\Huge \texttt{circularglyphs}}\\
				\\
				{\LARGE Alphabet Circular Glyphs,} \\
				\\
				{\LARGE en \LaTeX, créé avec \TikZ.} \\
			\end{tabular}
			
			\medskip
			
			{\small \texttt{Version \TPversion{} -- \TPdate}}
		\end{center}
	\end{tcolorbox}
\end{minipage}
\end{center}

\vspace*{1mm}

\begin{center}
	\begin{tabular}{c}
	\texttt{Cédric Pierquet}\\
	{\ttfamily c pierquet -- at -- outlook . fr}\\
	\texttt{\url{https://github.com/cpierquet/circularglyphs}}
	\\
	\texttt{\url{https://www.deviantart.com/irolan/art/Circular-Glyphs-479352599}}
\end{tabular}
\end{center}

\hrule

\phantomsection

\hypertarget{matoc}{}

\tableofcontents

\vspace*{5mm}

\hrule

\vspace*{5mm}

\vfill

\textbf{Article n°1 de la Déclaration des Droits de l'Homme et du Citoyen de 1789 : }

\medskip

\CircGlyph{Les hommes naissent et demeurent libres et égaux en droits. Les distinctions sociales ne peuvent être fondées que sur l'utilité commune.}

\bigskip

\textbf{Article n°2 de la Déclaration des Droits de l'Homme et du Citoyen de 1789 : }

\medskip

{\LARGE\CircGlyph{Le but de toute association politique est la conservation des droits naturels et imprescriptibles de l'homme. Ces droits sont la liberté, la propriété, la sûreté, et la résistance à l'oppression.}}

\bigskip

\textbf{Article n°3 de la Déclaration des Droits de l'Homme et du Citoyen de 1789 : }

\medskip

{\large\CircGlyph[Color=purple]{Le principe de toute souveraineté réside essentiellement dans la nation. Nul corps, nul individu ne peut exercer d'autorité qui n'en émane expressément.}}

\vfill~

\pagebreak

\section{Le package circularglyphs}

\subsection{Idée}

L'idée est de proposer de quoi écrire du texte grâce à l'alphabet \textsf{Circular Glyphs}.

\smallskip

\textsf{Circular Glyphs} est un alphabet graphique de substitution basé sur une construction géométrique à base de cercles et d'arc de cercles sur une grille.

Il a été mis à disposition -- en licence libre -- par \textsf{Irolan}, sur sa page \href{https://www.deviantart.com/irolan/art/Circular-Glyphs-479352599}{devianart}.

\subsection{Caractères disponibles}

Dans l'alphabet \textsf{Circular Glyphs}, on a les règles suivantes :

\begin{itemize}
	\item les minuscules et majuscules sont identiques ;
	\item les accents ne sont pas traités ;
	\item les espaces, tirets et apostrophes sont traités comme un caractère \textsf{Null} ;
	\item les autres caractères sont ignorés.
\end{itemize}

\bigskip

\begin{tblr}{width=\linewidth,stretch=1.5,colspec={*{13}{X[m,c]}},row{even}={font=\LARGE\ttfamily},row{odd}={font=\LARGE}}
	\CircGlyph[Inline]{a}&\CircGlyph[Inline]{b}&\CircGlyph[Inline]{c}&\CircGlyph[Inline]{d}&\CircGlyph[Inline]{e}&\CircGlyph[Inline]{f}&\CircGlyph[Inline]{g}&\CircGlyph[Inline]{h}&\CircGlyph[Inline]{i}&\CircGlyph[Inline]{j}&\CircGlyph[Inline]{k}&\CircGlyph[Inline]{l}&\CircGlyph[Inline]{m}\\
	A&B&C&D&E&F&G&H&I&J&K&L&M\\
	\CircGlyph[Inline]{n}&\CircGlyph[Inline]{o}&\CircGlyph[Inline]{p}&\CircGlyph[Inline]{q}&\CircGlyph[Inline]{r}&\CircGlyph[Inline]{s}&\CircGlyph[Inline]{t}&\CircGlyph[Inline]{u}&\CircGlyph[Inline]{v}&\CircGlyph[Inline]{w}&\CircGlyph[Inline]{x}&\CircGlyph[Inline]{y}&\CircGlyph[Inline]{z}\\
	N&O&P&Q&R&S&T&U&V&W&X&Y&Z\\
	\CircGlyph[Inline]{0}&\CircGlyph[Inline]{1}&\CircGlyph[Inline]{2}&\CircGlyph[Inline]{3}&\CircGlyph[Inline]{4}&\CircGlyph[Inline]{5}&\CircGlyph[Inline]{6}&\CircGlyph[Inline]{7}&\CircGlyph[Inline]{8}&\CircGlyph[Inline]{9}\\
	0&1&2&3&4&5&6&7&8&9\\
	\CircGlyph[Inline]{ }&&&&&&&&&&&\\
	Null&&&&&&&&&&&&&\\
\end{tblr}

\subsection{Chargement}

Le package se charge dans le préambule, via \MontreCode{\textbackslash usepackage\{circularglyphs\}}.

\begin{DemoCode}[listing only]
\usepackage{circularglyphs}
\end{DemoCode}

Les seuls packages utilisés sont :

\begin{itemize}
	\item \MontreCode{tikz} ;
	\item \MontreCode{xstring} ;
	\item \MontreCode{calc} ;
	\item \MontreCode{simplekv}.
\end{itemize}

\subsection{La police CircularGlyphs.ttf}

À noter, pour les utilisateurs de \hologo{LuaLaTeX} ou \hologo{XeLaTeX} qu'une police de caractères est disponible sur la page citée précédemment (\texttt{CircularGlyphs.ttf}), et que celle-ci sera sans doute plus pertinente que ce package pour des éventuelles transcriptions \textit{conséquentes} !!

\pagebreak

\section{Commande et fonctionnement}

\subsection{Compatibilité}

Le package est compatible (normalement) avec les compilateurs classiques (\hologo{LuaLaTeX}, \hologo{pdfLaTeX}, etc) et des tests ont été réalisés pour tester le bon fonctionnement avec des caractères spéciaux comme \MontreCode{;} ou \MontreCode{:}.

\smallskip

Attention toutefois si la commande est incluse dans un environnement ou dans une autre commande, surtout si des caractères actifs sont présents\ldots

\subsection{Commande basique}

La commande permettant de \textit{transcrire} du texte en \textsf{Circular Glyphs} est tout simplement :

\begin{DemoCode}[]
%mode paragraphe
\CircGlyph{Les hommes naissent et demeurent libres et égaux en droits. Les distinctions sociales ne peuvent être fondées que sur l'utilité commune.}
\end{DemoCode}

\begin{DemoCode}[]
%mode en ligne
\CircGlyph[Inline]{Les hommes naissent et demeurent libres et égaux en droits.}
\end{DemoCode}

La version avec la clé \MontreCode{[Inline]} (en mode \textit{en ligne}) ne permet pas d'obtenir une grille très \textit{satisfaisante}, alors que la version \textit{classique} le gère, grâce à \MontreCode{\textbackslash offinterlineskip} et \MontreCode{\textbackslash par}, donc la commande avec la clé \MontreCode{[Inline]} est à réserver pour insérer des caractères \textsf{Circular Glyphs} simples.

\medskip

Il existe également la clé \MontreCode{[Color=...]} pour permettre de colorer les glyphes de manière directe, car il n'est (pour le moment) pas possible d'utiliser la commande en parallèle de \MontreCode{\textbackslash textcolor}

\medskip

Concernant la création et disposition des glyphes :

\begin{itemize}
	\item chaque caractère à une hauteur équivalente (il est un tout petit peu plus haut\ldots) à celle des lettres \MontreCode{ab...yzAB...YZ} dans la police courante ;
	\item un caractère est \textit{aligné} sur les caractères \MontreCode{ab...yzAB...YZ} dans la police courante ;
	\item le passage à la ligne est géré par le code, ce qui permet d'avoir une présentation sous forme de \textit{grille}.
\end{itemize}

\begin{DemoCode}[]
%positionnement des glyphes
y\CircGlyph[Inline]{ABCDEFG}S
\end{DemoCode}

\begin{DemoCode}[]
%influcence de la police
{\LARGE\sffamily q\CircGlyph[Inline]{ABCDEFG}S}
\end{DemoCode}

\pagebreak

\subsection{Caractères alternatifs}

Des caractères alternatif sont accessibles en activant la clé \MontreCode{[Ext]}, qui permet d'obtenir des glyphes complémentaires (on sort un peu du cadre \textsf{Circular} quand même !).

\begin{multicols}{4}
\begin{itemize}[label=\textbullet]
	\item {\LARGE \MontreCode{,} : \CircGlyph[Inline,Ext]{,}}
	\item {\LARGE \MontreCode{;} : \CircGlyph[Inline,Ext]{;}}
	\item {\LARGE \MontreCode{.} : \CircGlyph[Inline,Ext]{.}}
	\item {\LARGE \MontreCode{?} : \CircGlyph[Inline,Ext]{?}}
	\item {\LARGE \MontreCode{!} : \CircGlyph[Inline,Ext]{!}}
	\item {\LARGE \MontreCode{:} : \CircGlyph[Inline,Ext]{:}}
	\item {\LARGE \MontreCode{-} : \CircGlyph[Inline,Ext]{-}}
	\item {\LARGE \MontreCode{'} : \CircGlyph[Inline,Ext]{'}}
	\item {\LARGE \MontreCode{+} : \CircGlyph[Inline,Ext]{+}}
	\item {\LARGE \MontreCode{*} : \CircGlyph[Inline,Ext]{*}}
	\item {\LARGE \MontreCode{(} : \CircGlyph[Inline,Ext]{(}}
	\item {\LARGE \MontreCode{)} : \CircGlyph[Inline,Ext]{)}}
	\item {\LARGE \MontreCode{=} : \CircGlyph[Inline,Ext]{=}}
	\item {\LARGE \MontreCode{/} : \CircGlyph[Inline,Ext]{/}}
	\item {\LARGE \MontreCode{<} : \CircGlyph[Inline,Ext]{<}}
	\item {\LARGE \MontreCode{>} : \CircGlyph[Inline,Ext]{>}}
\end{itemize}
\end{multicols}
%{\renewcommand\arraystretch{1.5}\begin{tabularx}{\linewidth}{*{13}{c}}
%	{\LARGE\CircGlyph[Inline,Ext]{,}}&{\LARGE\CircGlyph[Ext,Inline]{;}}&\CircGlyph[Ext,Inline]{.}&\CircGlyph[Ext,Inline]{?}&\CircGlyph[Ext,Inline]{!}&\CircGlyph[Ext,Inline]{:}&\CircGlyph[Ext,Inline]{-}&\CircGlyph[Ext,Inline]{'}&\CircGlyph[Ext,Inline]{+}&\CircGlyph[Ext,Inline]{+}&\CircGlyph[Ext,Inline]{(}&\CircGlyph[Ext,Inline]{)}&\CircGlyph[Ext,Inline]{=}\\
%	,&;&.&?&!&:&-&'&+&*&(&)&= \\
%\end{tabularx}}

%\begin{tblr}{width=\linewidth,stretch=1.5,colspec={*{13}{X[m,c]}}}
%	{\LARGE\CircGlyph[Inline,Ext]{,}}&{\LARGE\CircGlyph[Ext,Inline]{;}}&\CircGlyph[Ext,Inline]{.}&\CircGlyph[Ext,Inline]{?}&\CircGlyph[Ext,Inline]{!}&\CircGlyph[Ext,Inline]{:}&\CircGlyph[Ext,Inline]{-}&\CircGlyph[Ext,Inline]{'}&\CircGlyph[Ext,Inline]{+}&\CircGlyph[Ext,Inline]{+}&\CircGlyph[Ext,Inline]{(}&\CircGlyph[Ext,Inline]{)}&\CircGlyph[Ext,Inline]{=}\\
%%	,&;&.&?&!&:&-&'&+&*&(&)&= \\
%%	\CircGlyph[Ext,Inline]{/}&\CircGlyph[Ext,Inline]{<}&\CircGlyph[Ext,Inline]{>} \\
%%	/&<&> \\
%\end{tblr}

\begin{DemoCode}[]
%texte sans glyphes etendus, mode en ligne
\CircGlyph[Inline]{Moi, auteur ; je : tu ! il ! nous ?}
\end{DemoCode}

\begin{DemoCode}[]
%texte sans glyphes etendus, mode hors ligne
\CircGlyph{Moi, auteur ; je : tu ! il ! nous ?}
\end{DemoCode}

\begin{DemoCode}[]
%texte avec glyphes etendus, mode en ligne
\CircGlyph[Ext,Inline]{Moi, auteur ; je : tu ! il ! nous ?}
\end{DemoCode}

\begin{DemoCode}[]
%texte avec glyphes etendus, mode hors ligne
\CircGlyph[Ext]{Moi, auteur ; je : tu ! il ! nous ?}
\end{DemoCode}

\begin{DemoCode}[]
%un peu de Maths ?
\CircGlyph[Ext,Inline]{2+3+5=10 et 1<9}
\end{DemoCode}

\subsection{Conseils et compléments}

Pour les caractères spéciaux et/ou accentués, il est conseillé d'utiliser les encodages \MontreCode{T1} et \MontreCode{utf8}, ainsi que le package \MontreCode{babel}.

\smallskip

Pour des problèmes de compatibilité avec les \texttt{catcodes}, il est conseillé de limiter l'utilisation de symboles de ponctuation comme \texttt{;} ou \texttt{:}, en utilisant par exemple un éditeur de texte pour les remplacer ou supprimer.

\smallskip

L'utilisation de \MontreCode{\textbackslash noindent} est recommandée en mode paragraphe pour que la \textit{grille} soit correctement affichée.

\smallskip

Pour de \textit{longs} paragraphes, le temps de compilation peut être relativement long, du fait de l'analyse caractère par caractère\ldots

\smallskip

Il est à noter que certains caractères peuvent poser des soucis en fonction du compilateur et/ou des environnements utilisés (ceci étant dû aux caractères actifs\ldots)

\pagebreak

\section{Historique}

\verb|v0.1.1|~:~~~~Compatibilité accrue avec \hologo{pdfLaTeX} et les caractères actifs + Clé \MontreCode{[Color]}

\verb|v0.1.0|~:~~~~Version initiale

\end{document}