填充长表的新命令和计数器的问题

填充长表的新命令和计数器的问题

我正在尝试创建一个订单表格。这个文档的核心是一个带有长表的 srclttr2,甚至可以为长订单获取一份不错的文档。为了使这个模板更加灵活/简单,我想通过一个命令来填充表格。除了两点之外,这个工作很顺利。

  1. 我想交替更改两行之间的水平线颜色。为此,我引入了一个计数器,该计数器使用 if-else 语句确定命令末尾的线条颜色并增加计数器。不幸的是,这会导致“缺少 \endcsname 插入。”错误。我觉得这个问题与在 TEX 中扩展和执行有关,但我不知道问题可能出在哪里。也许它也与 siunitx 包的使用有关?
  2. 第二个问题发生在我尝试将命令的第三个参数(订单金额单位)设为可选时。所以我认为我的命令应该类似于此: \newcommand{\addOrderRow}[8][\si{\piece}]{\sisetup{round-precision=0} #2 & #3 & #1 & \begin{minipage}[t]{78mm}{\setlength{\parskip}{.2mm}\begin{description}\item[{#4}]#5\end{description}\vspace{.2mm}}\end{minipage} & #6 & #7 & #8 & \percent \\ \pagebreak[3]}。在这种情况下,我收到错误消息“\LT@array 的使用与其定义不匹配。”。我想我做错了什么,但我不知道是什么。

谁能告诉我为什么上述考虑不能与(长)表结合使用?

\documentclass[10pt]{scrlttr2}

\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{helvet}
\renewcommand{\familydefault}{\sfdefault}
\usepackage[locale=DE]{siunitx}
\sisetup{
    locale = DE,
    %number-mode = text,
    %text-family-to-math = true,
    detect-all,
    round-mode = places, %default: none
    round-precision = 2
}
\usepackage{longtable}
\usepackage{collcell}
\usepackage{colortbl}
\usepackage{xcolor}
%\usepackage{microtype} 

\setlength{\tabcolsep}{3pt}
\DeclareSIUnit{\piece}{Stk.}

\newcommand{\tablemidlinea}{\arrayrulecolor{lightgray}\hline\arrayrulecolor{black}}
\newcommand{\tablemidlineb}{\arrayrulecolor{red}\hline\arrayrulecolor{black}}

\newcounter{rownum}

\newcommand{\addOrderRow}[8]{
    \sisetup{round-precision=0} #1 &% postion
    #2 &% quantity 
    #3 &% unit
    \begin{minipage}[t]{78mm}{\setlength{\parskip}{.2mm}\begin{description}\item[{#4}]#5\end{description}\vspace{.2mm}}\end{minipage} &% number + description
    #6 &% price
    #7 &% amount
    #8 &% tax
    \percent% 
    \\ \pagebreak[3]%
    \ifodd\value{rownum}%
        \tablemidlinea%
    \else%
        \tablemidlineb%
    \fi%
    \stepcounter{rownum}%
}


\begin{document}
\begin{letter}


\setcounter{rownum}{3}

\begin{longtable}{
S[table-format = 2.0]|
S[table-format = 4.2]@{\,}
l|
p{79mm}|
S[table-format = 6.2]|
S[table-format = 6.2]|
S[table-format = 2.2]@{\,}
>{\collectcell\unit}l<{\endcollectcell}%
}
{Pos.} & \multicolumn{2}{c|}{Menge} & {Best. Nr., \quad \quad Bezeichnung} & {Preis} & {Betrag} & \multicolumn{2}{c}{MwSt} \\
\hline 
\endhead %
\sisetup{round-precision=0} 01 & 4,00 & & \begin{minipage}[t]{78mm}{\setlength{\parskip}{.2mm}\begin{description}\item[{1564933RL}]Lorem ipsum dolor sit amet dorem ipsum dolor sit amet\end{description}\vspace{.2mm}}\end{minipage} & 66.059 & 264.236 & 19.00 & \\ \tablemidlineb
\addOrderRow{4}{1233,0}{Stk.}{1564933RL}{Lorem ipsum dolor sit amet dorem ipsum dolor sit amet}{12,599}{37.797}{19,34}%

\end{longtable}

\end{letter}
\end{document}

答案1

这并不能直接回答您的问题,但提供了一个tabularray基于 的替代方案,可能会让您感兴趣。tabularray提供了一种内置机制来更改颜色或奇数和偶数水平线。 我还替换了\begin{minipage}[t]{78mm}{\setlength{\parskip}{.2mm}\begin{description}\item[{#4}]#5\end{description}\vspace{.2mm}}\end{minipage}我猜只是用来在“Bezeichnung”列的以下几行中获得悬挂缩进。 使用 可以实现相同的效果>{\setlength{\hangindent}{2em}}。 对于此列,我还使用了一种X列类型,以确保表格适合可用空间。 最后,我还调整了“Menge”和“MSt”列的列类型,以避免需要将数字和单位拆分为单独的列。

通过这些更改,所需的输入减少到:

4 & 1233,0 \unit{\piece} & 1564933RL Lorem ipsum dolor sit amet dorem ipsum dolor sit amet & 12,599 & 37.797 & 19,34 \unit{\percent}\\

我怀疑它是否比提议的更复杂

\addOrderRow{4}{1233,0}{Stk.}{1564933RL}{Lorem ipsum dolor sit amet dorem ipsum dolor sit amet}{12,599}{37.797}{19,34}

以下是完整且简化的 MWE:

\documentclass[10pt]{scrlttr2}

\usepackage[locale=DE]{siunitx}
\sisetup{
    locale = DE,
    detect-all,
    round-mode = places, %default: none
    round-precision = 2
}
\DeclareSIUnit{\piece}{Stk.}

\usepackage{xcolor}

\usepackage{longtable}
\usepackage{tabularray}
\UseTblrLibrary{siunitx}

\usepackage{ragged2e}


\begin{document}
\begin{letter}


\begin{longtblr}[label=none]{colspec={
S[table-format = 2.0, round-precision=0]
S[table-format = 4.2, table-space-text-post=\unit{\piece}]
>{\setlength{\hangindent}{2em}}X[l]|
S[table-format = 6.2]
S[table-format = 6.2]
S[table-format = 2.2, table-space-text-post=\unit{\percent}]
},  
hline{odd} = {red}, hline{even}={gray}, hline{1} = {0pt}, hline{2} ={black}, 
vlines, 
rowhead = 1, 
leftsep=3pt, rightsep=3pt}
{{{Pos.}}} & {{{Menge}}} & {{{Best. Nr., \quad \quad Bezeichnung}}} & {{{Preis}}} & {{{Betrag}}} & MwSt \\

 01 & 4,00 & 1564933RL Lorem ipsum dolor sit amet dorem ipsum dolor sit amet & 66.059 & 264.236 & 19.00  \\ 
4 & 1233,0 \unit{\piece} & 1564933RL Lorem ipsum dolor sit amet dorem ipsum dolor sit amet & 12,599 & 37.797 & 19,34 \unit{\percent}\\
 01 & 4,00 & 1564933RL Lorem ipsum dolor sit amet dorem ipsum dolor sit amet & 66.059 & 264.236 & 19.00  \\ 
4 & 1233,0 \unit{\piece} & 1564933RL Lorem ipsum dolor sit amet dorem ipsum dolor sit amet & 12,599 & 37.797 & 19,34 \unit{\percent}\\
\end{longtblr}

\end{letter}
\end{document}

及其输出:

在此处输入图片描述

相关内容