diff options
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/factura/factura.cls | 217 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/factura/factura.def | 15 |
2 files changed, 127 insertions, 105 deletions
diff --git a/Master/texmf-dist/tex/latex/factura/factura.cls b/Master/texmf-dist/tex/latex/factura/factura.cls index 12f553c9579..01d934a7c6c 100644 --- a/Master/texmf-dist/tex/latex/factura/factura.cls +++ b/Master/texmf-dist/tex/latex/factura/factura.cls @@ -36,7 +36,7 @@ %% \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesClass{factura} -[2016/05/16 v2.72 +[2016/06/25 v2.82 Clase para elaborar facturas legales en la República Bolivariana de Venezuela. ] @@ -57,6 +57,9 @@ en la República Bolivariana de Venezuela. \newif\if@sinnumero \newif\if@conlineasha \newif\if@linea +\newif\if@lineacompleta +\newif\if@lineahastatotal +\newif\if@lineadesdeinicio \newif\if@G \newif\if@BIR \newif\if@BIA @@ -95,17 +98,10 @@ en la República Bolivariana de Venezuela. \newbool{SinLineasHoriExt} \newbool{DCU} \newbool{DUC} -\newbool{PrimeroDesc} +\newbool{NumItem} +\newbool{PrimeroDescrip} \newbool{ExpAbajo}\booltrue{ExpAbajo} -%% Condicionales auxiliares para hacer que la línea oblicua salga donde corresponde. -\newbool{LineaDesdeColUno} -\newbool{LineaDesdeColDos} -\newbool{LineaHastaColUno} -\newbool{LineaHastaColDos} -\newbool{LineaHastaFinal} -\newbool{LineaHastaTotal} - %% Condicionales auxiliares para la posición de los objetos fijos cuando son medidos desde la derecha, o desde abajo. \newbool{FechaXnegativo} \newbool{FechaYnegativo} @@ -141,18 +137,19 @@ en la República Bolivariana de Venezuela. \@agrupadotrue \fi} \DeclareOption{impdesc}{\@impdesctrue}% Para el tipo de impuesto en la descripción y no en el precio unitario y total. +\DeclareOption{numitem}{\booltrue{NumItem}}% Para poner una columna extra al principio con el número del ítem. \DeclareOption{dcu}{% Descripción, luego cantidad y luego precio unitario. \@dcutrue\@cdufalse\@ducfalse \booltrue{DCU}\boolfalse{DUC} - \booltrue{PrimeroDesc}} + \booltrue{PrimeroDescrip}} \DeclareOption{duc}{% Descripción, luego precio unitario y luego cantidad. \if@dcu \ClassWarning{factura}{Las opciones 'duc' y 'dcu' no son compatibles. Sin efecto ambas opciones}{} - \boolfalse{PrimeroDesc}\boolfalse{DCU}\@dcufalse\@cdutrue + \boolfalse{PrimeroDescrip}\boolfalse{DCU}\@dcufalse\@cdutrue \else \@ductrue\@cdufalse\@dcufalse \booltrue{DUC}\boolfalse{DCU} - \booltrue{PrimeroDesc} + \booltrue{PrimeroDescrip} \fi} \DeclareOption{siniva}{\AtBeginDocument{\gdef\@ImpuestoG{0}\gdef\@ImpuestoR{0}\gdef\@ImpuestoA{0}}}% No cobra IVA. \DeclareOption{todosiva}{\@todosivatrue}% Con esta opción salen todos los IVA así valgan cero. @@ -168,11 +165,11 @@ en la República Bolivariana de Venezuela. \booltrue{SinCantidad} \if@dcu \ClassWarning{factura}{La opción 'sincantidad' no es compatible con 'dcu' . Sin efecto opción 'dcu'}{} - \@dcufalse\@cdutrue\boolfalse{DCU}\boolfalse{PrimeroDesc} + \@dcufalse\@cdutrue\boolfalse{DCU}\boolfalse{PrimeroDescrip} \fi \if@duc \ClassWarning{factura}{La opción 'sincantidad' no es compatible con 'duc' . Sin efecto opción 'duc'}{} - \@ducfalse\@cdutrue\boolfalse{DUC}\boolfalse{PrimeroDesc} + \@ducfalse\@cdutrue\boolfalse{DUC}\boolfalse{PrimeroDescrip} \fi} \DeclareOption{conlineasha}{\@conlineashatrue}% Una línea horizontal para cada ítem, como las facturas a mano. @@ -219,7 +216,6 @@ en la República Bolivariana de Venezuela. \RequirePackage{tabularx}% Con 'tabularx' hacemos la tabla. \RequirePackage{environ}% Con 'environ' podemos usar tabularx dentro del ambiente de la factura y escribir texto en el enddef. \RequirePackage{fancyhdr}% Las cabeceras fancy; así se use solamente en reporte, hay que cargarlo siempre. -\RequirePackage{MnSymbol}% Para el símbolo $\lcurvearrowsw$ cuando la descripción ocupa más de una línea. \AtBeginDocument{% Da error si algún campo necesario no está definido. \if@reporte @@ -374,7 +370,7 @@ en la República Bolivariana de Venezuela. \def\PosFecha#1#2{% \IfBeginWith{#1}{-} {\StrBehind{#1}{-}[\templeng]\setlength{\@PosFechaX}{-\templeng}\booltrue{FechaXnegativo}} - {\boolfalse{FechaXnegativo}\setlength{\@PosFechaX}{#1}}% + {\boolfalse{FechaXnegativo}\setlength{\@PosFechaX}{#1}} \IfBeginWith{#2}{-} {\StrBehind{#2}{-}[\templeng]\setlength{\@PosFechaY}{-\templeng}\booltrue{FechaYnegativo}} {\boolfalse{FechaYnegativo}\setlength{\@PosFechaY}{#2}}} @@ -382,7 +378,7 @@ en la República Bolivariana de Venezuela. \def\PosDenom#1#2{% \IfBeginWith{#1}{-} {\StrBehind{#1}{-}[\templeng]\setlength{\@PosDenomX}{-\templeng}\booltrue{DenomXnegativo}} - {\boolfalse{DenomXnegativo}\setlength{\@PosDenomX}{#1}}% + {\boolfalse{DenomXnegativo}\setlength{\@PosDenomX}{#1}} \IfBeginWith{#2}{-} {\StrBehind{#2}{-}[\templeng]\setlength{\@PosDenomY}{-\templeng}\booltrue{DenomYnegativo}} {\boolfalse{DenomYnegativo}\setlength{\@PosDenomY}{#2}}} @@ -390,7 +386,7 @@ en la República Bolivariana de Venezuela. \def\PosControl#1#2{% \IfBeginWith{#1}{-} {\StrBehind{#1}{-}[\templeng]\setlength{\@PosControlX}{-\templeng}\booltrue{ControlXnegativo}} - {\boolfalse{ControlXnegativo}\setlength{\@PosControlX}{#1}}% + {\boolfalse{ControlXnegativo}\setlength{\@PosControlX}{#1}} \IfBeginWith{#2}{-} {\StrBehind{#2}{-}[\templeng]\setlength{\@PosControlY}{-\templeng}\booltrue{ControlYnegativo}} {\boolfalse{ControlYnegativo}\setlength{\@PosControlY}{#2}}} @@ -500,10 +496,10 @@ en la República Bolivariana de Venezuela. %% Comando para incluir la firma escaneada en el sitio donde va la línea de la firma del emisor. \NewDocumentCommand{\FirmaFactura}{m O{0pt} O{0pt}}{% \FirmaFactura{imagen}[x-corr][y-corr] \if@factura - \RequirePackage{graphicx}% + \RequirePackage{graphicx} \ifx&\else\setlength{\@FirmaFacturaXcorr}{#2}\fi \ifx&\else\setlength{\@FirmaFacturaYcorr}{#3}\fi - \savebox{\@CajaFirmaEmisor}{#1}% + \savebox{\@CajaFirmaEmisor}{#1} \if@reporte \expandafter\AtBeginShipoutNext \else @@ -561,30 +557,30 @@ en la República Bolivariana de Venezuela. \end{textblock*} \fi} -%% Con \FondoFactura le damos el nombre del archivo que contiene el formato de la factura, por ejemplo para compilaciones con 'prefactura', 'cotizacion' o para incluir una imagen de fondo como 'marca de agua'. -\newcommand{\FondoFactura}[1]{% +%% Con \FondoFactura le damos el nombre del archivo que contiene el formato de la factura, por ejemplo para compilaciones con 'prefactura', 'cotizacion' o para incluir una imagen de fondo como 'marca de agua'. +\newcommand{\FondoFactura}[1]{ \if@factura - \RequirePackage{graphicx}% + \RequirePackage{graphicx} \@fondofacturatrue - \gdef\@FondoFactura{#1}% + \gdef\@FondoFactura{#1} \fi} %% Con \FondoReporte le damos el nombre del archivo que contiene el formato del reporte. Existen dos posibilidades: que dicho fondo salga en todas las páginas o sólo en la primera. -\NewDocumentCommand{\FondoReporte}{s m}{% +\NewDocumentCommand{\FondoReporte}{s m}{ \if@reporte \@fondoreportetrue - \RequirePackage{graphicx}% - \gdef\@FondoReporte{#2}% + \RequirePackage{graphicx} + \gdef\@FondoReporte{#2} \IfBooleanT{#1}{\@fondoreportestartrue}% Con * sale en todas las páginas; sin * sale sólo en la primera página. \fi} %% Comando para establecer desde el preámbulo el estilo de página (\pagestyle) del reporte, tanto para la primera página como para las siguientes. -\NewDocumentCommand{\EstiloPagReporte}{o m}{% +\NewDocumentCommand{\EstiloPagReporte}{o m}{ \gdef\@EstiloPagReporteResto{#2} \IfValueTF{#1}{\gdef\@EstiloPagReporteUno{#1}}{\gdef\@EstiloPagReporteUno{\@EstiloPagReporteResto}}} %% El título para el reporte. -\NewDocumentCommand{\TituloReporte}{s m}{% +\NewDocumentCommand{\TituloReporte}{s m}{ \gdef\@TituloReporte{#2}% \IfBooleanTF{#1}{% Con '*' sale el título en las cabeceras o piés. Sin '*' no. \gdef\@InfoPagina{\let\\\relax\@InfoPaginaTitulo}}% @@ -592,8 +588,8 @@ en la República Bolivariana de Venezuela. %% Para cada cliente o para cada personalización se puede tener un archivo .def o .tex con su nombre y ciertas macros cargadas. Ese archivo lo ponemos incluir con '\Cliente' en lugar de usar \input, y la extensión deberá ser .def o .tex. \newcommand{\Cliente}[1]{% - \IfFileExists{#1.def}{\input{#1.def}}{% - \IfFileExists{#1.tex}{\input{#1.tex}}{% + \IfFileExists{#1.def}{\input{#1.def}}{ + \IfFileExists{#1.tex}{\input{#1.tex}}{ \ClassError{factura}{** No existe #1.def ni #1.tex **}{}}}} %% Comando para mostrar macros con '@'. @@ -604,7 +600,9 @@ en la República Bolivariana de Venezuela. \newlength{\@TamResumen} \newlength{\@TamFinalEncabez} \newlength{\@TamLineaFirmas} +\newlength{\@TamNumItem} \newlength{\@TamCantidad} +\newlength{\@TamDescrip} \newlength{\@TamPrecioU} \newlength{\@TamDescuento} \newlength{\@TamPrecioT} @@ -665,7 +663,7 @@ en la República Bolivariana de Venezuela. %% Contadores para uso interno para uso interno: \newcounter{@IVANoGeneral}% '0' con sólo IVA G, '1' cuando hay IVA R o IVA A, y '2' cuando hay ambos. -\newcounter{@NumItem}% Número del ítem actual, para uso de algunas macros en el cuadro de la factura. +\newcounter{@NumItem}% Número del ítem actual, para uso de algunas macros en el cuadro de la factura y para cuando se usa la opción 'numitem'. \input{factura.def}% Cargamos los valores predeterminados. @@ -688,7 +686,7 @@ en la República Bolivariana de Venezuela. \fi \if@exparriba - \RequirePackage{zref-savepos}% Para guardar la posición en 'Y'. + \RequirePackage{zref-savepos}[2016/05/21]% Para guardar la posición en 'Y'. \fi \if@reporte @@ -727,6 +725,7 @@ en la República Bolivariana de Venezuela. %% http://tex.stackexchange.com/questions/296035/insert-a-special-character-at-each-end-of-line-in-a-paragraph %% http://tex.stackexchange.com/questions/248944/how-to-put-before-lines \newcommand{\@DescripcionAuxCmd}[2]{% + \immediate\write\@auxout{\gdef\noexpand\@TamDescrip{\the\linewidth}}% Para poder establecer la línea diagonal hay que saber el tamaño del campo de la descripción. \setbox0\hbox{\parbox[t]{\linewidth}{#1% \if@impdesc\hfill\ \@EscribeTipoDeImpuesto{#2}\fi% \par\global\count1=\prevgraf}}% @@ -757,25 +756,30 @@ en la República Bolivariana de Venezuela. \fi} %% Comandos auxiliares para colocar en \parbox cada celda. +\newcommand{\@NumItemAuxCmd}[1]{% + \savebox{\@CajaPrueba}{#1}% + \ifdim\wd\@CajaPrueba > \@TamNumItem \global\@TamNumItem=\wd\@CajaPrueba\fi + \parbox[t]{\@TamNumItem}{#1}} + \newcommand{\@CantidadAuxCmd}[1]{% \savebox{\@CajaPrueba}{#1}% \ifdim\wd\@CajaPrueba > \@TamCantidad \global\@TamCantidad=\wd\@CajaPrueba\fi - \parbox{\@TamCantidad}{#1}} + \parbox[t]{\@TamCantidad}{#1}} \newcommand{\@PrecioUAuxCmd}[1]{% \savebox{\@CajaPrueba}{#1}% \ifdim\wd\@CajaPrueba > \@TamPrecioU \global\@TamPrecioU=\wd\@CajaPrueba\fi - \parbox{\@TamPrecioU}{#1}} + \parbox[t]{\@TamPrecioU}{#1}} \newcommand{\@DescuentoAuxCmd}[1]{% \savebox{\@CajaPrueba}{#1}% \ifdim\wd\@CajaPrueba > \@TamDescuento \global\@TamDescuento=\wd\@CajaPrueba\fi - \parbox{\@TamDescuento}{#1}} + \parbox[t]{\@TamDescuento}{#1}} \newcommand{\@PrecioTAuxCmd}[1]{% \savebox{\@CajaPrueba}{#1}% \ifdim\wd\@CajaPrueba > \@TamPrecioT \global\@TamPrecioT=\wd\@CajaPrueba\fi - \parbox{\@TamPrecioT}{#1}} + \parbox[t]{\@TamPrecioT}{#1}} %% Presentación de totales en modo de columnas. \newcommand{\@EscribeTotalCol}[1]{% @@ -939,11 +943,6 @@ en la República Bolivariana de Venezuela. \if@Exento\usebox{\@CajaBIET}\else\usebox{\@CajaTotal}\fi \if@centrado\hspace*{\@SepTotales}\fi} -%% Comando que guarda la posición en X para el nodo A de la línea. -\newcommand{\@LineaNodoACoordX}{\hspace*{-\tabcolsep}\zsaveposx{LineaNodoACoordX}\hspace*{\tabcolsep}} -%% Comando que guarda la posición en X para el nodo B de la línea. -\newcommand{\@LineaNodoBCoordX}{\hspace*{-\tabcolsep}\zsaveposx{LineaNodoBCoordX}\hspace*{\tabcolsep}} - %% Escribe la letra que designa al tipo de impuesto que aplica al ítem. \NewDocumentCommand{\@EscribeTipoDeImpuesto}{m}{% % Hay que abrir un grupo de ejecución porque el cambio en la tipografía altera la celda. @@ -1000,34 +999,47 @@ en la República Bolivariana de Venezuela. %% Comandos auxiliares para poder evaluar la definición de las columnas en la tabla con un comando que se expande completamente. \def\@FacturaAuxColumnasEval{ - % Primera línea. + % Primera línea, la más externa. \ifbool{SinLineasVertExt}{}{|} + % Columna para el número del ítem, si aplica. + \ifbool{NumItem}{c}{r@{\extracolsep{0pt}}} + % Segunda línea, que sale solamente cuando se usa la opción 'numitem' + \ifbool{NumItem}{\ifbool{SinLineasVertInt}{}{|}}{} % Columna 'X' con DCU, columna fantasma con 'sincantidad' y columna 'c' con CDU. - \ifbool{PrimeroDesc}{X}{ + \ifbool{PrimeroDescrip}{X}{ \ifbool{SinCantidad}{l@{\extracolsep{0pt}}}{c}} - % Segunda línea. + % Tercera línea. \ifbool{SinCantidad}{}{\ifbool{SinLineasVertInt}{}{|}} % Columna 'c' con DCU, columna 'r' con DUC, columna 'X' sin espacio para 'sincantidad' y columna 'X' con CDU. \ifbool{DCU}{c}{ \ifbool{DUC}{r}{ \ifbool{SinCantidad}{X@{\extracolsep{0pt}}}{X}}} - % Tercera línea, que sale solamente cuando no se usa 'sincantidad'. + % Cuarta línea, que sale solamente cuando no se usa 'sincantidad'. \ifbool{SinCantidad}{}{\ifbool{SinLineasVertInt}{}{|}} % Columna 'c' para DUC y columna 'r' para cualquier otro caso (DCU, CDU y 'sincantidad'). \ifbool{DUC}{c}{r} - % Cuarta línea. + % Quinta línea. \ifbool{SinLineasVertInt}{}{|} % Columna 'c' para 'descuentos' y columna 'r' sin espacio si no hay descuentos individuales. \ifbool{Descuentos}{c}{r@{\extracolsep{0pt}}} - % Quinta línea, que sale solamente cuando hay descuentos. + % Sexta línea, que sale solamente cuando hay descuentos. \ifbool{Descuentos}{\ifbool{SinLineasVertInt}{}{|}}{} % Columna 'r' siempre. r - % Sexta y última línea. + % Séptima y última línea. \ifbool{SinLineasVertExt}{}{|}} +%% Comando auxiliar para abrir la tabla del cuadro de la factura y expandir completamente las columnas. \edef\@FacturaAuxInicioCmd{\noexpand\begin{tabularx}{\textwidth}{\@FacturaAuxColumnasEval}} +%% Comando auxiliar para abrir el '\multicolumn' para los totales en el modo de columnas y expandir completamente las columnas cuando hay o no barras verticales. +\edef\@ColumnasMultiColumnTotalesAuxCmd{% + \noexpand\multicolumn{6}{\ifbool{SinLineasVertExt}{}{|} r}\begingroup + \noexpand\ifdim \noexpand\ht\noexpand\@CajaEspacioVacio=0pt + \noexpand\else + \noexpand\if@linea\noexpand\zsaveposx{LineaNodoBCoordX}\noexpand\zsaveposy{LineaNodoBCoordY}\noexpand\fi\noexpand\fi% Fijamos la posición (x,y) final para la línea ya que estaremos justo en el punto donde escribimos el total, y hasta allí llega la línea en el modo de columnas. + \noexpand\begin{tabular}[b]{@{\noexpand\extracolsep{2\noexpand\tabcolsep}}lr \ifbool{SinLineasVertExt}{}{|}}} + %% Comando para hacer los cálculos sobre cada ítem y establecer las macros con el contenido de cada ítem introducido. \newcommand{\@CalculaItem}[5]{% \addtocounter{@NumItem}{1}% @@ -1049,26 +1061,30 @@ en la República Bolivariana de Venezuela. \expandafter\global\expandafter\edef\csname @Item@\romannumeral\value{@NumItem}@PrecioT\endcsname{\noexpand\numprint{\PrecioT}}} \gdef\@pruebaref#1{% - \expandafter\ifx\csname @Etiqueta@@#1\endcsname\relax + \expandafter\ifx\csname @Etiqueta@#1\endcsname\relax \ClassWarning{factura}{La etiqueta `#1' no está definida}{}\ignorespaces \@pruebareffalse \else \@pruebareftrue \fi} -\gdef\itemref#1{\@pruebaref{#1}\if@pruebaref \csname @Etiqueta@@#1\endcsname \fi} -\gdef\cantref#1{\@pruebaref{#1}\if@pruebaref \csname @Item@\expandafter\romannumeral\csname @Etiqueta@@#1\endcsname @Cantidad\endcsname \fi} -\gdef\descref#1{\@pruebaref{#1}\if@pruebaref \csname @Item@\expandafter\romannumeral\csname @Etiqueta@@#1\endcsname @Descripcion\endcsname \fi} -\gdef\puref#1{\@pruebaref{#1}\if@pruebaref \csname @Item@\expandafter\romannumeral\csname @Etiqueta@@#1\endcsname @PrecioU\endcsname \fi} -\gdef\dctoref#1{\@pruebaref{#1}\if@pruebaref \csname @Item@\expandafter\romannumeral\csname @Etiqueta@@#1\endcsname @Descuento\endcsname \fi} -\gdef\ptref#1{\@pruebaref{#1}\if@pruebaref \csname @Item@\expandafter\romannumeral\csname @Etiqueta@@#1\endcsname @PrecioT\endcsname \fi} +\gdef\itemref#1{% + \ifbool{NumItem}{}{\ClassWarning{factura}{Es recomendable usar la opción 'numitem' para enumerar los ítems}{}}% + \@pruebaref{#1}\if@pruebaref \csname @Etiqueta@#1\endcsname \fi} +\gdef\cantref#1{\@pruebaref{#1}\if@pruebaref \csname @Item@\expandafter\romannumeral\csname @Etiqueta@#1\endcsname @Cantidad\endcsname \fi} +\gdef\descref#1{\@pruebaref{#1}\if@pruebaref \csname @Item@\expandafter\romannumeral\csname @Etiqueta@#1\endcsname @Descripcion\endcsname \fi} +\gdef\puref#1{\@pruebaref{#1}\if@pruebaref \csname @Item@\expandafter\romannumeral\csname @Etiqueta@#1\endcsname @PrecioU\endcsname \fi} +\gdef\dctoref#1{\@pruebaref{#1}\if@pruebaref \csname @Item@\expandafter\romannumeral\csname @Etiqueta@#1\endcsname @Descuento\endcsname \fi} +\gdef\ptref#1{\@pruebaref{#1}\if@pruebaref \csname @Item@\expandafter\romannumeral\csname @Etiqueta@#1\endcsname @PrecioT\endcsname \fi} \newcommand{\label@factura}[1]{% - \expandafter\ifx\csname @Etiqueta@@#1\endcsname\relax - \expandafter\global\expandafter\edef\csname @Etiqueta@@#1\endcsname{\arabic{@NumItem}}\ignorespaces + \expandafter\ifx\csname @Etiqueta@#1\endcsname\relax + \expandafter\global\expandafter\edef\csname @Etiqueta@#1\endcsname{\arabic{@NumItem}}\ignorespaces + \ClassInfo{factura}{Etiqueta `#1' definida para el ítem \arabic{@NumItem}}{}% \else - \expandafter\if\csname @Etiqueta@@#1\endcsname\the@NumItem - \ClassInfo{factura}{Etiqueta `#1' definida para el ítem \arabic{@NumItem}}{}% + \edef\@label@test@uno{\csname @Etiqueta@#1\endcsname}% + \edef\@label@test@dos{\the@NumItem}% + \ifx\@label@test@uno\@label@test@dos \else \ClassWarning{factura}{La etiqueta `#1' se definió más de una vez}{}\ignorespaces \fi @@ -1081,9 +1097,20 @@ en la República Bolivariana de Venezuela. \setlength{\@EspacioVacioFinal}{\zposy{EspacioVacioFinal}sp}% \global\@EspacioVacioInicial=\@EspacioVacioInicial% ¿por qué tendré que globalizarlas? \global\@EspacioVacioFinal=\@EspacioVacioFinal - \savebox{\@CajaEspacioVacio}{\parbox[b][\@EspacioVacioInicial-\@EspacioVacioFinal]{1pt}{\mbox{}}}% + \savebox{\@CajaEspacioVacio}{\parbox[b][\@EspacioVacioInicial-\@EspacioVacioFinal]{\@TamDescrip}{% + \if@linea + \if@lineacompleta + \zsaveposy{LineaNodoBCoordY}% + \else + \if@lineahastatotal + \else + \zsaveposx{LineaNodoACoordX}\mbox{}\hfill \zsaveposx{LineaNodoBCoordX}\zsaveposy{LineaNodoBCoordY}% + \fi + \fi + \fi}}% \ifdim \ht\@CajaEspacioVacio=0pt \global\@lineafalse \fi \fi + \ifx\undefined\Total\relax\else\ClassError{factura}{** Parece ya haberse usado un entorno de factura **}{}\fi % % Comandos \David@SavePos, \David@XStart, \David@XEnd, \David@XPad, \David@XLeft y \David@XRight para poder manejar el salto de línea en las columnas adyacentes a la columna 'X' del tabularx (la descripción), cuando esta ocupa más que una línea. @@ -1106,7 +1133,7 @@ en la República Bolivariana de Venezuela. \advance\dimen@-\baselineskip \settowidth{\@TempDimen}{##3}% \ifdim\@TempDimen=0pt\settowidth{\@TempDimen}{##2}\fi - \hbox{\parbox{\@TempDimen}{\mbox{}\hfill\@CaracterCeldasVacias\hfill\mbox{}}}% + \hbox{\parbox{\@TempDimen}{\@CaracterCeldasVacias}}% \repeat \fi ##3}}% @@ -1125,14 +1152,17 @@ en la República Bolivariana de Venezuela. \\ \if@conlineasha\hline\fi% Líneas para separar cada ítem, si hiciera falta. \fi - % Primer campo: Acá puede ir la cantidad (cdu) o la descripción (dcu y duc). + % Primer -opcional- campo: El número del ítem. + \ifbool{NumItem}{\David@XLeft{\@NumItemAuxCmd{\mbox{}\hfill \@LetraNumeros \arabic{@NumItem}\hfill\mbox{}}}}{}% + & + % Segundo campo: Acá puede ir la cantidad (cdu) o la descripción (dcu y duc). \ifbool{SinCantidad}{}{% - \ifbool{PrimeroDesc} + \ifbool{PrimeroDescrip} {\@DescripcionAuxCmd{##3}{##1}}% dcu y duc. {\David@XLeft{\@CantidadAuxCmd{\mbox{}\hfill \@LetraNumeros \numprint{##2}\hfill\mbox{}}}}}% cdu. & - % Segundo campo: Acá puede ir la descripción (cdu), la cantidad (dcu), o el precio unitario (duc). - \ifbool{PrimeroDesc}{% + % Tercer campo: Acá puede ir la descripción (cdu), la cantidad (dcu), o el precio unitario (duc). + \ifbool{PrimeroDescrip}{% \if@dcu \David@XRight{\@CantidadAuxCmd{\mbox{}\hfill \@LetraNumeros \numprint{##2}\hfill\mbox{}}}% dcu. \else @@ -1144,7 +1174,7 @@ en la República Bolivariana de Venezuela. \fi} {\@DescripcionAuxCmd{##3}{##1}}% cdu. & - % Tercer campo: Acá puede ir el precio unitario (cdu y dcu) o la cantidad (duc). + % Cuarto campo: Acá puede ir el precio unitario (cdu y dcu) o la cantidad (duc). \FPifeq\PrecioU{##4}\else\ClassWarning{factura}{** Se está introduciendo un precio con más de dos decimales: (##3 - ##4. Redondeado a \PrecioU) **}{}\fi% Advertimos cuando el precio unitario tiene más de dos decimales. \ifbool{SinCantidad}{}{% \if@duc @@ -1157,15 +1187,15 @@ en la República Bolivariana de Venezuela. \fi}}% dcu y cdu. \fi}% & - % Cuarto campo: Descuento. + % Quinto -opcional- campo: Descuento. \ifbool{Descuentos}{% \David@XRight{\@DescuentoAuxCmd{% \ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}% \else - \mbox{}\hfill \@LetraNumeros \numprint{\Dcto}\%\hfill\mbox{} + \mbox{}\hfill \@LetraNumeros \numprint{\Dcto}\%\hfill\mbox{}% \fi}}}{}% Tenemos que usar un condicional booleano porque si no da problemas con el condicional \FPifeq. & - % Quinto campo: El total. + % Sexto campo: El total. \David@XRight{\@PrecioTAuxCmd{% \ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}% \else @@ -1208,20 +1238,20 @@ en la República Bolivariana de Venezuela. \@FacturaAuxInicioCmd \ifbool{SinLineasHoriExt}{}{\hline}% \@ZERO - % Estamos en la cantidad, o la descripción. - \ifbool{LineaDesdeColUno}{\@LineaNodoACoordX}{}% - \ifbool{SinCantidad}{}{\ifbool{PrimeroDesc}{\@DescripcionAuxCmd{\@LetraTitCuadro \@@Descripcion}{}}{\@CantidadAuxCmd{\mbox{}\hfill \@LetraTitCuadro \@@Cantidad \hfill\mbox{}}}}% + % Estamos en el número del ítem, si aplicara. + \if@lineadesdeinicio \hspace*{-\tabcolsep}\zsaveposx{LineaNodoACoordX}\hspace*{\tabcolsep}\fi + \ifbool{NumItem}{\@NumItemAuxCmd{\mbox{}\hfill \@LetraTitCuadro \@@NumItem \hfill\mbox{}}}{}% + & + % Avanzamos a la cantidad, o la descripción. + \ifbool{SinCantidad}{}{\ifbool{PrimeroDescrip}{\@DescripcionAuxCmd{\@LetraTitCuadro \@@Descripcion}{}}{\@CantidadAuxCmd{\mbox{}\hfill \@LetraTitCuadro \@@Cantidad \hfill\mbox{}}}}% &% Avanzamos hasta la descripción, la cantidad o el precio unitario. - \ifbool{LineaDesdeColDos}{\@LineaNodoACoordX}{}% - \ifbool{LineaHastaColUno}{\hspace*{-\arrayrulewidth}\@LineaNodoBCoordX\hspace*{\arrayrulewidth}}{}% \ifbool{SinCantidad}{\@DescripcionAuxCmd{\@LetraTitCuadro \@@Descripcion}{}} {\if@cdu \@DescripcionAuxCmd{\@LetraTitCuadro \@@Descripcion}{}\fi \if@dcu \@CantidadAuxCmd{\mbox{}\hfill \@LetraTitCuadro \@@Cantidad \hfill\mbox{}}\fi \if@duc \@PrecioUAuxCmd{\mbox{}\hfill \@LetraTitCuadro \@@PrecioU \space (\Moneda)\hfill\mbox{}}\fi}% &% Avanzamos hasta el precio unitario, o la cantidad, o columna fantasma cuando es 'sincantidad'. - \ifbool{SinCantidad}{% - \ifbool{LineaHastaColDos}{\hspace*{\tabcolsep}\zsaveposx{LineaNodoBCoordX}\hspace*{-\tabcolsep}}{}}% - {\ifbool{LineaHastaColDos}{\hspace*{-\arrayrulewidth}\@LineaNodoBCoordX\hspace*{\arrayrulewidth}}{}% + \ifbool{SinCantidad}{} + {% \mbox{}\hfill \if@duc \@CantidadAuxCmd{\mbox{}\hfill \@LetraTitCuadro \@@Cantidad \hfill\mbox{}}% @@ -1232,7 +1262,7 @@ en la República Bolivariana de Venezuela. \if@descuentos \@DescuentoAuxCmd{\mbox{}\hfill \@LetraTitCuadro \@@Descuento \hfill\mbox{}}\fi &% Avanzamos hasta el precio total. \@PrecioTAuxCmd{\mbox{}\hfill \@LetraTitCuadro \ifbool{SinCantidad}{\@@Precio}{\@@PrecioT}\space (\Moneda)\hfill\mbox{}}% - \ifbool{LineaHastaFinal}{\hspace*{\tabcolsep}\zsaveposx{LineaNodoBCoordX}\hspace*{-\tabcolsep}}{}% + \if@lineacompleta \hspace*{\tabcolsep}\zsaveposx{LineaNodoBCoordX}\hspace*{-\tabcolsep}\fi \\ \ifbool{SinLineasHoriInt}{}{\hline}% % @@ -1244,9 +1274,7 @@ en la República Bolivariana de Venezuela. \ifdim \ht\@CajaEspacioVacio=0pt \ifbool{SinLineasHoriExt}{}{\if@conlineasha\else\hline\fi}% Verificamos si hay que poner la línea horizontal. Si está 'conlineasha' ya salió debido a esta opción. \else - &\usebox{\@CajaEspacioVacio}% - \if@linea\mbox{}\zsaveposy{LineaNodoBCoordY}\fi% Se guarda la coordenada Y del punto de la derecha de la línea diagonal. Tiene que haber \mbox{}. - &&&\\ + \ifbool{PrimeroDescrip}{&\usebox{\@CajaEspacioVacio}&&&&\\}{&&\usebox{\@CajaEspacioVacio}&&&\\}% \ifbool{SinLineasHoriExt}{}{\hline}% Siempre que hay relleno se pone la línea acá. \fi \else @@ -1255,16 +1283,10 @@ en la República Bolivariana de Venezuela. \ifdim \ht\@CajaEspacioVacio=0pt \else % Rellenamos la tabla con espacio espúreo, y le agregamos las lineas externas, si aplica. - \ifbool{SinLineasVertExt}{\multicolumn{5}{c}{\usebox{\@CajaEspacioVacio}}}{\multicolumn{5}{|c|}{\usebox{\@CajaEspacioVacio}}}\\ + \ifbool{SinLineasVertExt}{\multicolumn{6}{c}{\usebox{\@CajaEspacioVacio}}}{\multicolumn{6}{|c|}{\usebox{\@CajaEspacioVacio}}}\\ \fi - % Abrimos la tabla para escribir los totales, y le agregamos las líneas verticales externas, si aplica. - \ifbool{SinLineasVertExt} - {\multicolumn{5}{r}\begingroup - \ifdim \ht\@CajaEspacioVacio=0pt \else \if@linea\zsaveposx{LineaNodoBCoordX}\zsaveposy{LineaNodoBCoordY}\fi\fi - \begin{tabular}[b]{@{\extracolsep{2\tabcolsep}}lr}} - {\multicolumn{5}{|r}\begingroup - \ifdim \ht\@CajaEspacioVacio=0pt \else \if@linea\zsaveposx{LineaNodoBCoordX}\zsaveposy{LineaNodoBCoordY}\fi\fi - \begin{tabular}[b]{@{\extracolsep{2\tabcolsep}}lr|}}% Una vaina loca... tuve que meter también el tabular con la línea '|' porque no pude poner esa línea en el multicolumn. + % Modo de columnas: Abrimos la tabla para escribir los totales, y le agregamos las líneas verticales externas, si aplica. + \@ColumnasMultiColumnTotalesAuxCmd \@CalculaTotalesI \if@agrupado \@EscribeTotalColAgrupado @@ -1462,14 +1484,9 @@ en la República Bolivariana de Venezuela. \RequirePackage{eso-pic}% Para poder usar \AtBeginShipoutNext porque si no se hace en el 'shipout' de la página se genera un espacio en blanco extra. \AtBeginShipoutNext{\if@linea\@DibujaLinea\fi} \if@filas - \ifbool{SinLineasVertInt} - {\booltrue{LineaDesdeColUno}\booltrue{LineaHastaFinal}} - {\ifbool{PrimeroDesc} - {\booltrue{LineaDesdeColUno}\booltrue{LineaHastaColUno}} - {\booltrue{LineaDesdeColDos}\booltrue{LineaHastaColDos}}} + \ifbool{SinLineasVertInt}{\@lineacompletatrue} \else - \ifbool{SinCantidad}{\booltrue{LineaDesdeColDos}}{\booltrue{LineaDesdeColUno}} - \booltrue{LineaHastaTotal} + \@lineahastatotaltrue\@lineadesdeiniciotrue \fi \fi @@ -1497,7 +1514,7 @@ en la República Bolivariana de Venezuela. \let\@ITEM\@CalculaItem \BODY \@CalculaTotalesI} - \NewDocumentCommand{\Descripcion}{s +m}{} + \NewDocumentCommand{\Descripcion}{+m}{} \fi \if@reporte diff --git a/Master/texmf-dist/tex/latex/factura/factura.def b/Master/texmf-dist/tex/latex/factura/factura.def index 676d18e0aa9..70e4979b681 100644 --- a/Master/texmf-dist/tex/latex/factura/factura.def +++ b/Master/texmf-dist/tex/latex/factura/factura.def @@ -35,7 +35,7 @@ %% and factura-beispiel-rechnung.tex. %% \ProvidesFile{factura.def} -[2016/05/16 v2.72 +[2016/06/25 v2.82 Archivo valores iniciales y condiciones de borde para factura.cls ] @@ -70,6 +70,7 @@ Archivo valores iniciales y condiciones de borde para factura.cls %% Macros que guardan textos que corresponden a nombres de campos: \def\@@Fecha{Fecha de emisi\'on:} \def\@@RazonSocial{Raz\'on social:} +\def\@@NumItem{\#} \def\@@Cantidad{Cantidad} \def\@@Descripcion{Descripci\'on} \def\@@PrecioU{Precio U.} @@ -111,13 +112,17 @@ Archivo valores iniciales y condiciones de borde para factura.cls %% i) carácter para separar el teléfono del e-mail del cliente, %% ii) carácter para los campos vacíos cuando se usa \ItemX, -%% iii) carácter para las celdas vacíos cuando la descripción del ítem ocupa más que una línea. +%% iii) carácter para las celdas vacías cuando la descripción del ítem ocupa más que una línea. %% iv) carácter de retorno de carro en el cuadro de la factura, \def\@CaracterSeparaTelefonoEmail{$\diamond$} \def\@CaracterItemXVacio{...} -\def\@CaracterCeldasVacias{$\cdot$} -\def\@CaracterCR{$\lcurvearrowsw\!$}% (del paquete MnSymbol) -%% \def\@CaracterCR{$\hookleftarrow$}% también puede usarse este. +\def\@CaracterCeldasVacias{\mbox{}\hfill$\cdot$\hfill\mbox{}} +\def\@CaracterCR{\flechaCR} +\def\flechaCR{% + \raisebox{-0.4ex}{% + \begin{tikzpicture} + \draw[line width=0.075ex] (0,0) arc (20:70:0.75ex) + (0,0) arc (-70:-20:0.75ex) ++ (0.8ex,0.55ex) arc (0:-100:1ex); + \end{tikzpicture}}} %% Separación entre la última letra y el carácter que indica que se continúa en la línea siguiente en la descripción cuando ocupa más de una línea. No vale la pena hacer una macro para cambiar esto. \setlength{\@SeparaFinLineaDesc}{0.05cm} |