在 rechnung.sty 中为“Einzelpreis”添加货币符号

在 rechnung.sty 中为“Einzelpreis”添加货币符号

我正在使用记录包来开具发票,并希望货币符号不仅出现在“Gesamtpreis”栏中,还出现在“Einzelpreis”栏中。

从我弄清楚的源代码来看,\Artikel-command 将所有参数传递给which ,对 finallyArtikelX执行相同的操作。 但是,在调用后者时仅添加(参见源代码)会导致一些奇怪的行为:lineBaseXRCHlineX\writeCurrency

在此处输入图片描述

MWE 重现该表:

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[separate-uncertainty=true, locale=DE]{siunitx} % SI units
\usepackage{rechnung}

\begin{document}

\Euro
\begin{Rechnung}[N]
    \Steuersatz{19}{7}
    \PositionAus
    \TrennerEin
    \Artikel{48}{Fritz Kola}{0,80}
    \Artikel[e]{20}{Schlappeseppel Pils \SI{0,33}{\liter}}{0,79}
    \Artikel{20}{Pizza}{14,00}
    \Artikel{20}{Druck Plakate}{0,50}
    \Artikel{40}{Druck Flyer}{0,50}
\end{Rechnung}

\end{document}

的源代码记录(下载似乎不起作用)

%% This is file `rechnung.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% rechnung.dtx  (with options: `package')
%% 
%% IMPORTANT NOTICE:
%% For the copyright see the source file.
%% 
%% Any modified versions of this file must be renamed
%% with new filenames distinct from rechnung.sty.
%% 
%% For distribution of the original source see the terms
%% for copying and modification in the file rechnung.dtx.
%% 
%% This generated file may be distributed as long as the
%% original source files, as listed above, are part of the
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% File: rechnung.dtx Copyright (C) 1998 M G Berberich
%% [email protected]

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{rechnung}
          [2001/04/01 v3.10 BMG Rechnungs Style, enhanced by Ulrich Sibiller]
