summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2024-11-11 16:55:06 +0000
committerKarl Berry <karl@freefriends.org>2024-11-11 16:55:06 +0000
commitc7523a416aa442151e80be3a262491b057179f46 (patch)
tree2fc13ac3845ae40dc4c9ee40c6e89ecf285459aa /Master/texmf-dist/doc
parentfbaa4104576af33a9409d962f93f8747b7e8daed (diff)
scaletextbullet (10nov24)
git-svn-id: svn://tug.org/texlive/trunk@72818 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc')
-rw-r--r--Master/texmf-dist/doc/latex/scaletextbullet/README.txt6
-rw-r--r--Master/texmf-dist/doc/latex/scaletextbullet/beery.cls290
-rw-r--r--Master/texmf-dist/doc/latex/scaletextbullet/scaletextbullet.pdfbin0 -> 62498 bytes
-rw-r--r--Master/texmf-dist/doc/latex/scaletextbullet/scaletextbullet.tex224
4 files changed, 520 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/scaletextbullet/README.txt b/Master/texmf-dist/doc/latex/scaletextbullet/README.txt
new file mode 100644
index 00000000000..935ecf74089
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/scaletextbullet/README.txt
@@ -0,0 +1,6 @@
+Package: scaletextbullet -- Resize the \textbullet without changing its
+vertical center
+Copyright: 2024 (c) Oliver Beery <beeryoliver@gmail.com>
+CTAN: <ADD CTAN LINK HERE>
+Repository: https://github.com/beeryoliver/scaletextbullet
+License: The LaTeX Project Public License 1.3c
diff --git a/Master/texmf-dist/doc/latex/scaletextbullet/beery.cls b/Master/texmf-dist/doc/latex/scaletextbullet/beery.cls
new file mode 100644
index 00000000000..33feda99eff
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/scaletextbullet/beery.cls
@@ -0,0 +1,290 @@
+% Note: This class is designed ONLY for 'scaletextbullet.tex'. Compiled with LuaTeX.
+
+% LaTeX2e version 2023-11-01 added \IfExplAtLeastTF.
+\NeedsTeXFormat{LaTeX2e}[2023-11-01]
+\ProvidesExplClass
+ {beery}
+ {2024-11-10}
+ {}
+ {}
+
+\LoadClass { article }
+
+\box_new:N \l__beery_tmp_box
+
+\RequirePackage { fontscale }
+\fontscalesetup { musical }
+\RequirePackage { siunitx }
+\sisetup { list-final-separator = { ,~ and~ } , mode = match }
+\RequirePackage { mathtools }
+\RequirePackage [ shortcuts , allowbreakbefore ] { extdash }
+\RequirePackage { csquotes }
+\RequirePackage { lmodern }
+\RequirePackage { fontspec }
+\newfontfamily \newfontfamilystixtwo { STIX Two Text }
+\newfontfamily \newfontfamilysourceseriffour { Source Serif 4 }
+
+\RequirePackage { multicol }
+\RequirePackage { scaletextbullet }
+
+% CUSTOM MACROS
+
+\tl_const:Nn \c_beery_alphabet_tl { abcdefghijklmnopqrstuvwxyz }
+\NewExpandableDocumentCommand \alphabet { } { \c_beery_alphabet_tl }
+\NewDocumentCommand \Key { m o o }
+ {
+ \mode_leave_vertical:
+ \group_begin:
+ \ttfamily
+ \IfNoValueTF {#3}
+ {
+ \IfNoValueTF {#2}
+ {#1}
+ { #1 $\,=\,$ \allowbreak #2 }
+ }
+ { #1 $\,=\,$ #2 \hspace* { \fill } \hbox:n { initial $\,=\,$ #3 } }
+ \group_end:
+ }
+\NewDocumentCommand \Value { m } { \texttt {#1} }
+\NewDocumentCommand \cmd { m } { \texttt { \token_to_str:N #1 } \@ }
+\NewDocumentCommand \cs { m } { \texttt { \token_to_str:c {#1} } \@ }
+\NewDocumentCommand \marg { m }
+ {
+ \allowbreak
+ \texttt { \c_left_brace_str }
+ $\langle$
+ { \normalfont \itshape #1 }
+ $\rangle$
+ \texttt { \c_right_brace_str }
+ }
+\NewDocumentCommand \oarg { m }
+ {
+ \allowbreak
+ \texttt { [ }
+ $\langle$
+ { \normalfont \itshape #1 }
+ $\rangle$
+ \texttt { ] }
+ }
+\NewDocumentCommand \sarg { } { $\langle$ \texttt {*} $\rangle$ }
+\NewDocumentCommand \meta { m }
+ {
+ $\langle$
+ { \normalfont \itshape #1 }
+ $\rangle$
+ }
+\NewDocumentCommand \cls { m } { \textsf {#1} }
+\NewDocumentCommand \env { m } { \texttt {#1} }
+\NewDocumentCommand \pkg { m } { \textsf {#1} }
+\NewDocumentCommand \latin { m } { \textit {#1} }
+
+% PAGE STYLE
+
+\hbox_set:Nn \l__beery_tmp_box { \c_beery_alphabet_tl }
+\dim_const:Nn \c_beery_alphabet_dim { \box_wd:N \l__beery_tmp_box }
+\dim_log:N \c_beery_alphabet_dim
+
+\dim_const:Nn \c_beery_big_dim { \l_fontscale_normalsize_baselineskip_skip }
+\dim_const:Nn \c_beery_medium_dim { \c_beery_big_dim / 2 }
+\dim_const:Nn \c_beery_small_dim { \c_beery_big_dim / 4 }
+\skip_const:Nn \c_beery_big_skip
+ {
+ \c_beery_big_dim
+ plus \dim_eval:n { \c_beery_big_dim / 2 }
+ minus \dim_eval:n { \c_beery_big_dim / 3 }
+ }
+\skip_const:Nn \c_beery_medium_skip { \c_beery_big_skip / 2 }
+\skip_const:Nn \c_beery_small_skip { \c_beery_big_skip / 4 }
+\skip_set_eq:NN \bigskipamount \c_beery_big_skip
+\skip_set_eq:NN \medskipamount \c_beery_medium_skip
+\skip_set_eq:NN \smallskipamount \c_beery_small_skip
+
+\raggedbottom
+\int_set:Nn \vbadness { 100 }
+
+\skip_set:Nn \topskip { \l_fontscale_normalsize_size_dim }
+\skip_set_eq:NN \splittopskip \topskip
+\RequirePackage { geometry }
+\geometry
+ {
+ a4paper
+ , textwidth =
+ \dim_eval:n { \fp_to_dim:n { \c_e_fp * \c_beery_alphabet_dim } }
+ , textheight =
+ \dim_eval:n
+ { \fp_to_dim:n { 1.6180 * \c_e_fp * \c_beery_alphabet_dim } }
+ , heightrounded
+ , centering
+ , headheight = \l_fontscale_footnotesize_baselineskip_skip
+ , headsep = \c_beery_big_dim
+ , footskip =
+ \dim_eval:n
+ { \c_beery_big_dim + \l_fontscale_footnotesize_baselineskip_skip }
+ }
+
+\RequirePackage { fancyhdr }
+\pagestyle { fancy }
+\fancyhf { }
+\cs_set:Npn \headrulewidth { 0pt }
+\fancyfoot [ C ]
+ { \footnotesize \thepage \c_space_tl of~ \pageref { LastPage } }
+
+% PARAGRAPH STYLE
+
+\nonfrenchspacing
+\linespread { 1 }
+\skip_set_eq:NN \parskip \c_beery_medium_skip
+\dim_zero:N \parindent
+\RequirePackage [ raggedrightboxes ] { ragged2e }
+\skip_set:Nn \RaggedRightRightskip { 0pt plus 0.5 \linewidth }
+\dim_zero:N \RaggedRightParindent
+\dim_set_eq:NN \JustifyingParindent \RaggedRightParindent
+\RaggedRight
+\int_set:Nn \pretolerance { -1 }
+\int_set:Nn \tolerance { 200 }
+\dim_zero:N \emergencystretch
+\int_set:Nn \widowpenalty { 10000 }
+\int_set_eq:NN \clubpenalty \widowpenalty
+\int_set_eq:NN \displaywidowpenalty \widowpenalty
+\int_set:Nn \hyphenpenalty { 99 }
+\int_set_eq:NN \exhyphenpenalty \hyphenpenalty
+
+% HEADINGS, TABLE OF CONTENTS
+
+\RequirePackage { titlesec , titletoc }
+\setcounter { secnumdepth } { 2 }
+\setcounter { tocdepth } { 2 }
+
+\titlespacing* \section % section
+ { 0pt } % indent
+ {
+ - \parskip
+ + \c_beery_big_dim
+ plus \fp_eval:n { 1 / 2 * 4 } \c_beery_big_dim
+ minus \fp_eval:n { 1 / 3 / 4 } \c_beery_big_dim
+ } % before
+ { - \parskip + \c_beery_medium_skip } % after
+\titlespacing* \subsection
+ { 0pt }
+ {
+ - \parskip
+ + \fp_eval:n { 4 / 3 } \c_beery_medium_dim
+ plus \fp_eval:n { 1 / 2 * 4 } \c_beery_medium_dim
+ minus \fp_eval:n { 1 / 3 / 4 } \c_beery_medium_dim
+ }
+ { - \parskip + \c_beery_medium_skip }
+
+\titleformat \section % section
+ [ block ] % shape
+ { \raggedright \large \bfseries } % format
+ { \thesection } % label
+ { 1em } % the horizontal separation between label and title body
+ { } % before code
+ { } % after code
+\titleformat \subsection
+ [ block ]
+ { \raggedright \normalsize \bfseries }
+ { \thesubsection }
+ { 1em }
+ { }
+ { }
+
+% LISTS, LIST HEADINGS
+
+\RequirePackage { enumitem }
+\setlist
+ {
+ % horizontal spacing
+ leftmargin = *
+ , labelsep = 0.5em
+ % vertical spacing
+ , topsep = 0pt
+ , partopsep = 0pt
+ , parsep = \c_beery_small_skip
+ , itemsep = 0pt
+ }
+\setlist [ itemize , 1 ] { label = \textbullet }
+\setlist [ itemize , 2 ] { label = \ScaleTextBullets { 2 } }
+\setlist [ itemize , 3 ] { label = \ScaleTextBullets { 3 } }
+\setlist [ enumerate , 1 ] { label = \arabic* . }
+\setlist [ enumerate , 2 ] { label = \theenumi \arabic* . }
+\setlist [ enumerate , 3 ] { label = \theenumii \arabic* . }
+
+% list headings
+% https://tex.stackexchange.com/questions/2644/how-to-prevent-a-page-break-before-an-itemize-list
+\NewDocumentCommand \KeepNextPar { s }
+ {
+ \par
+ \IfBooleanTF #1
+ {
+ \int_compare:nNnT { \prevgraf } = { 1 }
+ { \nobreak \@afterheading }
+ }
+ { \nobreak \@afterheading }
+ }
+\NewDocumentCommand \listheading { m }
+ {
+ \par
+ #1
+ \par
+ \int_compare:nNnT { \prevgraf } = { 1 }
+ { \nobreak \@afterheading }
+ \vspace { \skip_eval:n { \c_beery_small_skip - \parskip } }
+ }
+
+% TABLES
+
+\renewcommand \bottomfraction { 1 }
+\renewcommand \topfraction { 1 }
+\skip_set:Nn \textfloatsep
+ {
+ \c_beery_big_dim plus \c_beery_big_dim minus
+ \dim_eval:n { \c_beery_big_dim / 3 }
+ }
+
+\RequirePackage { tabularray }
+\UseTblrLibrary { booktabs , siunitx }
+
+% FOOTNOTES
+
+\RequirePackage [ bottom ] { footmisc }
+\renewcommand \footnoterule { }
+% \setlength { \skip \footins } { \c_beery_big_skip }
+\dim_set:Nn \footnotesep { \f@linespread \footnotesep }
+\coffin_new:N \l__beery_footnote_coffin
+% 1.2 = baselineskip-size-ratio
+\dim_const:Nn \c_beery_footnote_baselineheight_dim
+ {
+ \fp_to_dim:n
+ { ( 1.2 * \f@linespread - 1 ) * \l_fontscale_footnotesize_size_dim }
+ }
+\RenewDocumentCommand \@makefntext { +m }
+ {
+ \vcoffin_set:Nnn \l__beery_footnote_coffin { \textwidth }
+ {
+ \list { \@thefnmark . }
+ {
+ \dim_set:Nn \leftmargin
+ {
+ \fp_to_dim:n
+ {
+ ( 1 - \l_fontscale_footnotesize_scale_fp ) / 2 * \textwidth
+ }
+ }
+ \dim_set_eq:NN \rightmargin \leftmargin
+ \dim_set:Nn \labelsep { 0.5em }
+ \skip_zero:N \topsep
+ \skip_zero:N \partopsep
+ }
+ \item #1 \endlist
+ }
+ \coffin_typeset:Nnnnn \l__beery_footnote_coffin { l } { b }
+ { 0pt } { - \c_beery_footnote_baselineheight_dim }
+ }
+
+% REFERENCES
+
+\AddToHook { shipout / lastpage } { \label { LastPage } }
+\RequirePackage { xurl }
+\RequirePackage { hyperref }
+\hypersetup { bookmarksnumbered , hidelinks , linktoc = page } \ No newline at end of file
diff --git a/Master/texmf-dist/doc/latex/scaletextbullet/scaletextbullet.pdf b/Master/texmf-dist/doc/latex/scaletextbullet/scaletextbullet.pdf
new file mode 100644
index 00000000000..d1aa36d2383
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/scaletextbullet/scaletextbullet.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/scaletextbullet/scaletextbullet.tex b/Master/texmf-dist/doc/latex/scaletextbullet/scaletextbullet.tex
new file mode 100644
index 00000000000..95cfd592739
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/scaletextbullet/scaletextbullet.tex
@@ -0,0 +1,224 @@
+\documentclass{beery}
+
+\NewDocumentCommand\textbulletfactor{}{\cs{textbullet} factor}
+
+
+\begin{document}
+
+
+\section*
+ {%
+ \SetFontStep*{1}%
+ The \pkg{scaletextbullet} package%
+ }
+
+Resize the \cs{textbullet} without changing its vertical center
+
+Oliver Beery
+
+Version 1.0.0\quad{}10 November 2024
+
+
+\section{Introduction}
+\label{sec:intro}
+
+The \pkg{scaletextbullet} package enables the user to resize the \cs{textbullet} without moving its vertical center, unlike direct usage of the \LaTeXe{} and \pkg{expl3} commands \cs{scalebox} and \cs{box_scale:}.
+This process is not fully automated\---the user must use \cs{SetTextBulletFactor} to set the \textbulletfactor{} to the correct value to display the resized \cs{textbullet} at the correct height.
+The \textbulletfactor{} is the ratio of the width of the \cs{textbullet}, excluding its empty space, to its width, including its empty space.
+One way of estimating the \textbulletfactor{} is by using \cs{scaletextbulletdebug}.
+
+This package provides a solution that works in text mode.
+For a solution that works only in math mode, see the linked \TeX{} Stack Exchange thread.%
+\footnote{\url{https://tex.stackexchange.com/questions/119319/how-to-correctly-shrink-the-bullets-of-itemize}}
+
+
+\section{Commands}
+\label{sec:commands}
+
+This package defines some commands whose argument takes a \meta{floating point expression} or \meta{integer expression}.
+This syntax has the same representation as the arguments to \cs{fpeval} and \cs{inteval}, documented in \pkg{usrguide}.%
+\footnote{\url{https://ctan.org/pkg/usrguide}}
+
+\cs{SetTextBulletFactor} \marg{floating point expression}
+\KeepNextPar*
+
+Sets the \textbulletfactor{} to the result of computing the \meta{floating point expression}.
+The \textbulletfactor{} is the ratio of the width of the \cs{textbullet}, excluding its empty space, to its width, including its empty space.
+This change is local to the current group.
+The initial \textbulletfactor{} is \num{0.4}\---this matches the dimensions of the \cs{textbullet} of the Latin Modern font at size \qty{10}{pt}.
+
+\cs{ScaleTextBullet} \marg{floating point expression}
+\KeepNextPar*
+
+Prints a \cs{textbullet} with its size scaled by the result of computing the \meta{floating point expression}.
+The new \cs{textbullet} will be printed with the same vertical center only if the \textbulletfactor{} is set to the correct value.
+
+\cs{ScaleTextBullets} \oarg{floating point expression} \marg{integer expression}
+\KeepNextPar*
+
+Prints a number of \cs{textbullet}s equal to the value of \meta{integer expression} with about the same total area as the original \cs{textbullet}.%
+\footnote
+ {%
+ In calculating the total area, I have approximated each \cs{textbullet} as a perfect circle, but, of course, the actual shape depends on the font used.%
+ }
+If the optional argument is used, the size of each \cs{textbullet} is instead scaled by the result of computing the \meta{floating point expression}.
+The new \cs{textbullet} will be printed with the same vertical center only if the \textbulletfactor{} is set to the correct value.
+
+\cs{scaletextbulletdebug}
+\KeepNextPar*
+
+This command is provided only to help the user estimate the \textbulletfactor{}.
+Prints \num{15} consecutive \cs{textbullet}s with decreasing sizes.
+The \cs{textbullet}s are followed by the original \cs{textbullet} inside a framed box.
+The framed box has width equal to the \textbulletfactor{} \texttimes{} the total width of the \cs{textbullet} (this includes its empty space).
+
+The \textbulletfactor{} is set to the correct value when the 15 consecutive \cs{textbullet}s have the same vertical center and the \cs{textbullet} fits nicely inside the framed box.
+
+
+\section{Application}
+\label{sec:application}
+
+I wrote this package primarily to create nicer\-/looking itemized lists.
+The default list labels in \LaTeX{} (and other programs) fail to communicate the list level within the list hierarchy:
+
+\begin{multicols}{2}
+ \begin{itemize}[label=\textbullet]
+ \item List level 1
+ \begin{itemize}[label=\textbf{--}]
+ \item List level 2
+ \item List level 2
+ \begin{itemize}[label=\textasteriskcentered]
+ \item List level 3
+ \end{itemize}
+ \end{itemize}
+ \item List level 1
+ \begin{itemize}[label=\textbf{--}]
+ \item List level 2
+ \begin{itemize}[label=\textasteriskcentered]
+ \item List level 3
+ \item List level 3
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{multicols}
+
+This contrasts with traditional enumerated list structures where the list level is obvious from the numbering of the list label:
+
+\begin{multicols}{2}
+ \begin{enumerate}
+ \item List level 1
+ \begin{enumerate}
+ \item List level 2
+ \item List level 2
+ \begin{enumerate}
+ \item List level 3
+ \end{enumerate}
+ \end{enumerate}
+ \item List level 1
+ \begin{enumerate}
+ \item List level 2
+ \begin{enumerate}
+ \item List level 3
+ \item List level 3
+ \end{enumerate}
+ \end{enumerate}
+ \end{enumerate}
+\end{multicols}
+
+This package allows the user to create nice\-/looking itemized lists using \cs{ScaleTextBullets}:
+
+\begin{multicols}{2}
+ \begin{itemize}
+ \item List level 1
+ \begin{itemize}
+ \item List level 2
+ \item List level 2
+ \begin{itemize}
+ \item List level 3
+ \end{itemize}
+ \end{itemize}
+ \item List level 1
+ \begin{itemize}
+ \item List level 2
+ \begin{itemize}
+ \item List level 3
+ \item List level 3
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{multicols}
+
+Maybe the visual effect is more clear with different fonts.
+This example uses STIX Two Text and Source Serif 4, respectively.
+
+\begingroup
+ \SetTextBulletFactor{0.54}
+ \newfontfamilystixtwo
+ \begin{multicols}{2}
+ \begin{itemize}
+ \item List level 1
+ \begin{itemize}
+ \item List level 2
+ \item List level 2
+ \begin{itemize}
+ \item List level 3
+ \end{itemize}
+ \end{itemize}
+ \item List level 1
+ \begin{itemize}
+ \item List level 2
+ \begin{itemize}
+ \item List level 3
+ \item List level 3
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+ \end{multicols}
+\endgroup
+
+\begingroup
+ \SetTextBulletFactor{0.75}
+ \newfontfamilysourceseriffour
+ \begin{multicols}{2}
+ \begin{itemize}
+ \item List level 1
+ \begin{itemize}
+ \item List level 2
+ \item List level 2
+ \begin{itemize}
+ \item List level 3
+ \end{itemize}
+ \end{itemize}
+ \item List level 1
+ \begin{itemize}
+ \item List level 2
+ \begin{itemize}
+ \item List level 3
+ \item List level 3
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+ \end{multicols}
+\endgroup
+
+
+\section{Implementation notes}
+\label{sec:implementation}
+
+The procedure of resizing the \cs{textbullet} without changing its vertical center, including the definition of the \textbulletfactor{}, makes an important assumption:
+That the \cs{textbullet} is a perfect circle.
+Of course, this is not completely accurate and the actual shape depends on the font used.
+This means that the \textbulletfactor{} may not be exactly the ratio of the width of the \cs{textbullet}, excluding its empty space, to its width, including its empty space.
+
+In writing this package, I have referenced a comment on the \TeX{} Stack Exchange by the user egreg.%
+\footnote{\url{https://tex.stackexchange.com/questions/620507/how-to-resize-textbullet-without-the-bullet-moving-down/638599\#638599}}
+This package uses the same procedure for resizing the \cs{textbullet} without changing its vertical center.
+
+
+\section{Programming}
+\label{sec:programming}
+
+This package is written in \pkg{expl3}, but does not provide any public functions or variables.
+
+
+\end{document} \ No newline at end of file