我有一个与 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}
我收到一堆错误(“放错 \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}