如果是,则展开条件,带有 2 个参数 - 显示和隐藏框

如果是,则展开条件,带有 2 个参数 - 显示和隐藏框

在主题中:如果条件则显示框 A 或框 B

我只使用了一个参数

旧规则:使用 TextX 的条件

\TextX      |            Show             |         Hide

Value      |     \posterbox A            |          \posterbox B

Blank       |    \posterbox B              |         \posterbox A

现在我想创建新规则:具有 2 个参数的条件:TextX、TextY

\TextX     |   \TextY     |  Show one box       |                 Hide 3 boxes

Value      |   Value      |  \posterbox A     |                    B,C,D

Value      |   Blank     |   \posterbox B            |             A,C,D

Blank     |    Value     |   \posterbox C         |                A,B,D

Blank     |    Blank     |   \posterbox D         |                A,B,C

最小工作代码:

\RequirePackage{filecontents}
\begin{filecontents*}{file.tex}
 No,TextX,TextY,TextZ,TextW
 1,x1,y1,z1,w1
 2,,y2,z2,w2
 3,,y3,w3,
 4,,,,w4
 5,x5,y5,,
 6,,y6,z6,w6
 7,x7,y7,z7,w7

\end{filecontents*}

\documentclass{article}
\usepackage[a4paper,landscape]{geometry}
\usepackage{filecontents}
\usepackage{datatool}
\usepackage{wrapfig}
\usepackage{xparse}
\usepackage{lipsum}
\usepackage{tikz}
\usepackage{tcolorbox}
\tcbuselibrary{poster}

\usepackage{bbding}
\usepackage{pifont}
\usepackage{enumitem, setspace}
 \tcbset{colframe=blue!75!black,colback=white}


 \DTLloaddb{file}{file.tex}

 \begin{document}

 \DTLforeach*
 {file}% Database
 {\No=No,\TextX=TextX,\TextY=TextY,\TextZ=TextZ,\TexW=TextW}
 {%
 \begin{tcbposter}[
  poster = {
    columns=1,
    rows=1,
    spacing=3mm,
    height=14cm,
    width=12cm,
  },
]
%Box A
\expandafter\ifx\expandafter\relax\TextX\relax\else
\posterbox[colframe=red,width=5cm,height=5cm]{name=A,column=1}{
\includegraphics[height=3cm]{example-image-a} 
 \begin{enumerate}[wide, leftmargin =-1em, rightmargin=-1em]
\item A \TextX
\end{enumerate}
}\fi
%\newpage

%Box B
\expandafter\ifx\expandafter\relax\TextX\relax
\posterbox[colframe=blue,width=5cm,height=5cm]{name=B,column=1,xshift=5.0cm,yshift=0.0cm}{
 \begin{enumerate}

\item B \TextY
\item B \TextY
\item B \TextY
\end{enumerate}
\includegraphics[height=2cm]{example-image-b}
}\fi
\vspace{2cm}
%BoxC
\posterbox[colframe=green,width=5cm,height=5cm]{name=C,column=1,xshift=1.0cm,yshift=-7.0cm}{
\begin{enumerate}

\item C \TextZ
\item C \TextZ
\end{enumerate}
\includegraphics[height=2cm]{example-image-c}
}
%BoxD
\posterbox[colframe=black,width=5cm,height=5cm]{name=C,column=1,xshift=8.0cm,yshift=-7.0cm}{
\includegraphics[height=2cm]{example-image-duck}
 \begin{enumerate}

\item D \TextW
\item D \TextW
\end{enumerate}

}
\end{tcbposter}
\newpage
}

\end{document}

请使用新规则更新代码:2 个参数

谢谢

答案1

您可以嵌套一些\if条件:

\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.dat}
 No,TextX,TextY,TextZ,TextW
 1,x1,y1,z1,w1
 2,,y2,z2,w2
 3,,y3,w3,
 4,,,,w4
 5,x5,y5,,
 6,,y6,z6,w6
 7,x7,y7,z7,w7
\end{filecontents*}

\documentclass{article}
\usepackage[a4paper,landscape]{geometry}
\usepackage{datatool}
\usepackage{tikz}
\usepackage{tcolorbox}
\tcbuselibrary{poster}

\usepackage{enumitem, setspace}
\tcbset{colframe=blue!75!black,colback=white}

\DTLloaddb{file}{\jobname.dat}

\newcommand{\select}[2]{%
  \if\relax#1\relax
    \if\relax#2\relax
      \selectD % 00
    \else
      \selectC % 01
    \fi
  \else
    \if\relax#2\relax
      \selectB % 10
    \else
      \selectA % 11
    \fi
  \fi
}
\newcommand{\selectA}{%
  \posterbox[colframe=red,width=5cm,height=5cm]{name=A,column=1}{%
    \includegraphics[height=3cm]{example-image-a} 
    \begin{enumerate}[wide, leftmargin =-1em, rightmargin=-1em]
    \item A \TextX
    \end{enumerate}
  }%
}
\newcommand{\selectB}{%
  %Box B
  \posterbox[colframe=blue,width=5cm,height=5cm]{name=B,column=1,xshift=5.0cm,yshift=0.0cm}{%
    \begin{enumerate}
    \item B \TextY
    \item B \TextY
    \item B \TextY
  \end{enumerate}
  \includegraphics[height=2cm]{example-image-b}
  }%
}
\newcommand{\selectC}{%
  %BoxC
  \posterbox[colframe=green,width=5cm,height=5cm]{name=C,column=1,xshift=1.0cm,yshift=-7.0cm}{%
    \begin{enumerate}
    \item C \TextZ
    \item C \TextZ
    \end{enumerate}
    \includegraphics[height=2cm]{example-image-c}
  }%
}
\newcommand{\selectD}{%
  %BoxD
  \posterbox[colframe=black,width=5cm,height=5cm]{name=C,column=1,xshift=8.0cm,yshift=-7.0cm}{%
    \includegraphics[height=2cm]{example-image-duck}
    \begin{enumerate}
    \item D \TextW
    \item D \TextW
    \end{enumerate}
  }%
}

