用圆角矩形设置投影机背景

用圆角矩形设置投影机背景

我正在尝试为我的 Beamer 主题设置背景。我想要一个带有圆角东北角的白色矩形。我使用了提供的代码。我的外部主题如下所示:

    \mode<presentation>

    \definecolor{mygray}{RGB}{240,240,240}

    \tikzset{
      rectangle with rounded corners north west/.initial=4pt,
      rectangle with rounded corners south west/.initial=4pt,
      rectangle with rounded corners north east/.initial=4pt,
      rectangle with rounded corners south east/.initial=4pt,
    }


    \makeatletter
    \pgfdeclareshape{rectangle with rounded corners}{
      \inheritanchorborder[from=rectangle]
      \savedmacro{\neoffset}{
        \pgfkeysgetvalue{/tikz/rectangle with rounded corners north east}{\pgf@rectc}
        \let\neoffset\pgf@rectc
      }
      \savedmacro{\nwoffset}{
        \pgfkeysgetvalue{/tikz/rectangle with rounded corners north west}{\pgf@rectc}
        \let\nwoffset\pgf@rectc
      }
      \savedmacro{\seoffset}{
        \pgfkeysgetvalue{/tikz/rectangle with rounded corners south east}{\pgf@rectc}
        \let\seoffset\pgf@rectc
      }
      \savedmacro{\swoffset}{
        \pgfkeysgetvalue{/tikz/rectangle with rounded corners south west}{\pgf@rectc}
        \let\swoffset\pgf@rectc
      }
      \savedanchor{\north}{
        \pgf@y=.5\ht\pgfnodeparttextbox
        \pgf@x=0pt
        \setlength{\pgf@ya}{\pgfshapeminheight}
        \ifdim\pgf@y<.5\pgf@ya
          \pgf@y=.5\pgf@ya
        \fi
      }
      \savedanchor{\south}{
        \pgf@y=-.5\ht\pgfnodeparttextbox
        \pgf@x=0pt
        \setlength{\pgf@ya}{\pgfshapeminheight}
        \ifdim\pgf@y>-.5\pgf@ya
          \pgf@y=-.5\pgf@ya
        \fi
      }
      \savedanchor{\east}{
        \pgf@y=0pt
        \pgf@x=.5\wd\pgfnodeparttextbox
        \addtolength{\pgf@x}{2ex}
        \setlength{\pgf@xa}{\pgfshapeminwidth}
        \ifdim\pgf@x<.5\pgf@xa
          \pgf@x=.5\pgf@xa
        \fi
      }
      \savedanchor{\west}{
        \pgf@y=0pt
        \pgf@x=-.5\wd\pgfnodeparttextbox
        \addtolength{\pgf@x}{-2ex}
        \setlength{\pgf@xa}{\pgfshapeminwidth}
        \ifdim\pgf@x>-.5\pgf@xa
          \pgf@x=-.5\pgf@xa
        \fi
      }
      \savedanchor{\northeast}{
        \pgf@y=.5\ht\pgfnodeparttextbox % height of the box
        \pgf@x=.5\wd\pgfnodeparttextbox % width of the box
        \addtolength{\pgf@x}{2ex}
        \setlength{\pgf@xa}{\pgfshapeminwidth}
        \ifdim\pgf@x<.5\pgf@xa
          \pgf@x=.5\pgf@xa
        \fi
        \setlength{\pgf@ya}{\pgfshapeminheight}
        \ifdim\pgf@y<.5\pgf@ya
          \pgf@y=.5\pgf@ya
        \fi
      }
      \savedanchor{\southwest}{
        \pgf@y=-.5\ht\pgfnodeparttextbox
        \pgf@x=-.5\wd\pgfnodeparttextbox
        \addtolength{\pgf@x}{-2ex}
    %     \pgf@x=0pt
        \setlength{\pgf@xa}{\pgfshapeminwidth}
        \ifdim\pgf@x>-.5\pgf@xa
          \pgf@x=-.5\pgf@xa
        \fi
        \setlength{\pgf@ya}{\pgfshapeminheight}
        \ifdim\pgf@y>-.5\pgf@ya
          \pgf@y=-.5\pgf@ya
        \fi
      }
      \anchor{text}{%
        \northeast%
        \pgf@x=-.5\wd\pgfnodeparttextbox%
        \pgfmathsetlength{\pgf@y}{-.5ex}
      }
      \anchor{north east}{
        \northeast
        \pgfmathsetmacro{\nw}{(1-sin(45))*\neoffset}
        \addtolength{\pgf@x}{-\nw pt}
        \addtolength{\pgf@y}{-\nw pt}
      }
      \anchor{center}{
        \pgf@x=0pt
        \pgf@y=0pt
      }
      \anchor{south west}{
        \southwest
        \pgfmathsetmacro{\nw}{(1-sin(45))*\swoffset}
        \addtolength{\pgf@x}{\nw pt}
        \addtolength{\pgf@y}{\nw pt}
      }
      \anchor{north west}{
        \northeast
        \pgfmathsetmacro{\temp@x}{\pgf@x}
        \southwest
        \pgfmathsetmacro{\temp@xtwo}{\pgf@x}
        \northeast
        \pgfmathsetmacro{\xdiff}{\temp@x-\temp@xtwo}
        \def\pgf@xa{\pgf@x-\xdiff}
        \
        \pgfmathsetmacro{\nw}{(1-sin(45))*\nwoffset}
        \def\pgf@xaa{\pgf@xa+\nw}
        \def\pgf@yaa{\pgf@y-\nw}
        \pgfpoint{\pgf@xaa}{\pgf@yaa}
      }
      \anchor{south east}{
        \southwest
        \pgfmathsetmacro{\temp@x}{\pgf@x}
        \northeast
        \pgfmathsetmacro{\temp@xtwo}{\pgf@x}
        \southwest
        \pgfmathsetmacro{\xdiff}{\temp@x-\temp@xtwo}
        \def\pgf@xa{\pgf@x-\xdiff}
        \pgfmathsetmacro{\nw}{(1-sin(45))*\seoffset}
        \def\pgf@xaa{\pgf@xa-\nw}
        \def\pgf@yaa{\pgf@y+\nw}
        \pgfpoint{\pgf@xaa}{\pgf@yaa}
      }
      \anchor{south}{\south}
      \anchor{north}{\north}
      \anchor{east}{\east}
      \anchor{west}{\west}
      \backgroundpath{% this is new
        % store lower right in xa/ya and upper right in xb/yb
        \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
        \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
        % construct main path
        \pgfkeysgetvalue{/tikz/rectangle with rounded corners north west}{\pgf@rectc}
        \pgfsetcornersarced{\pgfpoint{\pgf@rectc}{\pgf@rectc}}
        \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
        \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}}
        \pgfkeysgetvalue{/tikz/rectangle with rounded corners north east}{\pgf@rectc}
        \pgfsetcornersarced{\pgfpoint{\pgf@rectc}{\pgf@rectc}}
        \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}}
        \pgfkeysgetvalue{/tikz/rectangle with rounded corners south east}{\pgf@rectc}
        \pgfsetcornersarced{\pgfpoint{\pgf@rectc}{\pgf@rectc}}
        \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@ya}}
        \pgfkeysgetvalue{/tikz/rectangle with rounded corners south west}{\pgf@rectc}
        \pgfsetcornersarced{\pgfpoint{\pgf@rectc}{\pgf@rectc}}
        \pgfpathclose
     }
    }
    \makeatother


    \setbeamertemplate{background}{
      \begin{tikzpicture}
      \useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight);
      \fill[color=mygray] (0,0) rectangle (\the\paperwidth,\the\paperheight);
       \node[
      fill = white,
      shape = rectangle with rounded corners,
      minimum height=  9.4 cm,
      minimum width =  12.6 cm,
      rectangle with rounded corners north west = 0pt,
      rectangle with rounded corners south west = 0pt,
      rectangle with rounded corners north east = 5pt,
      rectangle with rounded corners south east = 0pt,
     ](0,0) {};

      \end{tikzpicture}
    }
    \mode<all>