\newcount\@RCHcnt \newcount\@RCHsum \newcount\@RCHtmp
\newcount\@RCHmwst \newcount\@RCHmwsti \newcount\@RCHmwstii
\newcount\@RCHtmptmp
\newdimen\@RCHPosWidth
\newdimen\@RCHAnzWidth
\newdimen\@RCHArtnumWidth
\newdimen\@RCHArtWidth
\newdimen\@RCHEinzelWidth
\newdimen\@RCHGesamtWidth
\@RCHPosWidth=1.5em%
\@RCHAnzWidth=2.9em%
\@RCHArtnumWidth=5em%
\@RCHEinzelWidth=4.8em%
\@RCHGesamtWidth=6.1em%
\newif\if@RCHerm
\newif\if@RCHpos
\newif\if@RCHfirst
\newif\if@RCHhor
\newif\if@RCHartnum
\newif\if@RCHinit
\newdimen\@RCHwdt
\newcommand*\@RCHstsi{16}
\newcommand*\@RCHstsii{7}
\newcommand*\@waehrung{D\kern-0.05em M}
\newcommand*\Steuersatz[2]{\def\@RCHstsi{#1}\def\@RCHstsii{#2}}
\newcommand*\Waehrung[1]{\def\@waehrung{#1}}
\newcommand*\PositionEin[0]{\if@RCHinit\else\global\@RCHpostrue\fi}
\newcommand*\PositionAus[0]{\if@RCHinit\else\global\@RCHposfalse\fi}
\newcommand*\TrennerEin[0]{\if@RCHinit\else\global\@RCHhortrue\fi}
\newcommand*\TrennerAus[0]{\if@RCHinit\else\global\@RCHhorfalse\fi}
\newcommand*\Euro{\def\@waehrung{\texteuro}}
\newcommand*\Gesamtsumme{\writeCurrency\@RCHsum}
\newcommand*\Mehrwertsteuer{\writeCurrency\@RCHmwst}
\newcommand*\@RCHwrite[1]{\@tempcnta\the#1
  \@tempcntb\@tempcnta
  \divide\@tempcnta100 \the\@tempcnta,%
  \multiply\@tempcnta100\advance\@tempcntb-\@tempcnta
  \@tempcnta\@tempcntb\divide\@tempcnta10 \the\@tempcnta
  \multiply\@tempcnta10\advance\@tempcntb-\@tempcnta
  \the\@tempcntb
}
\newcommand*\writeCurrency[1]{\@RCHwrite{#1}\,\@waehrung}
\newcommand*\writebfCurrency[1]{{\fontseries{b}
  \selectfont\writeCurrency{#1}}}
\newcommand*\@readNum[1]{\@RCHtmp=0\@readA#1\relax}
\newcommand*\@readA[1]{%
  \expandafter\if#1\relax\@tempcnta0\@readC\relax
  \else\expandafter\if#1.\@tempcnta0
  \expandafter\expandafter\expandafter\expandafter
  \expandafter\expandafter\expandafter\@readB
  \else\expandafter\if#1,\@tempcnta0
  \expandafter\expandafter\expandafter\expandafter
  \expandafter\expandafter\expandafter\@readB
  \else\multiply\@RCHtmp10\advance\@RCHtmp#1
  \expandafter\expandafter\expandafter\expandafter
  \expandafter\expandafter\expandafter\@readA
  \fi\fi\fi
}
\newcommand*\@readB[1]{%
  \expandafter\if#1\relax\relax
     \ifnum \@tempcnta > 2
       \@RCHtmp0\PackageError{rechnung}{mehr als zwei
       Nachkommastellen gefunden}
     \else
       \ifnum \@tempcnta = 2
       \else
         \ifnum \@tempcnta > 0
   \advance\@tempcnta1
           \multiply\@RCHtmp10
   \@readB\relax
         \else
           \multiply\@RCHtmp100\PackageError{rechnung}{keine
           Nachkommastellen gefunden}
         \fi
       \fi
    \fi
  \else
     \advance\@tempcnta1
     \multiply\@RCHtmp10
     \advance\@RCHtmp#1\expandafter\@readB
  \fi}

\newcommand*\@readC[1]{%
  \expandafter
  \if#1\relax\relax
     \ifnum \@tempcnta > 2
       \@RCHtmp0\PackageError{rechnung}{mehr als zwei
       Nachkommastellen gefunden}
     \fi
     \ifnum \@tempcnta < 2
 \advance\@tempcnta1
         \multiply\@RCHtmp10
 \@readC\relax
     \fi
  \else
     \advance\@tempcnta1
     \multiply\@RCHtmp10
     \advance\@RCHtmp#1\expandafter\@readC
  \fi}
\newcommand*{\writefoot}[0]{
  \if@RCHerm
    \nointerlineskip
    \vskip0.5ex
    \hbox to \textwidth{
      \hfill\footnotesize\strut
      * Artikel mit \SI{\@RCHstsii}{\percent} Mehrwertsteuer}
  \fi}
\newcommand*\@RCHsline[2]{%
  \goodbreak\nointerlineskip
  \vbox{\hrule
    \hbox to\textwidth{%
      \strut\lsep #1\hfil
      \sep
      \hbox to \@RCHGesamtWidth{\hfil#2}%
      \rsep}%
    \hrule\vskip-0.4pt}}
\newcommand*\@RCHohne{
  \@RCHsline{\textbf{Gesamtsumme}}{\writebfCurrency\@RCHsum}}
\newcommand*\@RCHnetto{
  \@RCHsline{Nettosumme}{\writeCurrency\@RCHsum}%
  \multiply\@RCHmwsti\@RCHstsi
  \advance\@RCHmwsti50\divide\@RCHmwsti100
  \multiply\@RCHmwstii\@RCHstsii
  \advance\@RCHmwstii50\divide\@RCHmwstii100
  \@RCHmwst\@RCHmwsti\advance\@RCHmwst\@RCHmwstii
  \if@RCHerm
    \@RCHsline{zzgl. \SI{\@RCHstsii}{\percent} MwSt.}{\writeCurrency\@RCHmwstii}%
  \fi
  \@RCHsline{zzgl. \SI{\@RCHstsi}{\percent} MwSt.}{\writeCurrency\@RCHmwsti}%
  \advance\@RCHsum\@RCHmwst
  \hrule
  \vskip\doublerulesep\vskip0.4pt
  \@RCHsline{\textbf{Gesamtsumme}}{\writebfCurrency\@RCHsum}%
  \writefoot
}

\newcommand*\@RCHbrutto{
  \@RCHsline{\textbf{Gesamtsumme}}{\writebfCurrency\@RCHsum}
  \multiply\@RCHmwsti\@RCHstsi\multiply\@RCHmwsti2%
  \@tempcnta100\advance\@tempcnta\@RCHstsi
  \advance\@RCHmwsti\@tempcnta
  \multiply\@tempcnta2%
  \divide\@RCHmwsti\@tempcnta

  \multiply\@RCHmwstii\@RCHstsii\multiply\@RCHmwstii2%
  \@tempcnta100\advance\@tempcnta\@RCHstsii
  \advance\@RCHmwstii\@tempcnta
  \multiply\@tempcnta2%
  \divide\@RCHmwstii\@tempcnta

  \@RCHmwst\@RCHmwsti\advance\@RCHmwst\@RCHmwstii
  \if@RCHerm
    \@RCHsline{inkl. \SI{\@RCHstsii}{\percent} MwSt. (erm.)}
    {\writeCurrency\@RCHmwstii}%
  \fi
  \@RCHsline{inkl. \SI{\@RCHstsi}{\percent} MwSt.}{\writeCurrency\@RCHmwsti}%
  \writefoot
}

\newcommand*{\sep}[0]{\hskip\tabcolsep\vrule\hskip\tabcolsep}
\newcommand*{\rsep}[0]{\hskip\tabcolsep\vrule}
\newcommand*{\lsep}[0]{\vrule\hskip\tabcolsep}

\newcommand*\@RCHlineX[6]{{
\goodbreak\nointerlineskip
    \vbox{
      \if@RCHhor
\hrule
      \else
        \if@RCHfirst
          \hrule
        \fi
      \fi
      \hbox to\textwidth{%
\lsep%
        \if@RCHpos%
           \hbox to\@RCHPosWidth{\hfil #1\strut}%
           \sep
        \fi% Pos-Spalte
        \hbox to\@RCHAnzWidth{\hfil #2\strut}\sep% Anzahl-Spalte
        \if@RCHartnum%
          \hbox to\@RCHArtnumWidth{\hfil #3\strut}%
          \sep%
        \fi% Art-Num-Spalte
        \vtop{\normalbaselines%
           \noindent\rightskip=0pt plus1cm%
           \hsize\@RCHwdt%
           \linewidth\hsize#4\null\strut\par}%
        \hfil\sep%Beschreibung
        \hbox to\@RCHEinzelWidth{\hfil #5\strut}\sep% Einzelpreis
        \hbox to\@RCHGesamtWidth{\hfil #6\strut}\rsep% Gesamtpreis
      }%hbox
     }%vbox
}}
\newcommand*\@Artikel[4][X]{\@ArtikelX[#1]{#2}{}{#3}{#4}}
\newcommand*\@ArtikelX[5][X]{
  \initRechnung
  \advance\@RCHcnt1%
  \@readNum{#5}
  \@RCHtmptmp=\@RCHtmp%
  \@readNum{#2}\multiply\@RCHtmp\@RCHtmptmp
  \advance\@RCHtmp99\divide\@RCHtmp100 %Aufrunden auf 2 Nachkommastellen.
  \@lineBaseX[#1]{\the\@RCHcnt}{#2}{#3}{#4}{#5}
}
\newcommand*\@Versandkosten[2][X]{\@VersandkostenX[#1]{#2}}
\newcommand*\@VersandkostenX[2][X]{
  \initRechnung
  \@readNum{#2}
  \@lineBaseX[#1]{\null}{1}{\null}{Versandkosten}{#2}
}
\newcommand*\@lineBaseX[6][X]{
  \global\advance\@RCHsum\@RCHtmp
  \@RCHlineX{#2}{#3}{#4}{#5}{\writeCurrency{#6}}{\writeCurrency\@RCHtmp % added a writeCurrency before #6
    \expandafter\ifx#1X\else\rlap{*}\fi}
  \expandafter
  \ifx#1X
    \advance\@RCHmwsti\@RCHtmp
  \else
    \advance\@RCHmwstii\@RCHtmp\global\@RCHermtrue
  \fi
  \global\@RCHfirstfalse  %horizontale Linien nur beim ersten Artikel
}
\newenvironment*{Rechnung}[1][X]{\RechnungStart{#1}{}}{\RechnungEnde}
\newenvironment*{Rechnung*}[1][X]{\RechnungStart{#1}{X}}{\RechnungEnde}
\newenvironment*{Bestellung}[0]{\RechnungStart{X}{}}{\RechnungEnde}
\newenvironment*{Bestellung*}[0]{\RechnungStart{X}{X}}{\RechnungEnde}
\newcommand*{\RechnungStart}[2]{
  \@RCHinitfalse
  \@RCHermfalse
  \@RCHmwsti0
  \@RCHmwstii0
  \def\@RCHtype{#1}%
  \@RCHcnt0
  \@RCHsum0
  \@RCHwdt\textwidth
  \advance\@RCHwdt-\@RCHAnzWidth        % Breite der Spalte Anz
  \advance\@RCHwdt-\@RCHEinzelWidth     % Breite der Spalte EPreis
  \advance\@RCHwdt-\@RCHGesamtWidth     % Breite der Spalte GPreis
  \advance\@RCHwdt-2.0pt                % Breite der Spaltentrenner
  \advance\@RCHwdt-8\tabcolsep          % Breite des Abstands zu
                                        % den Spaltentrennern

  \global\@RCHfirsttrue
  \global\@RCHpostrue
  \global\@RCHhortrue
\ifx#2X
  \global\@RCHartnumtrue
  \let\Artikel\@ArtikelX
  \let\Posten\@ArtikelX
  \let\Versandkosten\@VersandkostenX
\else
  \global\@RCHartnumfalse
  \let\Artikel\@Artikel
  \let\Posten\@Artikel
  \let\Versandkosten\@Versandkosten
\fi
}
\newcommand*{\initRechnung}[0]
{
  \if@RCHinit
  \else
    % Breite wegen Anzeige der Positionsnummern korrigieren
    %    \begin{macrocode}
    \if@RCHpos
      \advance\@RCHwdt-\@RCHPosWidth
      \advance\@RCHwdt-0.4pt
      \advance\@RCHwdt-2\tabcolsep
    \fi
    %    \end{macrocode}
    % Breite wegen Anzeige der Artikelnummern korrigieren
    %    \begin{macrocode}
    \if@RCHartnum
      \advance\@RCHwdt-\@RCHArtnumWidth
      \advance\@RCHwdt-0.4pt
      \advance\@RCHwdt-2\tabcolsep
    \fi
    %    \end{macrocode}
    % bißchen Platz über der Rechnung
    %    \begin{macrocode}
    \vskip\abovedisplayskip
    %    \end{macrocode}
    % Titelzeile ausgeben
    %    \begin{macrocode}
    \@RCHlineX{Pos.\hfill}%     % removed \scriptsize before all
              {Anzahl\hfill}%               % descriptors
              {Art.\,Nr.\hfill}%
              {Beschreibung\hfill}%
              {Einzelpreis\hfill}%
              {Gesamtpreis\hfill}
    \@RCHinittrue
  \fi
}

\newcommand*{\RechnungEnde}[0]
{
  \hrule
  \vskip\doublerulesep\vskip0.4pt
       \expandafter\if\@RCHtype X \@RCHohne
  \else\expandafter\if\@RCHtype N \@RCHnetto
  \else\expandafter\if\@RCHtype B \@RCHbrutto
  \else\PackageError{rechnung}{Unbekannter Rechnungstyp `\@RCHtype'}%
  \fi\fi\fi
  \global\@RCHsum\@RCHsum\global\@RCHmwst\@RCHmwst
  \vskip\belowdisplayskip
}
\endinput
%%
%% End of file `rechnung.sty'.

答案1

哇,这真是一些老旧的遗留代码……你确定你不会用其中一个更好吗?更新的软件包来自 CTAN?也就是说,如果你坚持要使用这个文件,请尝试更改

\@RCHlineX{#2}{#3}{#4}{#5}{#6}{\writeCurrency\@RCHtmp

\@RCHlineX{#2}{#3}{#4}{#5}{#6\,\@waehrung}{\writeCurrency\@RCHtmp

在第 239 行。经过这样的修改,它就可以按预期工作了(我更改了增值税百分比,因为我可以这样做):

\documentclass{article}
\usepackage[ngerman]{babel}

\usepackage[separate-uncertainty=true, locale=DE]{siunitx} % SI units
\usepackage{rechnung}

\begin{document}
    \begin{Rechnung}[N]
        \Euro
        \Steuersatz{21}{11}
        \Artikel{28}{Fritz Kola (süß-sauer)}{0,89}
        \Artikel[e]{20}{Schlappeseppel Pils \SI{0,33}{\liter}}{0,79}
        \Artikel{10}{Pizza}{12,50}
        \Artikel{20}{Druck Plakate A3}{1,50}
        \Artikel{40}{Druck Flyer A5}{0,57}
    \end{Rechnung}
\end{document}

在此处输入图片描述

不过,说真的,该代码已经有 20 年的历史了,而且它表明...除非您真的投入了,否则请使用其他东西(任何东西)。

相关内容