表内的条件

表内的条件

我有几个显示表格的文档。某些行在文档之间共享,因此它们位于单独的文件中。这些行应包含 if 语句,以根据调用它们的主文件打印不同内容(每个主文件将命令设置为特定值)。不幸的是,指示此分支的参数本身是用于显示行的命令中另一个分支的参数。

重点是:这个参数通常为 null {},因此我不希望在那里显示任何内容,而当它不为 null 时,我想要参数(到目前为止一切顺利)。然后,当我有参数时,有时,根据我所在的文件,我想打印两个不同的东西。

以下是执行此操作的 MWE:

\documentclass[]{article}
\usepackage[english]{babel}
\usepackage{ifthen}
\usepackage{tabularx}

\newcommand{\name}[0]{one}
\newcommand{\myrow}[3]{#1 \ifthenelse{\equal{#3}{}}{}{;#3} & #2 \\\hline}

\begin{document}
\begin{tabularx}{1\linewidth}{| X | X | }
    \hline
    \myrow{A}{B}{C}      %this one prints  | A;C | B |
    \myrow{A}{B}{}       %this one prints  | A | B |
    \input{non-functioning-row}
\end{tabularx}
\end{document}

直观地看,会有另一个与此类似的文件,但只有一个区别,它将 \name 设置为“two”。

而“non-funtioning-row”文件包含

\myrow{A}{B}{\ifthenelse{\equal{\name}{one}}{one}{two}}

前段时间,我尝试了另一个 if-then-else 包,它应该比这个更好,但未能实现我想要的。

答案1

我建议使用\ifx等等以及一些\empty测试宏的定义,这样更容易改变条件,比如说\fooone\footwo而不是文字onetwo

\documentclass[]{article}
\usepackage[english]{babel}
%\usepackage{ifthen}
\usepackage{tabularx}

\newcommand{\fooone}{one}
\newcommand{\footwo}{two}
\newcommand{\name}{one}
\makeatletter
\newcommand{\myrow}[3]{\def\foobar{#3}#1 \ifx\foobar\empty\else;#3\fi & #2\\ \hline}
\makeatother

\begin{document}
\begin{tabularx}{1\linewidth}{| X | X | }
    \hline
    \myrow{A}{B}{C}      %this one prints  | A;C | B |
    \myrow{A}{B}{}       %this one prints  | A | B 
    \input{notworking}
\end{tabularx}
\end{document}

notworking.tex包含

\myrow{A}{B}{\ifx\name\fooone\relax\fooone\else \footwo\fi}

在此处输入图片描述

相关内容