\begin{document}

\DTLforeach*{file}% Database
 {\No=No,\TextX=TextX,\TextY=TextY,\TextZ=TextZ,\TextW=TextW}
 {%
  \begin{tcbposter}[
    poster = {
      columns=1,
      rows=1,
      spacing=3mm,
      height=14cm,
      width=12cm,
    },
  ]
  \select{\TextX}{\TextY}
  \end{tcbposter}
  \newpage
}

\end{document}

答案2

你可以扩展上一篇文章中的想法,通过多个语句分支来实现,\if比如

\expandafter\ifx\expandafter\relax\TextX\relax
  \expandafter\ifx\expandafter\relax\TextY\relax\else
  ...
\fi\fi...\fi

但最终看起来会很糟糕。相反,下面的代码定义了一个\FourWayChoice接受6参数的命令,并用作

\FourWayChoice{\TextX}{\TextY}{Box A}{Box B}{Box C}{Box D}

其中不同的“框”是根据 OP 中的表格选择的。宏的定义\FourWayChoice非常简单,部分原因是我使用LaTeX3。你可以用同样的想法来回答上一个帖子。

使用此代码,MWE 的第 2 页如下所示:

在此处输入图片描述

完整代码如下:

\RequirePackage{filecontents}
\begin{filecontents*}{file.tex}
 No,TextX,TextY,TextZ,TextW
 1,x1,y1,z1,w1
 2,,y2,z2,w2
 3,,y3,w3,
 4,,,,w4
 5,x5,y5,,
 6,,y6,z6,w6
 7,x7,y7,z7,w7

\end{filecontents*}

\documentclass{article}
\usepackage[a4paper,landscape]{geometry}
\usepackage{filecontents}
\usepackage{datatool}
\usepackage{wrapfig}
\usepackage{xparse}
\usepackage{lipsum}
\usepackage{tikz}
\usepackage{tcolorbox}
\tcbuselibrary{poster}

\usepackage{bbding}
\usepackage{pifont}
\usepackage{enumitem, setspace}
\tcbset{colframe=blue!75!black,colback=white}
\DTLloaddb{file}{file.tex}

\usepackage{expl3}
\ExplSyntaxOn
\cs_generate_variant:Nn \str_set:Nn {No}
\str_new:N \l_text_x_str
\str_new:N \l_text_y_str
\NewDocumentCommand\FourWayChoice{ mm mmmm }{
  \str_set:No \l_text_x_str {#1}
  \str_set:No \l_text_y_str {#2}
  \str_if_empty:NTF \l_text_x_str
    { \str_if_empty:NTF \l_text_y_str {#6} {#5} }
    { \str_if_empty:NTF \l_text_y_str {#4} {#3} }
}
\ExplSyntaxOff

\begin{document}

 \DTLforeach*
 {file}% Database
 {\No=No,\TextX=TextX,\TextY=TextY,\TextZ=TextZ,\TextW=TextW}
 {%
 \begin{tcbposter}[
    poster = {
      columns=1,
      rows=1,
      spacing=3mm,
      height=14cm,
      width=12cm,
    },
  ]
  \FourWayChoice{\TextX}{\TextY}
    { % Box A
      \posterbox[colframe=red,width=5cm,height=5cm]{name=A,column=1}{
        \includegraphics[height=3cm]{example-image-a}
          \begin{enumerate}[wide, leftmargin =-1em, rightmargin=-1em]
             \item A \TextX
          \end{enumerate}
        }
    }
    { % Box B
      \posterbox[colframe=blue,width=5cm,height=5cm]
        {name=B,column=1,xshift=5.0cm,yshift=0.0cm}{
        \begin{enumerate}
          \item B \TextY
          \item B \TextY
          \item B \TextY
        \end{enumerate}
        \includegraphics[height=2cm]{example-image-b}
      }
    }
    { % BoxC
      \posterbox[colframe=green,width=5cm,height=5cm]
         {name=C,column=1,xshift=1.0cm,yshift=-7.0cm}{
        \begin{enumerate}
          \item C \TextZ
          \item C \TextZ
        \end{enumerate}
        \includegraphics[height=2cm]{example-image-c}
      }
    }
    { % BoxD
      \posterbox[colframe=black,width=5cm,height=5cm]
        {name=C,column=1,xshift=8.0cm,yshift=-7.0cm}{
        \includegraphics[height=2cm]{example-image-duck}
        \begin{enumerate}
          \item D \TextW
          \item D \TextW
        \end{enumerate}
      }
    }
  \end{tcbposter}
  %\newpage
}

\end{document}

相关内容