% \iffalse meta-comment % % Copyright (C) 2014 by José Romildo Malaquias % --------------------------------------------------------------------------- % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % 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 José Romildo Malaquias. % % This work consists of the files efbox.dtx and efbox.ins % and the derived filebase efbox.sty. % % \fi % % \iffalse %<*driver> \ProvidesFile{efbox.dtx} % %\NeedsTeXFormat{LaTeX2e}[1999/12/01] %\ProvidesPackage{efbox} %<*package> [2014/03/19 1.0 An enhanced fbox command.] % % %<*driver> \documentclass{ltxdoc} \usepackage{efbox}[2014/03/19] \usepackage[utf8]{inputenc} \usepackage{xcolor} \usepackage[final]{showexpl} \EnableCrossrefs \CodelineIndex \RecordChanges \lstset{% language=[LaTeX]TeX, basicstyle=\ttfamily\small, breaklines=true, backgroundcolor=\color{lightgray}, breakautoindent=true, } \begin{document} \DocInput{efbox.dtx} \PrintChanges % \PrintIndex \end{document} % % \fi % % \CheckSum{0} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % % \changes{v0.1}{2011/12/22}{Converted to DTX file.} % % \changes{v1.0}{2014/03/28}{Many changes in preparation for release.} % % \DoNotIndex{\newcommand,\newenvironment} % \DoNotIndex{\def,\ifpdf,\begin} % \DoNotIndex{\DeclareOption,\ExecuteOptions,\RequirePackage} % \DoNotIndex{\renewcommand,\else,\fi,\relax,\@bsphack,\@esphack} % \DoNotIndex{\active,\AtEndOfPackage,\catcode,\centering} % \DoNotIndex{\closeout,\comment,\do,\dospecials,\end,\endcomment} % \DoNotIndex{\fbox,\gdef,\immediate,\includegraphics,\let} % \DoNotIndex{\linewidth,\message,\newif,\newwrite,\openout} % \DoNotIndex{\PackageWarning,\space,\the,\verbatim@line} % \DoNotIndex{\verbatim@processline,\verbatim@start,\write} % \DoNotIndex{\@makeother,\IfFileExists,\ProcessOptions} % \DoNotIndex{\@ifnextchar,\define@key,\MessageBreak,\setkeys} % \DoNotIndex{\stepcounter,\newcounter,\trivlist,\AtEndDocument} % \DoNotIndex{\@empty,\edef,\csname,\endcsname,\edef,\begingroup} % \DoNotIndex{\endgroup,\endtrivlist,\global,\if,\ifx,\item} % \DoNotIndex{\PackageWarningNoLine,\PassOptionsToPackage} % \DoNotIndex{\ProvidesPackage,\@arabic} % % \providecommand*{\url}{\texttt} % \GetFileInfo{efbox.dtx} % \title{The \textsf{efbox} package} % \author{José Romildo Malaquias \\ \url{malaquias@gmail.com}} % \date{\fileversion~from \filedate} % % \maketitle % % \section{Introduction} % % The \texttt{efbox} package defines the command \texttt{efbox}, which % is an enhanced version of the \texttt{fbox} command. It creates a box % just wide enough to hold the text created by its argument, allowing to % draw a frame around the outside of the box at the chosen borders, and % to set a background color for the box. % % \section{Usage} % % In order to use the package, just load it in the preamble of your % document: % \begin{verbatim} % \usepackage{efbox} % \end{verbatim} % % \DescribeMacro{\efbox} % % The macro \verb|efbox| can be used to create a horizontal box just % wide enough to hold the text created by its argument (like the % \verb|makebox| macro). Additionaly a frame can be drawn around the % outside of the box (like the \verb|fbox| macro) at the chosen % borders. Also it can set a background color for the box. % \begin{quote} % \verb|\efbox[|\meta{keyword}$=$\meta{value}\verb|...]{|\meta{text}\verb|}| % \end{quote} % % The available keywords are: % \begin{description} % \item[\normalfont\texttt{leftline}:] This is a boolean, either true % or false; the default is true. If true, a line is drawn in the left % border of the box. % % \item[\normalfont\texttt{rightline}:] This is a boolean, either true % or false; the default is true. If true, a line is drawn in the right % border of the box. % % \item[\normalfont\texttt{topline}:] This is a boolean, either true % or false; the default is true. If true, a line is drawn in the top % border of the box. % % \item[\normalfont\texttt{bottomline}:] This is a boolean, either % true or false; the default is true. If true, a line is drawn in the % bottom border of the box. % % \item[\normalfont\texttt{hidealllines}:] This is a boolean, either % true or false; the default is false. If true, no line is drawn in % the borders of the box. % % \item[\normalfont\texttt{backgroundcolor=}\meta{backgroundcolor}:] % \meta{backgroundcolor} is the color used as the background for the % box. The default is the current background color. % % \item[\normalfont\texttt{linecolor=}\meta{linecolor}:] % \meta{linecolor} is the color used for the border lines. The default % is black. % % \item[\normalfont\texttt{linewidth=}\meta{linewidth}:] % \meta{linewidth} is the width of the lines drawn at the borders of % the box. The default is \verb|\fboxrule|. % % \item[\normalfont\texttt{margin=}\meta{margin}:] \meta{margin} is % the distance between the border lines and the box text. The default % is \verb|\fboxsep|. % % \item[\normalfont\texttt{font=}\meta{font}:] \meta{font} is the font % used to typeset the text in the box. The default is the current % font. % % \item[\normalfont\texttt{baselinestretch=}\meta{baselinestretch}:] % \meta{baselinestretch} is the base line stretch. There is no % default. % \end{description} % % \DescribeMacro{\efboxsetup} % % The macro \verb|efboxsetup| can be used to set options used by % \verb|\efbox|. % \begin{quote} % \verb|\efboxsetup{|\meta{keyword}$=$\meta{value}\verb|...]| % \end{quote} % The available keyworkds are the same from the \verb|\efbox| macro. % % \StopEventually{} % % \section{Examples} % % This is a demonstration of the \texttt{efbox} macro. % % \iffalse %<*example> % \fi % \begin{LTXexample}[pos=b,numbers=none] \efbox{Foo} \efbox[rightline=false,topline=false]{Foo} \efbox[topline,backgroundcolor=red]{Foo} \efbox[linewidth=2pt,font=\Large]{Large Foo} \efbox[rightline=false,topline=false,linecolor=blue,linewidth=2pt]{Foo} \efbox[margin=10pt,backgroundcolor=yellow,font=\ttfamily\itshape]{Italic Typewriter Foo} \efbox[linewidth=3pt,margin=5pt,backgroundcolor=red]{Foo} \efbox[hidealllines,backgroundcolor=red]{Foo} \efbox{Foo} \efbox[hidealllines,backgroundcolor=red,margin=15pt]{Foo} \efbox[margin=15pt,linewidth=5pt]{Foo} \efbox[bottomline=false,rightline=false,linewidth=2pt,margin=1pt,backgroundcolor=yellow]{Foo} \efbox{Foo} % \end{LTXexample} % \iffalse % % \fi % % \section{Implementation} % % \iffalse %<*package> % \fi % % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{efbox}[2014/03/19 v1.0 An enhanced fbox command] \RequirePackage{color} \RequirePackage{pgfkeys} \newif\if@efbox@leftline \newif\if@efbox@rightline \newif\if@efbox@topline \newif\if@efbox@bottomline \pgfkeys{ /efbox/.cd, leftline/.is if = @efbox@leftline, rightline/.is if = @efbox@rightline, topline/.is if = @efbox@topline, bottomline/.is if = @efbox@bottomline, hidealllines/.style = {leftline=false,rightline=false,topline=false,bottomline=false}, backgroundcolor/.store in = \efbox@backgroundcolor, linecolor/.store in = \efbox@linecolor, linewidth/.store in = \efbox@linewidth, margin/.store in = \efbox@margin, font/.store in = \efbox@font, baselinestretch/.store in = \efbox@baselinestretch, } \pgfqkeys{/efbox}{ leftline = true, rightline = true, topline = true, bottomline = true, linecolor = black, linewidth = \fboxrule, margin = \fboxsep, } \newif\if@efbox@hasframe % \end{macrocode} % % \begin{macro}{\efboxsetup} % \begin{macrocode} \def\efbox@global@options{} \newcommand\efboxsetup[1]{% \def\efbox@global@options{#1}% }% \newcommand*\mypgfqkeys@with@saved@options[3]{% % #1 => path % #2 => macro holding saved options % #3 => keys \def\@pgfqkeys@##1{\pgfqkeys{#1}{##1}}% \expandafter\@pgfqkeys@\expandafter{#2,#3}% }% % \end{macrocode} % \end{macro} % % \begin{macro}{\efbox} % \begin{macrocode} \newcommand\efbox[2][]{% \begingroup% \mypgfqkeys@with@saved@options{/efbox}{\efbox@global@options}{#1}% %\expandafter\pgfqkeys\expandafter{/efbox}\expandafter{\efbox@global@options,#1}% % \end{macrocode} % % \begin{macrocode} \ifdefined\efbox@font\efbox@font\fi % \end{macrocode} % % \begin{macrocode} \ifdefined\efbox@baselinestretch \def\baselinestretch{\efbox@baselinestretch}% \fi % \end{macrocode} % % \begin{macrocode} \@efbox@hasframefalse \if@efbox@topline\@efbox@hasframetrue\else\fi \if@efbox@bottomline\@efbox@hasframetrue\else\fi \if@efbox@leftline\@efbox@hasframetrue\else\fi \if@efbox@rightline\@efbox@hasframetrue\else\fi \ifdefined\efbox@backgroundcolor\@efbox@hasframetrue\else\fi \if@efbox@hasframe \ifdefined\efbox@backgroundcolor\else\def\efbox@backgroundcolor{white}\fi \fboxsep=\efbox@margin \fboxrule=\efbox@linewidth \let\@frameb@x\@my@frameb@x \fboxsep=\efbox@margin \def\efbox@body{\fcolorbox{\efbox@linecolor}{\efbox@backgroundcolor}{#2}}% \else \def\efbox@body{#2}% \fi \ifdefined\efbox@title \ifx\@empty\efbox@title \noindent\efbox@body \else \vbox{% \nobreak\vskip\fboxsep \rlap{\frametitle{\efbox@title}}% \nobreak\nointerlineskip \vskip-\baselineskip \vskip \fboxsep \noindent\efbox@body }% \fi \else \efbox@body \fi \endgroup } % \end{macrocode} % \end{macro} % % % \begin{macro}{\@my@frameb@x} % \begin{macrocode} \def\@my@frameb@x#1{% \@tempdima\fboxrule \advance\@tempdima\fboxsep \advance\@tempdima\dp\@tempboxa \hbox{% \lower\@tempdima\hbox{% \vbox{% \if@efbox@topline\hrule\@height\fboxrule\fi \hbox{% \if@efbox@leftline\vrule\@width\fboxrule\fi #1% \vbox{% \vskip\fboxsep \box\@tempboxa \vskip\fboxsep}% #1% \if@efbox@rightline\vrule\@width\fboxrule\fi }% \if@efbox@bottomline\hrule\@height\fboxrule\fi }% }% }% }% \endinput % \end{macrocode} % \end{macro} % % % \iffalse % % \fi % % \Finale \endinput