放入图片环境中的宏和 pgfmath

放入图片环境中的宏和 pgfmath

我正在尝试将一些 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){

例如就可以了。

相关内容