整理一下这个问题的答案:
将 TikZ 图片定位在页面背景上,使其位于双面文档的每一页上
我可以创建我的徽标图片(原子的“艺术”行星模型),该图片随着原子核和电子分别旋转(如果我理解正确的话,是嵌套图片),但是当我的文档超过约 90 页时,它会停止编译并出现“算术溢出”错误。
针对 Fischer 女士的第一个问题(我之所以使用这个问题,是因为我的书中有阿拉伯文和罗马字计数器;遗憾的是,切换后它们会重新启动),有一个参数可以设置最后一页的默认值
\zref@extractdefault{LastPage}{abspage}{1}
我没有用那个代替
\getpagerefnumber{LastPage}
我认为这是因为该语句中存在“@”字符,并且我不知道如何使用正确的语法使用 \makeatletter 和 \makeatother 来修复它。
我愿意接受任何解决方案,即使是那些采用不同方法的解决方案(我也阅读了有关在这个问题中使用包“xassoccnt”的信息:
但我不知道如何设置两个计数器的默认值以使其适用于我的情况。对于编译,我正在使用 luaLaTeX 并且也在学习 lua,所以这也可能是一种方法,但我的知识有限,仍然不够。
接下来我介绍 MWE,考虑到我的(有点)复杂的情况,它相当广泛,但是使用来自所提问题中的 MWE,我可以通过简单地更改默认计数器值来使其工作,但在我的具体情况下,我不知道如何做到这一点。
Mwe 是可编译的,对于“不可编译”状态,请取消注释 \newpage \lipsum 命令。
编辑:MWE 显示的不是“算术溢出”,而是超出尺寸,我希望是类似的。我的原始文档显示“算术溢出”错误。
编辑2:编辑了 MWE 来表示我的问题,编译 MWE 现在会出现错误(至少在我这边)。降低页面数量(删除一些“newpages”和“lipsum”使 MWE 再次可编译)。
非常感谢你的帮助,问候
托马斯
梅威瑟:
\documentclass[12pt,twoside]{book}
\usepackage{lastpage}
\usepackage[lastpage]{zref}
\makeatletter
\zref@newprop*{numpage}{\the\value{page}}
\zref@addprop{main}{abspage}
\makeatother
\usepackage{refcount}
\setrefcountdefault{-1}
\usepackage{eso-pic}
\usepackage{lipsum}
\usepackage{tikz}
\usetikzlibrary{shapes,calc,positioning,shadows.blur,decorations.pathreplacing}
\newcommand{\nuclei}[1]{%
\shade[ball color=white] (#1) circle (.4);
}
\newcommand{\nucleus}{%
\nuclei{0.1,0.3}
\nuclei{0,0}
\nuclei{0.3,0.2}
\nuclei{-0.2,0.1}
\nuclei{-0.1,0.3}
\nuclei{0.2,-0.15}
\nuclei{-0.05,-0.12}
\nuclei{0.17,0.21}
}
%\electron{xwidth,ywidth,rotation angle}
\newcommand{\electron}[3]{%
\draw[rotate = #3](0,0) ellipse (#1 and #2)[color=blue];
\shade[ball color=black] (0,#2)[rotate=#3] circle (.2);
}
\usepackage{changepage}
\strictpagecheck
\newcommand{\MyTikzLogo}{% For a logo drawn with TikZ
\begin{tikzpicture}[remember picture,overlay,scale=1]
\checkoddpage
\ifoddpage
\begin{scope}[shift={([xshift=2cm,yshift=2cm]current page.south west)}, scale=0.25]
\begin{scope}[rotate=360*\the\value{page}/\getpagerefnumber{LastPage}]
\nucleus
\end{scope}
\electron{1.2}{1.4}{260+(360*\the\value{page}/\getpagerefnumber{LastPage})}
\electron{4}{2}{30+(360*\the\value{page}/\getpagerefnumber{LastPage})}
\electron{5}{1}{60+(360*\the\value{page}/\getpagerefnumber{LastPage})}
\electron{5.5}{1.5}{150+(360*\the\value{page}/\getpagerefnumber{LastPage})}
\electron{4.8}{2.25}{80+(360*\the\value{page}/\getpagerefnumber{LastPage})}
\end{scope}
\else
\begin{scope}[shift={([xshift=-2cm,yshift=2cm]current page.south east)}, scale=0.25,local bounding box=test]
\begin{scope}[rotate=360*\the\value{page}/\getpagerefnumber{LastPage}]
\nucleus
\end{scope}
\electron{1.2}{1.4}{260+(360*\the\value{page}/\getpagerefnumber{LastPage})}
\electron{4}{2}{30+(360*\the\value{page}/\getpagerefnumber{LastPage})}
\electron{5}{1}{60+(360*\the\value{page}/\getpagerefnumber{LastPage})}
\electron{5.5}{1.5}{150+(360*\the\value{page}/\getpagerefnumber{LastPage})}
\electron{4.8}{2.25}{80+(360*\the\value{page}/\getpagerefnumber{LastPage})}
\end{scope}
\fi
\end{tikzpicture}
}
\AddToShipoutPictureBG{\MyTikzLogo}
\begin{document}
\section*{Lorem Ipsum}
\pagenumbering{roman}
\lipsum[1-60]
\newpage
\lipsum[1-60]
\newpage
\pagenumbering{arabic}
\lipsum[1-60]
\newpage
\lipsum[1-60]
\newpage
\lipsum[1-60]
\newpage
\lipsum[1-60]
\newpage
\lipsum[1-60]
\newpage
\lipsum[1-60]
\newpage
\lipsum[1-60]
\newpage
\lipsum[1-60]
\newpage
\lipsum[1-60]
\newpage
\lipsum[1-60]
\newpage
\lipsum[1-60]
\newpage
\lipsum[1-60]
\newpage
\end{document}
答案1
改变所有地方(包括旋转)的计算顺序:先除法,后乘法:
360/\getpagerefnumber{LastPage}*\the\value{page}
这将避免数字变得太大 - 由于 pgf 使用内部尺寸,因此无法很好地处理数字。