se número par ímpar do datatool

se número par ímpar do datatool

seguir tópicotcolorbox: configurações específicas de largura e altura para páginas pares e ímpares

código mínimo:

\documentclass{article}
\usepackage{datatool}
\usepackage{filecontents}
\usepackage[strict]{changepage}

\begin{filecontents*}{test2.csv}
Acol, Bcol, NoCol
Ax,Bx,1
Ay,By,3
A1,B22,2
A2,B44,4
A3,B11,5
\end{filecontents*}

\DTLloaddb{mydata}{test2.csv}

\newcommand*{\pageDependent}{\ifoddpage 5cm\else 10cm\fi\relax}

\begin{document}

\DTLforeach*{mydata}{\A=Acol,\B=Bcol}%
{%
 \A \checkoddpage\hspace{\pageDependent} \B
 \newpage
}%

\end{document}

Como posso mudar

\newcommand*{\pageDependent}{\ifoddpage 5cm\else 10cm\fi\relax}

e \checkoddpage{\pageDependent}...

com a nova regra abaixo do NoCol do Datatools:

  1. se Nocol = ímpar, \pageDependent = 5cm

  2. se Nocol = par, \pageDependent = 10cm

Obrigado

Responder1

Proponho o seguinte:

\RequirePackage{filecontents}
\begin{filecontents*}{test2.csv}
Acol, Bcol, NoCol
Ax,Bx,1
Ay,By,3
A1,B22,2
A2,B44,4
A3,B11,5
\end{filecontents*}

\documentclass{article}
\usepackage{datatool}
\DTLloaddb{mydata}{test2.csv}

\makeatletter
\newcommand*{\valueDependent}[1]{%
  \ifodd #1
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
}
\makeatother

\begin{document}

\DTLforeach*{mydata}{\A=Acol, \B=Bcol, \No=NoCol}%
{%
 \A
 \hspace{\valueDependent{\No}{5cm}{10cm}}%
 \B
 \par
}%

\end{document}

captura de tela

Isso funciona porque:

  • \hspace{something}faz \hskip something\relax;

  • após digerir um \hskipcomando, o TeX expande os tokens até obter uma 〈cola〉;

  • após expansões suficientes, minha \valueDependentmacro produz uma 〈cola〉, porque a primitiva TeX \ifoddtambém expande tokens até ter um 〈número〉 (as macros de coluna definidas por datatool, como \Noaqui, são expansíveis).

Caso você queira que os dois comprimentos sejam codificados internamente \valueDependent, você pode usar:

\RequirePackage{filecontents}
\begin{filecontents*}{test2.csv}
Acol, Bcol, NoCol
Ax,Bx,1
Ay,By,3
A1,B22,2
A2,B44,4
A3,B11,5
\end{filecontents*}

\documentclass{article}
\usepackage{datatool}
\DTLloaddb{mydata}{test2.csv}

\newcommand*{\valueDependent}[1]{%
  \ifodd #1 5cm \else 10cm \fi
}

\begin{document}

\DTLforeach*{mydata}{\A=Acol, \B=Bcol, \No=NoCol}%
{%
 \A
 \hspace{\valueDependent{\No}}%
 \B
 \par
}%

\end{document}

A saída é a mesma da captura de tela anterior.

informação relacionada