如果來自 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}...

Datatools 的 NoCol 規則如下:

  1. 如果 Nocol = 奇數,\pageDependent = 5cm

  2. 如果 Nocol = 偶數,\pageDependent = 10cm

謝謝

答案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 擴展標記直到它有一個<glue>;

  • 經過足夠的擴展後,我的\valueDependent宏產生一個 <glue>,因為 TeX 原語\ifodd也會擴展標記直到它具有 <number> (由 定義的列宏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}

輸出與上一個螢幕截圖中的相同。

相關內容