我使用 checkifodd 和 varialbe x, y。
编译时出现错误:渲染此 PDF 时出现错误
我的代码:
\documentclass{article}
\usepackage{datatool}
\usepackage{filecontents}
\usepackage[strict]{changepage}
\usepackage{ifoddpage}
\usepackage{tcolorbox}
\usepackage[absolute,overlay]{textpos}
\usepackage{tikz}
\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}
\newcommand*{\x}{\ifoddpage 5cm\else 10cm\fi}
\newcommand*{\y}{\ifoddpage 1cm\else 6cm\fi}
\begin{document}
\DTLforeach*{mydata1}{\A=Acol,\B=Bcol,\C=Ccol}%
{%
\checkoddpage{
\begin{tikzpicture}[remember picture,overlay]
\node (n1)[anchor=north west,xshift=\x,yshift=\y] at (current page.north west) {\includegraphics[height=5cm]{example-image-b}};
\end{tikzpicture}
\newpage
}
}
\end{document}
请帮忙,谢谢
答案1
我不会在同一个文档中同时使用ifoddpage
和changepage
包,除非首先确保它们兼容,因为它们都提供了至少一个同名的命令(即\checkoddpage
,但请参见下面的注释)。我坚持使用changepage
这里,因为这是我在之前回答这些问题时使用过的。
注意:关于这种兼容性,该包的文档ifoddpage
指出:
包
changepage
和memoir
类还提供了此包的核心功能,即它们定义了\checkoddpage
和 ,\ifoddpage
但没有定义上述其他宏。该包在内部使用此条件,以便允许用户更改奇数页或偶数页的页面布局,这是其主要功能。ifoddpage
[包] 应与该包和类一起使用,但应最后加载以确保 的正确功能\ifoddpageoroneside
。如果使用选项加载,它还会使用标签strict
。
话虽如此,你的文件中真正的问题是,为了让你的\x
和\y
宏产生 〈dimen〉 (固定长度),TeX 需要执行两个扩展步骤,但 Ti钾Z 似乎只对 的可选参数中写的内容执行一项操作\node
。例如,您可以验证如果您自己执行第一步扩展,它是否有效:
\checkoddpage
\begin{tikzpicture}[remember picture,overlay]
\node (n1) [anchor=north west, xshift=\ifoddpage 5cm\else 10cm\fi,
yshift=\ifoddpage 1cm\else -6cm\fi]
at (current page.north west)
{\includegraphics[height=5cm]{example-image-b}};
\end{tikzpicture}
\ifoddpage 5cm\else 10cm\fi
在一个扩展步骤中扩展为5cm
或10cm
,这在 的可选参数中确实有效\node
。但是当您使用 时\x
,您需要一个扩展步骤来获得\ifoddpage 5cm\else 10cm\fi
,然后需要第二个扩展步骤来获得5cm
或 。10cm
。Ti钾Z 解析器似乎没有执行这两个步骤(它怎么能猜出需要多少个步骤?)。
为了妥善解决这个问题,我的建议是:
首先执行命令,例如
\edef
或\pgfmathsetmacro
执行完全扩展的命令前该\node
命令用于定义两个宏\myxshift
和\myyshift
需要仅需一个扩展步骤为当前页面产生所需的结果;然后在选项中使用
\myxshift
和。\myyshift
\node
\documentclass{article}
\usepackage{datatool}
\usepackage{filecontents}
\usepackage[strict]{changepage}
\usepackage{tikz}
\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}
\newcommand*{\x}{\ifoddpage 5cm\else 10cm\fi}
% I changed 6cm to -6cm here, otherwise the image is invisible (above the
% page!).
\newcommand*{\y}{\ifoddpage 1cm\else -6cm\fi}
\begin{document}
\DTLforeach*{mydata1}{\A=Acol,\B=Bcol,\C=Ccol}%
{%
\checkoddpage
\begin{tikzpicture}[remember picture,overlay]
\edef\myxshift{\x} % or \pgfmathsetmacro{\myxshift}{\x}
\edef\myyshift{\y} % or \pgfmathsetmacro{\myyshift}{\y}
\node (n1) [anchor=north west, xshift=\myxshift, yshift=\myyshift]
at (current page.north west)
{\includegraphics[height=5cm]{example-image-b}};
\end{tikzpicture}
\newpage
}
\end{document}