% \iffalse %<*internal> \iffalse %</internal> %<*readme> _______________________ The showcharinbox package v0.1 Show charcters inside a box display its height, depth, and width information. If you want to report any bugs or typos and corrections in the documentation, or ask for any new features, or suggest any improvements, or ask any questions about the package, then please do not send any direct emails to us; we will not answer any direct emails. Instead please use the issue tracker: <https://github.com/persian-tex/showcharinbox/issues> In doing so, please always explain your issue well enough, always include a minimal working examples showing the issue, and always choose the appropriate label for your query (i.e. if you are reporting any bugs, choose `bug' label). Current version release date: 2013/04/04 ______________ Persian TeX Group persian-tex@tug.org Copyright © 2012–2013 Distributed under the LaTeX Project Public License It may be distributed and/or modified under the LaTeX Project Public License, version 1.3c or higher (your choice). The latest version of this license is at: http://www.latex-project.org/lppl.txt This work is “maintained” (as per LPPL maintenance status) by Persian TeX Group. %</readme> %<*internal> \fi \begingroup %</internal> %<*batchfile> \input docstrip.tex \keepsilent \preamble ______________________________________ Copyright © 2012–2013 Persian TeX Group License information appended. \endpreamble \postamble Copyright © 2012–2013 Persian TeX Group <persian-tex@tug.org> It may be distributed and/or modified under the LaTeX Project Public License, version 1.3c or higher (your choice). The latest version of this license is at: http://www.latex-project.org/lppl.txt This work is “maintained” (as per LPPL maintenance status) by Persian TeX Group. \endpostamble \askforoverwritefalse \generate{\file{showcharinbox.sty}{\from{\jobname.dtx}{showcharinbox.sty}}} %</batchfile> %<batchfile>\endbatchfile %<*internal> \generate{\file{\jobname.ins}{\from{\jobname.dtx}{batchfile}}} \nopreamble\nopostamble \generate{\file{README.txt}{\from{\jobname.dtx}{readme}}} \endgroup \immediate\write18{mv README.txt README} \immediate\write18{makeindex -s gind.ist -o \jobname.ind \jobname.idx} \immediate\write18{makeindex -s gglo.ist -o \jobname.gls \jobname.glo} %</internal> % %<*driver> \documentclass{ltxdoc} \usepackage{bidicode,fontspec} \usepackage{calc} \usepackage{pifont} \usepackage{bbding} \setlength\columnseprule{.4pt} \newfontfamily\testfont{XB Yas} \usepackage[numbered]{hypdoc} \usepackage{showcharinbox} \definecolor{myblue}{rgb}{0.1,0.2,0.8} \hypersetup{linkcolor=myblue,urlcolor=myblue,citecolor=myblue} \makeatletter \renewcommand\tableofcontents{\relax \begin{multicols}{2}[\section*{\contentsname}]\small \@starttoc{toc}\relax \end{multicols}} \makeatother \newcounter{local} \renewcommand\theenumi{\protect\setcounter{local}% {201+\the\value{enumi}}\protect\ding{\value{local}}} \renewcommand\labelenumi{\theenumi} \renewcommand\labelitemi{\HandRight} \renewcommand\labelitemii{\HandRightUp} \renewcommand\labelitemiii{\HandCuffRight} \renewcommand\labelitemiv{\HandPencilLeft} \EnableCrossrefs \CodelineIndex \RecordChanges %\OnlyDescription \begin{document} \DocInput{\jobname.dtx} \PrintIndex \PrintChanges \end{document} %</driver> % % % \fi % % \GetFileInfo{\jobname.cls} % \CheckSum{0} % \makeatletter %\title{The \textsf{showcharinbox} package\\ %\href{https://github.com/persian-tex/showcharinbox}{\texttt{https://github.com/persian-tex/showcharinbox}}} %\author{Persian TeX Group\\ \href{mailto:persian-tex@tug.org}{\texttt{persian-tex@tug.org}}} %\date{Version 0.1\qquad\today} %\maketitle %\tableofcontents %\section{What does the \textsf{showcharinbox} package do?} % This package defines the command \Lcs{ShowCharInBox} which has the following syntax: %\begin{BDef} %\Lcs{ShowCharInBox}\Largb{\Larga{charcter}} %\end{BDef} % This will show \Larga{charcter} inside a box showing its height, depth, and width information. %\begin{LTXexample}[morekeywords={ShowCharInBox,testfont,newfontfamily},pos=b] %\documentclass{article} %\usepackage{fontspec} %\newfontfamily\testfont{XB Yas} %\usepackage{showcharinbox} %\begin{document} %\begin{center} %\ShowCharInBox{\fontsize{200}{210}\testfont \char"FEA5} %\end{center} %\end{document} %\end{LTXexample} % \StopEventually{} % % \section{Implementation of \textsf{showcharinbox} package} %\iffalse %<*showcharinbox.sty> %\fi % % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} \newcommand*{\showcharinbox@date}{2013/04/04} \newcommand*{\showcharinbox@version}{v0.1} \ProvidesPackage{showcharinbox} [\showcharinbox@date\space \showcharinbox@version\space Showing characters inside a box] \newdimen\showcharinbox@charwidth \newdimen\showcharinbox@charheight \newdimen\showcharinbox@chardepth \newbox\showcharinbox@bigdot \newbox\showcharinbox@smalldot % \end{macrocode} % Macros for drawing figures: % \begin{macrocode} \newcommand*{\showcharinbox@hidehrule}[2]{% \kern-#1\hrule height#1 depth#2 \kern-#2 } \newcommand*{\showcharinbox@hidevrule}[2]{\kern-#1{\dimen0=#1 \advance\dimen0 by#2\vrule width\dimen0}\kern-#2 } % \end{macrocode} % \Lcs{showcharinbox@makeblankbox} puts rules at the edges of a blank box % whose dimensions are those of \Lcs{box0} (assuming nonnegative wdith, height, and depth). % Argument 1 is rule thickness outside, and argument 2 is rule thickness inside: % \begin{macrocode} \newcommand*{\showcharinbox@makeblankbox}[2]{\hbox{\lower\dp0\vbox{\showcharinbox@hidehrule{#1}{#2}% % \end{macrocode} %overlap the rules at the corners: % \begin{macrocode} \kern-#1% \hbox to\wd0{\showcharinbox@hidevrule{#1}{#2}% % \end{macrocode} %set the vrule height: % \begin{macrocode} \raise\ht0\vbox to #1{}% % \end{macrocode} %set the vrule depth: % \begin{macrocode} \lower\dp0\vtop to #1{}% \hfil\showcharinbox@hidevrule{#2}{#1}}% \kern-#1\showcharinbox@hidehrule{#2}{#1}}}} \newcommand*{\showcharinbox@maketypebox}{\showcharinbox@makeblankbox{0pt}{1pt}} \newcommand*{\showcharinbox@makelightbox}{\showcharinbox@makeblankbox{.2pt}{.2pt}} % \end{macrocode} % \Lcs{box}\Lcs{showcharinbox@bigdot} is a null box with a bullet at its reference point. \Lcs{ht0} is the axis height: % \begin{macrocode} \setbox0=\hbox{$\vcenter{}$} % % \end{macrocode} %bullet is centered on the axis: % \begin{macrocode} \setbox1=\hbox to\z@{$\hss\bullet\hss$} % \setbox\showcharinbox@bigdot=\vbox to\z@{\kern-\ht1 \kern\ht0 \box1 \vss} % \end{macrocode} %\Lcs{cdot} is centered on the axis: % \begin{macrocode} \setbox1=\hbox to\z@{$\hss\cdot\hss$} % \setbox\showcharinbox@smalldot=\vbox to\z@{\kern-\ht1 \kern\ht0 \box1 \vss} % \end{macrocode} % \Lcs{showcharinbox@arrows} makes things like $\leftarrow\hbox{ text }\rightarrow$: % \begin{macrocode} \newcommand*{\showcharinbox@arrows}[2]{% % \end{macrocode} %Argument 1 is width and argument 2 is text: % \begin{macrocode} {\setbox0=\hbox{$\mkern-2mu\mathord-\mkern-2mu$} \hbox to #1{\kern-.055556em$\leftarrow\mkern-6mu$% \cleaders\copy0\hfil \kern.4em #2\kern.4em \cleaders\copy0\hfil $\mkern-6mu\rightarrow$\kern-.055556em}}} % \end{macrocode} % \Lcs{showcharinbox@samplebox} makes the outline of a box, with big dot at reference point. Argument 1 is height, argument 2 is depth, argument 3 is width, and argument4 is text: % \begin{macrocode} \newcommand*{\showcharinbox@samplebox}[4]{% {\setbox0=\vtop{\vbox to #1{\hbox to #3{}\vss} \nointerlineskip % \end{macrocode} %Now \Lcs{box0} has the desired height, depth, and width: % \begin{macrocode} \vbox to #2{}}% \hbox{\copy\showcharinbox@bigdot \vrule height.2pt depth.2pt width#3% \kern-#3% \showcharinbox@makelightbox \kern-#3% \raise#1\vbox{\hbox to #3{\hss#4\hss} \kern 3pt}}}} \newcommand{\ShowCharInBox}[1]{% \setbox9=\hbox{#1} \setlength{\showcharinbox@chardepth}{\dp9} \setlength{\showcharinbox@charheight}{\ht9} \setlength{\showcharinbox@charwidth}{\wd9} \setbox0=\hbox{$\uparrow$} % \end{macrocode} % With luck, they'll line up: % \begin{macrocode} \setbox1=\hbox to \wd0{$\hss\mid\hss$} % \setbox2=\vbox to \showcharinbox@charheight{\copy0 \nointerlineskip \kern-.5pt \copy1 \nointerlineskip \kern-.5pt \copy1 \vfil \moveleft 1em\hbox{height$=$\the\showcharinbox@charheight} \vfil \copy1 \nointerlineskip \kern-.5pt \copy1 \nointerlineskip \kern-.5pt \hbox{$\downarrow$} \kern.2pt} \setbox3=\vbox to \showcharinbox@chardepth{\kern.2pt\copy0 \vfil \moveleft 1em\hbox{depth$=$\the\showcharinbox@chardepth} \vfil \hbox{$\downarrow$} \kern0pt} % \end{macrocode} %This cancels the null text above the \Lcs{showcharinbox@samplebox}: % \begin{macrocode} \setbox4=\vtop{\kern-3pt % \hbox{\showcharinbox@samplebox{\showcharinbox@charheight}{\showcharinbox@chardepth}{\showcharinbox@charwidth}{}% \kern-\showcharinbox@charwidth \hbox to \showcharinbox@charwidth{\hss \unhbox9\hss}} \kern3pt \showcharinbox@arrows{\showcharinbox@charwidth}{width$=$\the\showcharinbox@charwidth}} \medskip\indent % \end{macrocode} %\Lcs{ht0} is the axis height: % \begin{macrocode} \setbox0=\hbox{$\vcenter{}$}% \lower\ht0\hbox{Reference point$-$\kern-.2em$\rightarrow$\kern2pt}% \raise\ht2\box4 \kern1.5em \raise\ht2\vtop{\kern0pt\box2\nointerlineskip\box3}} % \end{macrocode} % \iffalse %</showcharinbox.sty> %\fi % % % \typeout{*************************************************************} % \typeout{*} % \typeout{* To finish the installation you have to move the following} % \typeout{* file into a directory searched by TeX:} % \typeout{*} % \typeout{* \space\space\space showcharinbox.sty file} % \typeout{*} % \typeout{*************************************************************} % \endinput