在主题中:如果条件则显示框 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}