从这个解决方案开始,针对我的旧帖子:前页或后页的距离可变,我怎样才能设置宽度和高度tcolorbox
,以取决于该框是放在奇数页还是偶数页?
我建议从以下代码开始,该代码基于上述链接中的答案的代码:
\documentclass{article}
\usepackage{datatool}
\usepackage{filecontents}
\usepackage[strict]{changepage}
\usepackage{tcolorbox}
\begin{filecontents*}{test1.csv}
Acol, Bcol,Ccol
Ax,Bx,1
Ay,By,3
A1,B22,1
A2,B44,2
A3,B11,3
\end{filecontents*}
\DTLloaddb{mydata1}{test1.csv}
\newlength{\xlengthForOddPages}
\newlength{\xlengthForEvenPages}
\newlength{\ylengthForOddPages}
\newlength{\ylengthForEvenPages}
\setlength{\xlengthForOddPages}{2cm}
\setlength{\xlengthForEvenPages}{10cm}
\setlength{\ylengthForOddPages}{1.5cm}
\setlength{\ylengthForEvenPages}{5cm}
\newcommand*{\xpageDependent}{%
\ifoddpage
\expandafter
\xlengthForOddPages
\else
\expandafter
\xlengthForEvenPages
\fi
}
\newcommand*{\ypageDependent}{%
\ifoddpage
\expandafter
\ylengthForOddPages
\else
\expandafter
\ylengthForEvenPages
\fi
}
\begin{document}
\DTLforeach*{mydata1}{\A=Acol,\B=Bcol,\C=Ccol}%
{%
\begin{tcolorbox}[width=\xpageDependent,height=\ypageDependent,title={Title}]
%\begin{tcolorbox}[width=\checkoddpage{\xpageDependent},height=\checkoddpage{\ypageDependent},title={title}]
\C
\end{tcolorbox}
\newpage
}%
\end{document}
谢谢
答案1
我提出两种解决方案。
使用tcolorbox
的if odd page
选项
tcolorbox
有特殊选项,可根据框位于奇数页还是偶数页来运行不同的代码。在这里,我们使用来if odd page
设置width
和height
选项。如果您有可破坏的框,请阅读部分偶数和奇数页的tcolorbox
手动的(您可能有兴趣使用if odd page*
,这取决于您想要分割的部分)。
\documentclass{article}
\usepackage{datatool}
\usepackage{filecontents}
\usepackage{tcolorbox}
\begin{filecontents*}{test1.csv}
Acol, Bcol,Ccol
Ax,Bx,1
Ay,By,3
A1,B22,1
A2,B44,2
A3,B11,3
\end{filecontents*}
\DTLloaddb{mydata1}{test1.csv}
\newlength{\xlengthForOddPages}
\newlength{\xlengthForEvenPages}
\newlength{\ylengthForOddPages}
\newlength{\ylengthForEvenPages}
\setlength{\xlengthForOddPages}{2cm}
\setlength{\xlengthForEvenPages}{10cm}
\setlength{\ylengthForOddPages}{1.5cm}
\setlength{\ylengthForEvenPages}{5cm}
\begin{document}
\DTLforeach*{mydata1}{\A=Acol,\B=Bcol,\C=Ccol}%
{%
\begin{tcolorbox}[
if odd page={width=\xlengthForOddPages,
height=\ylengthForOddPages}%
{width=\xlengthForEvenPages,
height=\ylengthForEvenPages},
title={Title}]
\C
\end{tcolorbox}
\newpage
}
\end{document}
使用 的tcolorbox
选项phantom
和\ifoddpage
我们仍然可以使用那个答案和tcolorbox
,但我们需要确保\checkoddpage
被调用:
\xpageDependent
在或\ypageDependent
、和的相应用法之前在一个我们可以确定的地方
\checkoddpage
会在同一页面作为tcolorbox
。
这可以使用tcolorbox
的phantom
选项来完成,它显然是为这种用途而设计的:1
确保标签引用正确的页码。
(看计数器、标签和引用在里面tcolorbox
手动的)
此选项的一个困难是运行用户提供的代码在 TeX 组中,然而\checkoddpage
然而,设置条件的当地的(我的意思是,表示 是否等于 或 的赋值\ifoddpage
)。\let
因此,如果我们使用这种技术,我们需要全局传播本地设置的“标志” 。这可以按如下方式完成:\iftrue
\iffalse
\ifoddpage
\checkoddpage
\newcommand*{\mycheckoddpage}{%
\checkoddpage
\global\let\ifmyoddpage=\ifoddpage
}
这样,全局设置的标志\ifmyoddpage
将在选项启动的组之外可见。然后我们只需要在和phantom
的定义中测试这个标志。\xpageDependent
\ypageDependent
\documentclass{article}
\usepackage{datatool}
\usepackage[strict]{changepage}
\usepackage{filecontents}
\usepackage{tcolorbox}
\begin{filecontents*}{test1.csv}
Acol, Bcol,Ccol
Ax,Bx,1
Ay,By,3
A1,B22,1
A2,B44,2
A3,B11,3
\end{filecontents*}
\DTLloaddb{mydata1}{test1.csv}
\newlength{\xlengthForOddPages}
\newlength{\xlengthForEvenPages}
\newlength{\ylengthForOddPages}
\newlength{\ylengthForEvenPages}
\setlength{\xlengthForOddPages}{2cm}
\setlength{\xlengthForEvenPages}{10cm}
\setlength{\ylengthForOddPages}{1.5cm}
\setlength{\ylengthForEvenPages}{5cm}
\newif\ifmyoddpage % always set globally, contrary to \ifoddpage
\newcommand*{\xpageDependent}{%
\ifmyoddpage
\expandafter
\xlengthForOddPages
\else
\expandafter
\xlengthForEvenPages
\fi
}
\newcommand*{\ypageDependent}{%
\ifmyoddpage
\expandafter
\ylengthForOddPages
\else
\expandafter
\ylengthForEvenPages
\fi
}
\newcommand*{\mycheckoddpage}{%
\checkoddpage
\global\let\ifmyoddpage=\ifoddpage
}
\begin{document}
\DTLforeach*{mydata1}{\A=Acol,\B=Bcol,\C=Ccol}%
{%
\begin{tcolorbox}[phantom={\mycheckoddpage},
width=\xpageDependent,height=\ypageDependent,
title={Title}]
\C
\end{tcolorbox}
\newpage
}
\end{document}
注意:也可以\mycheckoddpage
按如下方式定义,结果相同:
\newcommand*{\mycheckoddpage}{%
\checkoddpage
\ifoddpage
\global\myoddpagetrue % global assignment
\else
\global\myoddpagefalse % global assignment
\fi
}
截图
上面给出的两个示例都产生了相同的输出。使用 Gimp 排列此输出,使所有框都位于同一图像上(以避免在此处显示五张几乎空白的页面),可获得:
脚注
\checkoddpage
其工作原理是,在使用标签的地方设置新标签,并测试该标签的页码是奇数还是偶数。