summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/circledsteps
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-01-09 03:01:07 +0000
committerNorbert Preining <norbert@preining.info>2020-01-09 03:01:07 +0000
commit6ffc3e21c28ac83a308bf93982e8842d177dd23e (patch)
tree7e8b4d97bb1007e30decb7b64af7e746056daa4e /macros/latex/contrib/circledsteps
parent1b3f15203efd63cdab3fb47f37ff5f6c10558477 (diff)
CTAN sync 202001090301
Diffstat (limited to 'macros/latex/contrib/circledsteps')
-rw-r--r--macros/latex/contrib/circledsteps/circledsteps-manual.pdfbin337762 -> 404870 bytes
-rw-r--r--macros/latex/contrib/circledsteps/circledsteps-manual.tex90
-rw-r--r--macros/latex/contrib/circledsteps/circledsteps.sty60
3 files changed, 112 insertions, 38 deletions
diff --git a/macros/latex/contrib/circledsteps/circledsteps-manual.pdf b/macros/latex/contrib/circledsteps/circledsteps-manual.pdf
index ae0581a644..e7b54234b3 100644
--- a/macros/latex/contrib/circledsteps/circledsteps-manual.pdf
+++ b/macros/latex/contrib/circledsteps/circledsteps-manual.pdf
Binary files differ
diff --git a/macros/latex/contrib/circledsteps/circledsteps-manual.tex b/macros/latex/contrib/circledsteps/circledsteps-manual.tex
index c98ab46e4c..4867907abf 100644
--- a/macros/latex/contrib/circledsteps/circledsteps-manual.tex
+++ b/macros/latex/contrib/circledsteps/circledsteps-manual.tex
@@ -16,10 +16,10 @@
urlcolor=blue, % color of external links
}
\usepackage{showexpl}
-\lstset{pos=t, overhang=0pt,hsep=\columnsep,vsep=\bigskipamount,
+\lstset{pos=l, overhang=0pt,hsep=\columnsep,vsep=\bigskipamount,
rframe=single,numbers=left,numberstyle=\tiny,numbersep=.3em, xleftmargin=1em,
columns=flexible, language=[LaTeX]TEX,breaklines=true,
- basicstyle=\small\ttfamily,tabsize=3, varwidth}
+ basicstyle=\small\ttfamily,tabsize=3, width=0.4\linewidth}
\usepackage{circledsteps}
\title{The \texttt{circledsteps} package: circled numbers, circled steps and more}
@@ -36,20 +36,37 @@ This package was born thanks to the discussion on \href{https://tex.stackexchang
This package provides two things: the first one, macros to generate the circled text that use the original \texttt{pict2e} method, and then a (simple, to be taken as an example) set of macro to generate sequential circled numbers that can be referenced afterward.
+The package loads (if not already loaded) the packages \texttt{pict2e}, \texttt{pictures}, \texttt{xcolor} and \texttt{pgfkeys} (the latter one is automatically loaded by \texttt{tikz}; you do not need \texttt{tikz} to use just \texttt{circledsteps}). Moreover, \texttt{etoolbox} is loaded to modify \texttt{pict2e} to have filled ovals.
+
+The manual is for version~\cstepsversion. The main changes between version are listed below.
+\begin{description}
+ \item[v1.2] Added optional argument to the commands and make them sensitive to math mode (thanks to \texttt{@tallmarmot} for the suggestion and example code); fixed several bugs.
+
+ Added \texttt{fill color} for the circles background.
+ \item[v1.1] Default to normal colors; keep the ``red/blue'' theme as optional.
+ If you use the package option \texttt{redblue} or \texttt{legacy} you will have the same effect than
+ \begin{lstlisting}[]
+ \pgfkeys{/csteps/inner color=red, /csteps/outer color=blue}
+ \end{lstlisting}
+ \item[v1.0] Initial release.
+\end{description}
+
+
\section{Basic commands}
The basic commands are:
\begin{tabular}{>{\ttfamily\textbackslash}ll}
\toprule
- Circled\{\} & circled text using the package colors, text on the baseline\\
- CircledTop\{\} & circled text using the package colors, circle on the baseline\\
- CircledText\{\} & circled text using the current color (may fail\footnotemark{} across pages break in header or footers)\\
+ Circled[]\{\} & circled text using the package colors, text on the baseline\\
+ CircledTop[]\{\} & circled text using the package colors, circle on the baseline\\
+ CircledText[]\{\} & circled text using the current color\footnotemark{}\\
\bottomrule
\end{tabular}
-\footnotetext{in the sense it can select the wrong color.}
+\footnotetext{it may fail when used in headers or footers, in the sense it can select the wrong color in case of page breaks.}
+
+The parameters for the output are controlled using \texttt{pgfkeys}; you can change them with \verb|\pgfkeys| or \verb|\tikzset|; you can obviously limit the effect of change using normal \LaTeX{} scoping rules. Also, you can specify parameters (without the initial \texttt{/csteps/} as optional arguments to the commands.
-The parameters for the output are controlled using \texttt{pgfkeys}; you can change them with \verb|\tikzset|; you can obviously limit the effect of change using normal \LaTeX{} scoping rules.
The pseudo-color \texttt{none} means that the current color is used for both the text and the circle.
\begin{tabular}{>{\ttfamily}lll}
@@ -60,15 +77,18 @@ The pseudo-color \texttt{none} means that the current color is used for both the
/csteps/inner xsep & horizontal spacing & 4pt\\
/csteps/inner color & color of the text & none\\
/csteps/outer color & color of the circle & none\\
+ /csteps/fill color & background color of the circle & none\\
\bottomrule
\end{tabular}
-The working of the package is better explained with examples.
+The usage of the package is better explained with examples.
-\begin{LTXexample}
-This is normal text: \Circled{1} is on the baseline, \CircledTop{2} is on top.
-This is more evident if you have descendents, like p:\Circled{p} and \CircledTop{p}.
+\begin{LTXexample}
+This is normal text: \Circled{1} is on the baseline, \CircledTop{2} is on top.\par
+This is more evident if you have descendents, like p: \Circled{p} and \CircledTop{p}.\par
+You can set options as optional arguments, like \Circled[inner color=red]{R} or \CircledTop[outer color=green]{g}.\par
+Math mode is detected too: \Circled{A} and $\Circled{A}^{\Circled{A}}$.
\end{LTXexample}
@@ -80,52 +100,68 @@ For big horizontal things the circle becomes oval: \Circled{200} or \CircledTop{
\begin{LTXexample}
Inside \texttt{tikz} they work ok:
+\tikzset{/csteps/outer color=green!30!black}
\begin{tikzpicture}[scale=0.8, rotate=30,
text width=3cm, transform shape]
- \node [draw,color=purple]{text \Circled{1}};
+ \node [draw,color=purple]{text \Circled{1}
+ \Circled[inner color=blue]{2}};
\end{tikzpicture}
\end{LTXexample}
\begin{LTXexample}
-\tikzset{/csteps/inner ysep=10pt}
-\tikzset{/csteps/inner xsep=10pt}
+\pgfkeys{/csteps/inner ysep=10pt}
+\pgfkeys{/csteps/inner xsep=10pt}
If you like more breathing space:
\Circled{1} \Circled{2} \Circled{p} \Circled{200} \Circled{199}.
\par\bigskip
\end{LTXexample}
\begin{LTXexample}
-\tikzset{/csteps/inner color=green}
-\tikzset{/csteps/outer color=gray}
+\pgfkeys{/csteps/inner color=green}
+\pgfkeys{/csteps/outer color=gray}
If you want to change colors it's easy:
\Circled{1} \Circled{2} \Circled{p} \Circled{200} \Circled{199}.
\par\bigskip
\end{LTXexample}
-If you use the package option \texttt{redblue} or \texttt{legacy} you will have the same effect than
+\begin{LTXexample}
+\pgfkeys{/csteps/inner color=white}
+\pgfkeys{/csteps/outer color=red}
+\pgfkeys{/csteps/fill color=black}
+And you can have filled circles and ovals:
+\Circled{\textbf{1}} \Circled{\textbf{199}}.
+\par\bigskip
+\end{LTXexample}
-\begin{lstlisting}[]
- \tikzset{/csteps/inner color=red, /csteps/outer color=blue}
-\end{lstlisting}
\begin{LTXexample}
-Or even you can have inline numbers like \CircledText{1} or
+You can have inline numbers like \CircledText{1} or
exponents\textsuperscript{\CircledText{2}} and so on.
\textcolor{red}{They follow the current color: \CircledText{1} and \CircledText{2} automatically,} as you can see: \CircledText{$1+1\approx3$}. In-text circled numbers look better when a bit smaller, though, as you can see in {\small\CircledText{1}} for example.
\end{LTXexample}
-No, you can't fill the circle/oval. Pull requests in that sense are welcome.
+You can have also quite nice math mode effects, thanks to suggestion from \texttt{@tallmarmot}:
+
+\begin{LTXexample}
+ \[\Circled[outer color=red]{x}\]
+ \[\int\limits_{-1}^1\!\mathrm{d}x\,f_{\ell_1}(x)\]
+ \[\Circled[outer color=blue]{\int\limits_{-1}^1}\!
+ \Circled[outer color=orange]{\mathrm{d}x}
+ f_{\Circled[outer color=red]{\ell}_{\Circled[outer color=cyan]{1}}}(x)\]
+\end{LTXexample}
+
\section{Automatically generated numbers}
-The command \verb|\cstep| will generate a circled number, starting from \texttt{1}, that can be referenced with the normal \verb|\label| mechanism. You can reset the numbering with
+The command \verb|\cstep| will generate a circled number, starting from \texttt{1}, that can be referenced with the normal \verb|\label|/\verb|\ref| mechanism.\footnote{Notice that in the example the numbers in the references one the right are blue to to \texttt{hyperref} configuration!} You can reset the numbering with
\verb|\startcstep|. For example:
\input{ctikzexample.tex}
\lstinputlisting{ctikzexample.tex}
+
\bigskip
\section{Personalize it!}
@@ -133,14 +169,12 @@ The command \verb|\cstep| will generate a circled number, starting from \texttt{
The definition of \verb|CircledTexT| is simply the following one; you can get idea and define your own easily (beware of spaces at the end of the lines, though!):
\begin{lstlisting}
-\newcommand{\CircledText}[1]{%
- \begingroup
- \tikzset{/csteps/inner color=none, /csteps/outer color=none,}
- \Circled{#1}%
- \endgroup
+\newcommand{\CircledText}[2][]{%
+ \csteps@CircledParamOpts{inner color=none, outer color=none, #1}{1}{#2}%
}
\end{lstlisting}
+where \verb|\CircledParamOpts| is a macro with three arguments: the first one is the list of options (without the \texttt{/csteps/} part), the second one is 1 is you want the circle content on the baseline and 0 if you want it on top of it, and finally the third one is the text to be ``circled''.
Also the implementation of the \verb|\cstep| command and relatives is quite simple, and you can play a lot with it to change things (formats, colors, the type of numbering, and so on):
diff --git a/macros/latex/contrib/circledsteps/circledsteps.sty b/macros/latex/contrib/circledsteps/circledsteps.sty
index 8949ec71cb..db49c69cbc 100644
--- a/macros/latex/contrib/circledsteps/circledsteps.sty
+++ b/macros/latex/contrib/circledsteps/circledsteps.sty
@@ -1,6 +1,7 @@
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}[1996/06/01]
-\ProvidesPackage{circledsteps}[2019/11/01 v1.1 Circled steps that you can reference]
+\ProvidesPackage{circledsteps}[2020/01/08 v1.2 Circled steps that you can reference]
+\def\cstepsversion{v1.2}
% \end{macrocode}
%
% Copyright (c) 2019 Romano Giannetti
@@ -12,20 +13,30 @@
\RequirePackage{pict2e}
\RequirePackage{picture}
\RequirePackage{pgfkeys} % for the pgfkeys
+\pgfkeys{/csteps/.is family}
\pgfkeys{/csteps/inner ysep/.initial=4pt,
/csteps/inner xsep/.initial=4pt,
/csteps/inner color/.initial=none,
/csteps/outer color/.initial=none,
+ /csteps/fill color/.initial=none,
}
\DeclareOption{redblue}{
- \tikzset{/csteps/inner color=red, /csteps/outer color=blue}%
+ \pgfkeys{/csteps/inner color=red, /csteps/outer color=blue}%
}
\DeclareOption{legacy}{
- \tikzset{/csteps/inner color=red, /csteps/outer color=blue}%
+ \pgfkeys{/csteps/inner color=red, /csteps/outer color=blue}%
}
% end of options definitions
\ProcessOptions\relax
+% thanks @egreg https://tex.stackexchange.com/a/523450/38080
+\RequirePackage{etoolbox}
+\newif\ifcstepsfilledovals\cstepsfilledovalsfalse
+\@ifpackageloaded{picture}{\patchcmd\PcOrg@@oval}{\patchcmd\@oval}
+ {\pIIe@strokeGraph}
+ {\ifcstepsfilledovals\pIIe@fillGraph\else\pIIe@strokeGraph\fi}
+ {}{}
+
\newsavebox\csteps@CBox
\newlength\csteps@XLength \newlength\csteps@YLength \newlength\csteps@YDepth \newlength\csteps@tmplen
@@ -33,15 +44,21 @@
\edef\csteps@none{none}%
\edef\csteps@outercolor{\pgfkeysvalueof{/csteps/outer color}}%
\edef\csteps@innercolor{\pgfkeysvalueof{/csteps/inner color}}%
+ \edef\csteps@fillcolor{\pgfkeysvalueof{/csteps/fill color}}%
\csteps@XLength=\wd\csteps@CBox\advance\csteps@XLength by\pgfkeysvalueof{/csteps/inner xsep}\relax
\csteps@tmplen=\pgfkeysvalueof{/csteps/inner ysep}\relax
\csteps@YDepth=\dp\csteps@CBox\advance\csteps@YDepth by 0.5\csteps@tmplen\relax
\csteps@YLength=\ht\csteps@CBox\advance\csteps@YLength by\dp\csteps@CBox\advance\csteps@YLength by\pgfkeysvalueof{/csteps/inner ysep}\relax
% \typeout{DBG:#2\space X:\the\csteps@XLength\space Y:\the\csteps@YLength\space D:\the\csteps@YDepth}%
+ % \typeout{DBG\space inner:\csteps@innercolor\space outer:\csteps@outercolor\space ARG2:#2}%
\raisebox{-#1\csteps@YDepth}{%
\ifdim\csteps@XLength>\csteps@YLength
\makebox[\csteps@XLength]{% X bigger than Y
\makebox(0,\csteps@YLength){%
+ \ifx\csteps@fillcolor\csteps@none\else
+ \color{\csteps@fillcolor}%
+ {\cstepsfilledovalstrue\put(0,0){\oval(\csteps@XLength,\csteps@YLength)}}%
+ \fi
\ifx\csteps@outercolor\csteps@none\else
\color{\csteps@outercolor}%
\fi
@@ -49,7 +66,7 @@
}%
\makebox(0,\csteps@YLength){%
\put(-.5\wd\csteps@CBox,0){%
- \ifx\csteps@outercolor\csteps@none
+ \ifx\csteps@innercolor\csteps@none
#2\relax%
\else
\textcolor{\csteps@innercolor}{#2}%
@@ -59,6 +76,10 @@
\else
\makebox[\csteps@YLength]{%
\makebox(0,\csteps@YLength){%
+ \ifx\csteps@fillcolor\csteps@none\else
+ \color{\csteps@fillcolor}%
+ \put(0,0){\circle*{\csteps@YLength}}%
+ \fi
\ifx\csteps@outercolor\csteps@none\else
\color{\csteps@outercolor}%
\fi
@@ -66,7 +87,7 @@
}%
\makebox(0,\csteps@YLength){%
\put(-.5\wd\csteps@CBox,0){%
- \ifx\csteps@outercolor\csteps@none
+ \ifx\csteps@innercolor\csteps@none
#2\relax%
\else
\textcolor{\csteps@innercolor}{#2}%
@@ -79,14 +100,33 @@
% \end{macrocode}
% Main commands:
% \begin{macrocode}
-\def\Circled#1{\csteps@CircledParam{1}{#1}}
-\def\CircledTop#1{\csteps@CircledParam{0}{#1}}
-\newcommand{\CircledText}[1]{%
+\newcommand{\CircledParamOpts}[3]{%
\begingroup
- \tikzset{/csteps/inner color=none, /csteps/outer color=none}%
- \Circled{#1}%
+ \pgfkeys{/csteps/.cd, #1}%
+ \ifmmode
+ \mathchoice{%
+ \csteps@CircledParam{#2}{$\displaystyle #3$}%
+ }%
+ {%
+ \csteps@CircledParam{#2}{$\textstyle #3$}%
+ }%
+ {%
+ \csteps@CircledParam{#2}{$\scriptstyle #3$}%
+ }%
+ {%
+ \csteps@CircledParam{#2}{$\scriptscriptstyle #3$}%
+ }%
+ \else
+ \csteps@CircledParam{#2}{#3}%
+ \fi
\endgroup
}
+
+\newcommand{\Circled}[2][]{\CircledParamOpts{#1}{1}{#2}}
+\newcommand{\CircledTop}[2][]{\CircledParamOpts{#1}{0}{#2}}
+\newcommand{\CircledText}[2][]{%
+ \CircledParamOpts{inner color=none, outer color=none, #1}{1}{#2}%
+}
% \end{macrocode}
% Automatic counters code
% \begin{macrocode}