если нечетное четное число из datatool

если нечетное четное число из datatool

следить за темойtcolorbox: особые настройки ширины и высоты для четных и нечетных страниц

минимальный код:

\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}

Как я могу изменить

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

и \checkoddpage{\pageDependent}...

с новым правилом NoCol для Datatools:

  1. если Nocol = нечетное, \pageDependent = 5см

  2. если Nocol = четный, \pageDependent = 10 см

Спасибо

решение1

Я предлагаю следующее:

\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}

Скриншот

Это работает, потому что:

  • \hspace{something}делает \hskip something\relax;

  • после обработки \hskipкоманды TeX расширяет токены до тех пор, пока не получится «связующее звено»;

  • после достаточного количества расширений мой \valueDependentмакрос выдает 〈клей〉, поскольку примитив TeX \ifoddтакже расширяет токены до тех пор, пока не получит 〈число〉 (макросы столбцов, определенные с помощью datatool, такие как \Noздесь, являются расширяемыми).

Если вы хотите, чтобы две длины были жестко закодированы внутри \valueDependent, вы можете использовать:

\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}

Результат такой же, как на предыдущем снимке экрана.

Связанный контент