表格中“if then else”语句中的多列 \omit 位置错误

表格中“if then else”语句中的多列 \omit 位置错误

自从我更新到最新的 LaTex 发行版后,我遇到了Misplaced \omit. }-Error。

这是我的最小工作示例:

\documentclass[parskip=half+,11pt]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{microtype}
\usepackage[T1]{fontenc}

\usepackage{ifthen}

\usepackage{marvosym}
\usepackage[locale=DE]{siunitx}

\usepackage{spreadtab}
\usepackage{booktabs}
\usepackage{multirow}


\newcommand{\abrSummeA}{10.00}
\newcommand{\abrSummeB}{11.90}
\newcommand{\gift}{10.00}
\newcommand{\Steuer}{1}

\begin{document}
    \pagestyle{empty}
    \begin{center}
        \begin{tabular}{lrrrr}

            Lorem   &Lorem \EUR{} & Lorem \EUR{} & Lorem \EUR{} & Lorem \\\midrule %
            \multicolumn{2}{l}{\textbf{Gift}} &\ifthenelse{\isundefined{\gift}}{\textbf{---}}{\gift} \EUR{
            } \\ \bottomrule[1pt]\addlinespace
            %
            \ifthenelse{\isundefined{\Steuer}}{%
                \multicolumn{2}{l}{\parbox{5cm}{\textbf{Sum A:}}}%
                & \num{\abrSummeB} \EUR{}%
            }{%
                \multicolumn{1}{l}{\parbox{5cm}{\textbf{SumA + SumB:}}}%
                    & \num{\abrSummeA}\EUR{}%
                    & \num{\abrSummeB}\EUR{}%
            }%                                                  <- LINE WITH ERROR !
        \end{tabular}
    \end{center}
    
\end{document}

问题出现在 l 38,简而言之。我不知道。该过程完成了处理(我得到了一个 pdf)。但我仍然想解决这个错误。

有什么帮助吗?非常感谢您的回复。最好

答案1

治疗方法同上Skillmon 的回答,只是“实现”可扩展的更简短的方法\ifundefined

\ExplSyntaxOn
\cs_new_eq:NN \ifundefined \cs_if_free:NTF
\ExplSyntaxOff

完整代码:

\documentclass[parskip=half+,11pt]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{microtype}
\usepackage[T1]{fontenc}

\usepackage{marvosym}
\usepackage[locale=DE]{siunitx}

\usepackage{spreadtab}
\usepackage{booktabs}
\usepackage{multirow}


\newcommand{\abrSummeA}{10.00}
\newcommand{\abrSummeB}{11.90}
\newcommand{\gift}{10.00}
\newcommand{\Steuer}{1}

\ExplSyntaxOn
\cs_new_eq:NN \ifundefined \cs_if_free:NTF
\ExplSyntaxOff

\begin{document}
\pagestyle{empty}
\begin{center}
  \begin{tabular}{lrrrr}
    Lorem   &Lorem \EUR{} & Lorem \EUR{} & Lorem \EUR{} & Lorem \\\midrule %
    \multicolumn{2}{l}{\textbf{Gift}} &\ifundefined{\gift}{\textbf{---}}{\gift} \EUR{
    } \\ \bottomrule[1pt]\addlinespace
    %
    \ifundefined{\Steuer}{%
      \multicolumn{2}{l}{\parbox{5cm}{\textbf{Sum A:}}}%
                                      & \num{\abrSummeB} \EUR{}%
                                    }{%
                                      \multicolumn{1}{l}{\parbox{5cm}{\textbf{SumA + SumB:}}}%
                    & \num{\abrSummeA}\EUR{}%
                    & \num{\abrSummeB}\EUR{}%
                  }%                                                  <- LINE WITH ERROR !
                \end{tabular}
              \end{center}

\end{document}

在此处输入图片描述

答案2

问题是对齐中的一些特殊标记(因此在tabular和类似环境中)必须是单元格中的第一个不可扩展标记(\multicolumn扩展到\multispan扩展到\omit)。您不能在这些基元前面有不可扩展的材料(另一个是\noalign必须是一行中的第一个,这就是为什么您不能\hline在任何地方使用的原因)。

下面定义了一个完全可扩展的未定义宏的测试。

\documentclass[parskip=half+,11pt]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{microtype}
\usepackage[T1]{fontenc}

\usepackage{marvosym}
\usepackage[locale=DE]{siunitx}

\usepackage{spreadtab}
\usepackage{booktabs}
\usepackage{multirow}


\newcommand{\abrSummeA}{10.00}
\newcommand{\abrSummeB}{11.90}
\newcommand{\gift}{10.00}
\newcommand{\Steuer}{1}

\makeatletter
\providecommand\@secondofthree[3]{#2}
\providecommand\@thirdofthree[3]{#3}
\newcommand\ifundefined[1]
  {%
    \ifdefined#1%
      \expandafter\@secondoftwo
    \fi
    \@secondofthree
      {%
        \ifx\relax#1%
          \expandafter\@secondofthree
        \fi
        \@secondoftwo
      }%
  }
\makeatother

\begin{document}
\pagestyle{empty}
\begin{center}
  \begin{tabular}{lrrrr}
    Lorem   &Lorem \EUR{} & Lorem \EUR{} & Lorem \EUR{} & Lorem \\\midrule %
    \multicolumn{2}{l}{\textbf{Gift}} &\ifundefined\gift{\textbf{---}}{\gift} \EUR{
    } \\ \bottomrule[1pt]\addlinespace
    %
    \ifundefined\Steuer{%
      \multicolumn{2}{l}{\parbox{5cm}{\textbf{Sum A:}}}%
                                      & \num{\abrSummeB} \EUR{}%
                                    }{%
                                      \multicolumn{1}{l}{\parbox{5cm}{\textbf{SumA + SumB:}}}%
                    & \num{\abrSummeA}\EUR{}%
                    & \num{\abrSummeB}\EUR{}%
                  }%                                                  <- LINE WITH ERROR !
                \end{tabular}
              \end{center}
    
\end{document}

相关内容