![放入图片环境中的宏和 pgfmath](https://linux22.com/image/261391/%E6%94%BE%E5%85%A5%E5%9B%BE%E7%89%87%E7%8E%AF%E5%A2%83%E4%B8%AD%E7%9A%84%E5%AE%8F%E5%92%8C%20pgfmath.png)
我正在尝试将一些 TikZ 图片放入 Beamer 幻灯片中以增强可读性。幻灯片上 TikZ 图片的位置取决于前面有多少文本。由于会有很多 TikZ 图片,并且如果我更改幻灯片顶部的文本,则每个图片都必须进行相同的调整,因此我尝试制作一个宏,以避免每次更改文本时都必须手动调整每个 TikZ 图片的位置。
考虑以下代码:
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\pgfmathsetmacro{\yoff}{5}
\newcommand{\print}[1]{\pgfmathparse{#1}\pgfmathresult}
\begin{frame}
\frametitle{Testing}
\begin{itemize}
\item Test picture
\begin{picture}(0, 0)
\put(0,\print{8+\yoff}){
\tikz \draw[red,thick] (0,0) ellipse (5pt and 5pt);
}
\end{picture}
\end{itemize}
\end{frame}
\end{document}
这里我收到以下错误:
!缺失数字,视为零。
\begingroup
l.17 \end{框架}
但是,将宏放在\frametitle
幻灯片内可以按预期工作(没有错误):
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\pgfmathsetmacro{\yoff}{5}
\newcommand{\print}[1]{\pgfmathparse{#1}\pgfmathresult}
\begin{frame}
\frametitle{Testing \print{8+\yoff}}
\begin{itemize}
\item Test picture
\begin{picture}(0, 0)
\put(0,\yoff){
\tikz \draw[red,thick] (0,0) ellipse (5pt and 5pt);
}
\end{picture}
\end{itemize}
\end{frame}
\end{document}
答案1
\put
需要一些扩展到某个数字:
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\def\yoff{5}
\newcommand{\print}[1]{\pgfmathparse{#1}\pgfmathresult}
\begin{frame}
\frametitle{Testing}
\begin{itemize}
\item Test picture
\begin{picture}(0, 0)
\put(0,\numexpr8+\yoff\relax){
\tikz \draw[red,thick] (0,0) ellipse (5pt and 5pt);
}
\end{picture}
\end{itemize}
\end{frame}
\end{document}
如果要使用非整数值的十进制算术,则需要添加pt
使用 dimen 算术,然后删除pt
\put(0,\csname strip@pt\endcsname\dimexpr8pt+\yoff pt\relax){
例如就可以了。