我有一個與 ifthen 和 tabularx 套件相關的問題。
這是一個最小的例子:
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{tabularx,colortbl}
\usepackage{xcolor}
\usepackage{ifthen}
\def\kw{2}
\begin{document}
\begin{frame}{Title}
\include{file}
\end{frame}
\end{document}
如果包含的文件是:
\begin{tabularx}{\textwidth}{|c|X|}
\hline
Bla & Blabla\\
\hline
\hline
1 & something \\
%\ifthenelse{\equal{\kw}{2}}{\rowcolor{red}}{}
\rowcolor{red}
\hline
2 & something else\\
\hline
3 & something else\\
\hline
\end{tabularx}
我得到了所需的輸出:
但是,如果我將“文件”更改為(注意註釋部分)
\begin{tabularx}{\textwidth}{|c|X|}
\hline
Bla & Blabla\\
\hline
\hline
1 & something \\
\ifthenelse{\equal{\kw}{2}}{\rowcolor{red}}{}
%\rowcolor{red}
\hline
2 & something else\\
\hline
3 & something else\\
\hline
\end{tabularx}
我收到一堆錯誤(“Misplaced \noalign \end{tabularx}”等)和此輸出:
我很感謝任何線索......
編輯:如果我使用 \input 而不是 \include ,問題仍然相同。
答案1
請注意,\include
應該是\input
,但這不是問題。
問題是\rowcolor
擴展後必須是一行中的第一項,因此您需要使用可擴展測試,但事實\ifthenelse
並非如此。有了etoolbox
它就很容易了。
順便說一句,beamer
已經加載了xcolor
,因此為了加載,colortbl
最好將table
選項傳遞給它,這是透過添加xcolor=table
到全域選項來完成的。
\documentclass[xcolor=table]{beamer}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}
\usepackage{etoolbox}
\def\kw{2}
\begin{document}
\begin{frame}{Title}
\begin{tabularx}{\textwidth}{|c|X|}
\hline
Bla & Blabla\\
\hline
\hline
1 & something \\
\ifnumcomp{\kw}{=}{2}{\rowcolor{red}}{}
\hline
2 & something else\\
\hline
3 & something else\\
\hline
\end{tabularx}
\end{frame}
\end{document}
答案2
嘗試這個。
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{tabularx,colortbl}
\usepackage{xcolor}
\usepackage{ifthen}
\def\kw{2}
\begin{document}
\begin{frame}{Title}
\begin{tabularx}{\textwidth}{|c|X|}
\hline
Bla & Blabla\\
\hline
\hline
1 & something\ifthenelse{\equal{\kw}{2}}{\\\rowcolor{red}}{\\}%
\hline
2 & something else\\
\hline
3 & something else\\
\hline
\end{tabularx}
\end{frame}
\end{document}