データツールから奇数偶数の場合

データツールから奇数偶数の場合

トピックをフォロー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は展開可能です)。

2 つの長さを内部でハードコードしたい場合は\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}

出力は前のスクリーンショットと同じです。

関連情報