![表格中“if then else”语句中的多列 \omit 位置错误](https://linux22.com/image/451166/%E8%A1%A8%E6%A0%BC%E4%B8%AD%E2%80%9Cif%20then%20else%E2%80%9D%E8%AF%AD%E5%8F%A5%E4%B8%AD%E7%9A%84%E5%A4%9A%E5%88%97%20%5Comit%20%E4%BD%8D%E7%BD%AE%E9%94%99%E8%AF%AF.png)
自从我更新到最新的 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}