我有几个显示表格的文档。某些行在文档之间共享,因此它们位于单独的文件中。这些行应包含 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
而不是文字one
和two
。
\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}