对齐两个半圆

对齐两个半圆

我正在\item用彩色圆圈制作命令。一个命令需要两种颜色,即两个半圆形成一个圆圈。

我目前有这个,它将两个圆圈叠加在一起:

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\newcommand*\reditem{\item[{\tikz[baseline=-3]{\node[shape=circle,draw,fill=red,inner sep=4pt] (char) {};}}]}
\newcommand*\redblueitem{\item[{\tikz[baseline=-3]{
  \node[shape=semicircle,rotate=90,fill=red,inner sep=3pt](char) {}; 
  \node[shape=semicircle,rotate=270,fill=blue,inner sep=3pt] (char) {};}
  }]}

\begin{document}
\begin{frame}
\begin{itemize}
  \reditem test red
  \redblueitem test redblue
\end{itemize}
\end{frame}
\end{document}

我该如何调整它以形成一个漂亮的双色圆圈?

答案1

您需要使用它们的south锚点(位于直边的中间)将它们对齐,并设置它们line width=0pt以使其没有间隙:

\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\begin{document}
\newcommand*\redblueitem{\item[{\tikz[baseline=-3]{
  \node[shape=semicircle,rotate=90,fill=red,inner sep=3pt, anchor=south, outer sep=0pt](char) {}; 
  \node[shape=semicircle,rotate=270,fill=blue,inner sep=3pt, anchor=south, outer sep=0pt] (char) {};}
  }]}

  \begin{itemize}
  \redblueitem Test
  \end{itemize}
\end{document}

实现此目的的更简单方法可能是使用\paths 而不是节点。这里有一种方法,我定义了一个包含所需圆半径的宏,因此您可以轻松调整圆的大小:

\documentclass{beamer}
\usepackage{tikz}

\def\rubensradius{4pt}

\newcommand*\reditem{\item[{\tikz [baseline=-0.8*\rubensradius]{\path [fill=red, draw=blue] (0,0) circle [radius=\rubensradius-0.5\pgflinewidth];}}]}
\newcommand*\redblueitem{\item[{\tikz [baseline=-0.8*\rubensradius]{
    \path [fill=red] (0,\rubensradius) arc [start angle=90, delta angle=180, radius=\rubensradius];
    \path [fill=blue] (0,-\rubensradius) arc [start angle=270, delta angle=180, radius=\rubensradius];
}}]}

\begin{document}
\begin{frame}
\begin{itemize}
  \reditem test red
  \redblueitem test redblue
\end{itemize}
\end{frame}
\end{document}

答案2

您可以使用calctikzlibrary:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{shapes,calc}


\newcommand*\redblueitem{\item[{\tikz[baseline=-3]{
\node[shape=semicircle,rotate=90,fill=red,inner sep=3pt] (char) {}; 
\node[shape=semicircle,rotate=270,fill=blue,inner sep=3pt] at ($(char)+(6pt,0)$) {};}
}]}

\begin{document}

\begin{itemize}
\redblueitem something
\end{itemize}

\end{document}

或者您可以在最低级别(PGF)工作:

\documentclass{article}

\usepackage{tikz}

\newcommand*\RBitem{\item[{\tikz[baseline=-3]
\def\r{5pt}
\pgfpathmoveto{\pgfpoint{0pt}{0pt}}
\pgfpathlineto{\pgfpoint{0pt}{\r}}
\pgfpatharc{90}{270}{\r}
\pgfsetfillcolor{red}
\pgfusepath{fill}
\pgfpathmoveto{\pgfpoint{0pt}{0pt}}
\pgfpathlineto{\pgfpoint{0pt}{\r}}
\pgfpatharc{90}{-90}{\r}
\pgfsetfillcolor{blue}
\pgfusepath{fill};}]}

\begin{document}

\begin{itemize}
\RBitem something
\end{itemize}

\end{document}

输出“相同”:

在此处输入图片描述

相关内容