summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/pangram/pangram.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/pangram/pangram.dtx')
-rw-r--r--macros/latex/contrib/pangram/pangram.dtx430
1 files changed, 430 insertions, 0 deletions
diff --git a/macros/latex/contrib/pangram/pangram.dtx b/macros/latex/contrib/pangram/pangram.dtx
new file mode 100644
index 0000000000..8c33d97955
--- /dev/null
+++ b/macros/latex/contrib/pangram/pangram.dtx
@@ -0,0 +1,430 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2022 by Zhang Tingxuan <alphaztx@163.com>
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3c 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.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Zhang Tingxuan.
+%
+% This work consists of the files pangram.dtx,
+% and the derived files pangram.ins,
+% pangram.sty,
+% pangram.pdf,
+% and README.md.
+%
+%<*internal>
+\iffalse
+%</internal>
+%
+%<*readme>
+# The `pangram` Package
+
+The `pangram` package aims to provide an easy way for testing fonts.
+
+See `pangram.pdf` for more. Happy TeXing!
+
+## License
+
+This work may be distributed and/or modified under the conditions of
+the [LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
+either version 1.3c of this license or (at your option) any later version.
+
+------
+
+Copyright (C) 2022 by Zhang Tingxuan <alphaztx@163.com>.
+%</readme>
+%
+%<*internal>
+\fi
+\begingroup
+ \def\NameOfLaTeXe{LaTeX2e}
+\expandafter\endgroup\ifx\NameOfLaTeXe\fmtname\else
+\csname fi\endcsname
+%</internal>
+%
+%<*install>
+\input docstrip.tex
+\keepsilent
+
+\preamble
+
+ Copyright (C) 2022 by Zhang Tingxuan <alphaztx@163.com>
+
+ This work may be distributed and/or modified under the
+ conditions of the LaTeX Project Public License, either
+ version 1.3c 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.
+
+ This work has the LPPL maintenance status `maintained'.
+
+ The Current Maintainer of this work is Zhang Tingxuan.
+
+ This work consists of the files pangram.dtx,
+ and the derived files pangram.ins,
+ pangram.sty,
+ pangram.pdf,
+ and README.md.
+
+\endpreamble
+
+\generate{
+ \usedir{tex/latex/pangram}
+ \file{\jobname.sty} {\from{\jobname.dtx}{package}}
+%</install>
+%<*internal>
+ \usedir{source/latex/pangram}
+ \file{\jobname.ins} {\from{\jobname.dtx}{install}}
+%</internal>
+%<*install>
+ \usedir{doc/latex/pangram}
+ \nopreamble\nopostamble
+ \file{README.md} {\from{\jobname.dtx}{readme}}
+}
+
+\obeyspaces
+\Msg{****************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the *}
+\Msg{* following file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* pangram.sty *}
+\Msg{* *}
+\Msg{* The recommended directory is *}
+\Msg{* TDS:tex/latex/pangram *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file *}
+\Msg{* pangram.dtx through XeLaTeX/LuaLaTeX. *}
+\Msg{* XeLaTeX and LuaLaTeX are recommended if you *}
+\Msg{* hope the PDF file to be smaller. *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{****************************************************}
+
+\endbatchfile
+%</install>
+%
+%<*internal>
+\fi
+%</internal>
+%
+%<*driver>
+\ProvidesFile{pangram.dtx}[2022/10/9 (c) Copyright 2022 by Zhang Tingxuan]
+\documentclass{ltxdoc}
+
+\usepackage[letterpaper,left=5cm,right=4cm,top=4cm,bottom=4cm,
+ includeheadfoot]{geometry}
+
+\usepackage{xcolor}
+\definecolor{titlecolor}{RGB}{0,12,160}
+\usepackage{doc}
+\usepackage{fancyvrb}
+\fvset{xleftmargin=2.5em,fontsize=\small,gobble=2}
+\MakeShortVerb|
+
+\usepackage{hologo}
+\def\XeTeX{\hologo{XeTeX}}
+\def\LuaTeX{\hologo{LuaTeX}}
+
+\def\pkg{\textsf}
+\def\opt{\texttt}
+
+\title{\leavevmode\hbox to 0pt{\hss\huge The quick brown fox jumps over the lazy dog\hss}\\
+ --- The \pkg{pangram} package}
+\author{Zhang Tingxuan}
+\long\date{2022/10/9\quad Version 0.0b\thanks{\url{https://github.com/AlphaZTX/pangram}
+If you want to maintain this package, just contact me through GitHub issues or pull a
+request.}}
+
+\usepackage{hyperref}
+\hypersetup{
+ pdftitle = {The pangram Package},
+ pdfauthor = {Zhang Tingxuan},
+ pdfcreator = {XeLaTeX/LuaLaTeX},
+ linkcolor = black,
+ urlcolor = titlecolor!80!black,
+}
+\def\pkg{\textsf}
+
+\makeatletter
+\renewcommand\section{\@startsection{section}{1}{\z@}%
+ {-2.5ex plus -1ex minus -.2ex}%
+ {1ex plus .2ex}%
+ {\normalfont\Large\bfseries\color{titlecolor}}}
+\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
+ {-2ex plus -1ex minus -.2ex}%
+ {.5ex plus .2ex}%
+ {\normalfont\normalsize\bfseries\color{titlecolor}}}
+\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
+ {.8ex plus .4ex minus .2ex}%
+ {-1em}%
+ {\normalfont\normalsize\bfseries\color{titlecolor}}}
+\makeatother
+\usepackage{fontspec}
+\setmainfont{Latin Modern Roman}
+\setsansfont{Latin Modern Sans}
+\setmonofont{Latin Modern Mono}
+\usepackage{ragged2e}
+\usepackage{pangram}
+
+\linespread{1.05}
+\parskip12pt plus 3pt minus 2pt
+\parindent2.5em
+\RaggedRight
+
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+%
+% \maketitle
+%
+% \begin{abstract}
+% Pangram is a phrase or sentence containing all letters in an alphabet,
+% usually used for testing fonts. One famous pangram is ``The quick brown
+% fox jumps over the lazy dog''. This package provide a (somewhat) simple
+% way for font designers or users to test fonts.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \newgeometry{left=1cm,right=1cm,top=1cm,bottom=1cm}
+% \pangram[
+% sizes = { 5pt, 6pt, 7pt, 8pt, 9pt,
+% 10pt, 11pt, 12pt, 14pt, 16pt,
+% 18pt, 20pt, 22pt, 24pt, 30pt,
+% 36pt, 40pt, 44pt, 48pt, 64pt,
+% 72pt, 96pt},
+% linegap = 0pt plus 1fil,
+% tagfont = \ttfamily\footnotesize\color{gray},
+% font = \fontspec{Latin Modern Roman},
+% after = \thispagestyle{empty},
+% ]
+% \restoregeometry
+%
+% \section{How to use this package}
+% To load the package, just write
+% \begin{Verbatim}
+% \usepackage{pangram}
+% \end{Verbatim}
+% in preamble.
+%
+% Then in your document, write
+% \begin{Verbatim}
+% \pangram
+% \end{Verbatim}
+% to get the result like the previous page.
+%
+% Please notice that \cs{pangram} will stay in a seperate page.
+%
+% \section{Options}
+% The \cs{pangram} command can receive an optional key-val list
+% specifying the details of the pangram page. Here are the keys:
+% \begin{itemize}
+% \item \opt{textclass} stands for the pangram text in pangram page.
+% The default value is \opt{default}, yields ``The quick brown fox
+% jumps over the lazy dog. 0123456789''. \opt{uppercase} and \opt{glass}
+% are also available, which yields ``THE QUICK BROWN FOX JUMPS OVER THE
+% LAZY DOG. 0123456789'' and ``I can eat glass and it doesn't hurt me.''
+% (although the latter one cannot be regarded as pangram).
+%
+% \item \opt{sizes} for the sizes shown in \cs{pangram}. Default value is
+% \texttt{\{5pt, 7pt, 8pt, 9pt, 10pt, 11pt, 12pt, 14pt, 16pt, 18pt, 20pt,
+% 22pt, 24pt, 36pt, 48pt, 60pt, 72pt\}}.
+%
+% \item \opt{linegap} is the line skip between two lines in \cs{pangram}.
+% Default value is \opt{5pt plus 3pt minus 2pt}.
+%
+% \item \opt{tagskip} is the skip between the tag and the pangram text.
+% Default value is \opt{5pt}.
+%
+% \item \opt{tagfont} sets the font of tag. Default value is
+% |\ttfamily\footnotesize|.
+%
+% \item \opt{font} sets the font of pangram text. Default value is empty.
+%
+% \item \opt{before} stands for the content before pangram text in pangram page.
+% Default value is empty.
+%
+% \item \opt{after} stands for the content after pangram text in pangram page.
+% Default value is empty.
+% \end{itemize}
+% If you want to set the keys globally, use \cs{PangramSetup} in your preamble,
+% the argument of \cs{PangramSetup} is the same as the one of \cs{pangram}.
+%
+% Attention! If any of the value to the keys contains an ``\opt{=}'' symbol,
+% the value should be put into a group. For example,
+% \begin{Verbatim}
+% \pangram[ font={\fontspec{Latin Modern Roman}[Mapping=tex-text]} ]
+% \end{Verbatim}
+%
+% \section{New pangram text classes}
+% Besides the three pre-defined pangram text classes, you can define your own
+% pangram text classes through \cs{NewPangramClass}:
+%
+% \cs{NewPangramClass}\marg{text class}\marg{text}
+%
+% \section{A complicated example}
+% Set the package globally (used in preamble):
+% \begin{Verbatim}
+% \PangramSetup{
+% sizes={9bp,10bp,12bp,20bp,36bp,44bp,48bp,64bp},
+% tagfont=\color{gray}\ttfamily\footnotesize,
+% }
+% \NewPangramClass{abc}{abcdefghijklmnopqrstuvwxyz}
+% \end{Verbatim}
+%
+% Get the result locally (Needs \pkg{fontspec} package and any package provides
+% \cs{color} command):
+% \begin{Verbatim}
+% \pangram[font=\fontspec{Latin Modern Roman}]
+% \pangram[textclass=glass,
+% font={\fontspec{Latin Modern Sans}[Mapping=tex-text]}]
+% \pangram[textclass=abc,font=\fontspec{Latin Modern Mono}]
+% \end{Verbatim}
+% The text class \opt{abc} here is defined in the previous paragraph.
+%
+% \section{The source code}
+% \begin{macrocode}
+%<*package>
+\NeedsTeXFormat{LaTeX2e}[2022/06/01]
+\ProvidesPackage{pangram}[2022/10/09 Pangram, a tool for testing fonts]
+% \end{macrocode}
+% Use a \opt{clist} to restore the sizes for \cs{pangram},
+% and an integer for its index (here we use \opt{index} instead
+% of \opt{int}).
+% \begin{macrocode}
+\ExplSyntaxOn
+\clist_new:N \l_pangram_sizes_clist
+\int_new:N \l_pangram_size_index
+\clist_set:Nn \l_pangram_sizes_clist
+ {
+ 5pt, 7pt, 8pt, 9pt, 10pt, 11pt,
+ 12pt, 14pt, 16pt, 18pt, 20pt, 22pt,
+ 24pt, 36pt, 48pt, 60pt, 72pt
+ }
+% \end{macrocode}
+% Three pre-defined text classes (token lists) for \cs{pangram}.
+% \begin{macrocode}
+\tl_const:Nn \c_pangram_text_default_tl
+ { The~quick~brown~fox~jumps~over~the~lazy~dog. ~ 0123456789 }
+\tl_const:Nn \c_pangram_text_uppercase_tl
+ { THE~QUICK~BROWN~FOX~JUMPS~OVER~THE~LAZY~DOG. ~ 0123456789 }
+\tl_const:Nn \c_pangram_text_glass_tl
+ { I~can~eat~glass~and~it~doesn't~hurt~me. }
+% \end{macrocode}
+% \DescribeMacro{\NewPangramClass}
+% Use way equivalent to \cs{csname}\dots\cs{endcsname} to define
+% new text classes.
+% \begin{macrocode}
+\NewDocumentCommand \NewPangramClass { m m }
+ {
+ \exp_after:wN \tl_const:Nn \cs:w c_pangram_text_#1_tl \cs_end: { #2 }
+ }
+% \end{macrocode}
+% Inner function for \opt{sizes} option. Here use the \pkg{xparse}'s new
+% \cs{IfBlankTF} mechanism to judge if the sizes should be reset.
+% \begin{macrocode}
+\NewDocumentCommand \pangram_resetsizes:n { m }
+ {
+ \IfBlankF {#1} { \clist_set:Nn \l_pangram_sizes_clist { #1 } }
+ }
+% \end{macrocode}
+% The keys.
+% \begin{macrocode}
+\keys_define:nn { pangram }
+ {
+ textclass.tl_set:N = \l_pangram_textclass_tl ,
+ textclass.default:n = default ,
+ textclass.initial:n = default ,
+ sizes.code:n = \pangram_resetsizes:n { #1 } ,
+ linegap.skip_set:N = \l_pangram_linegap_skip ,
+ linegap.default:n = 5pt plus 3pt minus 2pt ,
+ linegap.initial:n = 5pt plus 3pt minus 2pt ,
+ tagskip.skip_set:N = \l_pangram_tagskip_skip ,
+ tagskip.default:n = 5pt ,
+ tagskip.initial:n = 5pt ,
+ tagfont.tl_set:N = \l_pangram_tagfont_tl ,
+ tagfont.default:n = \ttfamily \footnotesize ,
+ tagfont.initial:n = \ttfamily \footnotesize ,
+ font.tl_set:N = \l_pangram_font_tl ,
+ before.tl_set:N = \l_pangram_before_tl ,
+ after.tl_set:N = \l_pangram_after_tl ,
+ }
+% \end{macrocode}
+% \DescribeMacro{\PangramSetup}
+% Set up the package in preamble.
+% \begin{macrocode}
+\NewDocumentCommand \PangramSetup { m }
+ { \keys_set:nn { pangram } { #1 } }
+% \end{macrocode}
+% \DescribeMacro{\pangram}
+% The function itself.
+% \begin{macrocode}
+\NewDocumentCommand \pangram { +O{} }
+ {
+ \group_begin:
+ \keys_set:nn { pangram } { #1 }
+ \clearpage
+ \skip_set:Nn \parskip { \c_zero_dim }
+% \end{macrocode}
+% Use a loop to get all of the entries in the sizes \opt{clist}.
+% \begin{macrocode}
+ \int_set:Nn \l_pangram_size_index { 0 }
+ \tl_use:N \l_pangram_before_tl
+ \int_do_while:nNnn
+ { \l_pangram_size_index } < { \clist_count:N \l_pangram_sizes_clist }
+ {
+ \mode_leave_vertical:
+ \int_incr:N \l_pangram_size_index % index++;
+ \hbox_to_zero:n
+ {
+ \hss
+ \tl_use:N \l_pangram_tagfont_tl
+ \clist_item:Nn \l_pangram_sizes_clist { \l_pangram_size_index }
+ \skip_horizontal:N \l_pangram_tagskip_skip
+ }
+ \hbox_to_zero:n
+ {
+ \tl_use:N \l_pangram_font_tl
+ \fontsize
+ { \clist_item:Nn \l_pangram_sizes_clist { \l_pangram_size_index } }
+ { \c_zero_dim } % \z@
+ \selectfont
+ \tl_use:c { c_pangram_text_ \tl_use:N \l_pangram_textclass_tl _tl }
+ \hss
+ }
+ \int_compare:nNnT
+ { \l_pangram_size_index } = { \clist_count:N \l_pangram_sizes_clist }
+ { \skip_set:Nn \l_pangram_linegap_skip {0pt} }
+ \par
+ \skip_vertical:N \l_pangram_linegap_skip
+ }
+% \end{macrocode}
+% The loop ends here.
+% \begin{macrocode}
+ \tl_use:N \l_pangram_after_tl
+ \clearpage
+ \group_end:
+ }
+\ExplSyntaxOff
+%</package>
+% \end{macrocode}
+\endinput \ No newline at end of file