因此,不要得到这样的背景: 在此处输入图片描述 在此处输入图片描述

tex 文档如下所示:

    \documentclass{beamer}

    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}

    \title{There Is No Largest Prime Number}
    \date[ISPN ’80]{27th International Symposium of Prime Numbers}
    \author[Euclid]{Euclid of Alexandria \texttt{[email protected]}}

    \usetheme{mytheme}

    \begin{document}

        \begin{frame}

        \end{frame}

    \end{document}

和 beamerthememytheme.sty:

    \mode<presentation>

    % Required packages
    \RequirePackage{tikz}
    \RequirePackage{graphicx}

    % Settings
    \useinnertheme{mytheme}
    \useoutertheme{mytheme}
    \usecolortheme{mytheme}

    % Presentation 
    \beamertemplatenavigationsymbolsempty
    \setbeamertemplate{blocks}[rounded][shadow=false]

    \mode<all>

答案1

我认为问题在于 的定义northeast,尤其是在pgf@x=.5\pgf@xa和中\pgf@y=.5\pgf@ya,因为这只占了页面的一半。因此,请尝试不使用.5

\savedanchor{\northeast}{
    \pgf@y=.5\ht\pgfnodeparttextbox % height of the box
    \pgf@x=.5\wd\pgfnodeparttextbox % width of the box
    \addtolength{\pgf@x}{2ex}
    \setlength{\pgf@xa}{\pgfshapeminwidth}
    \ifdim\pgf@x<.5\pgf@xa
    \pgf@x=\pgf@xa
    \fi
    \setlength{\pgf@ya}{\pgfshapeminheight}
    \ifdim\pgf@y<.5\pgf@ya
    \pgf@y=\pgf@ya
    \fi
}

在此处输入图片描述

相关内容