TikZ 中一个椭圆形包围着一段*长文本*

TikZ 中一个椭圆形包围着一段*长文本*

我需要将长文本放在椭圆中,如下所示: 在此处输入图片描述

我尝试将简单的文本放在椭圆内,但不起作用(文本溢出椭圆)。所以我想我需要在文本周围放一个椭圆。

我在 METAFUN 中有这段代码,但我想将其移植到 TikZ:

% cover in METAFUN
\startuseMPgraphic{cover}
StartPage ;
fill Page withcolor white ;
pickup pencircle scaled 2mm ;
path p ; p := tensecircle(1cm,.75cm,.15cm) xsized(PaperWidth-2cm) ;
draw p shifted center Page withcolor .720green ;
StopPage ;
\stopuseMPgraphic
\defineoverlay[cover][\useMPgraphic{cover}]

% The first page
\starttext
\setupbackgrounds[page][background=cover]
\startstandardmakeup
{\raggedcenter
\vfill\startcolor[middleblue]{\switchtobodyfont[30pt] Title\par}\stopcolor
\blank[2*big]
\ \ \ \ \thinrule \ \ \ \
\blank[big]
{\switchtobodyfont[16pt]\sc Subtitle with long explanation\par}
\vfill
{\switchtobodyfont[14pt]{\sc Author}}\par}


\stopstandardmakeup
\setupbackgrounds[page][background=]
\stoptext

它必须能够处理非常长的文本。不良行为的示例如下: 在此处输入图片描述 在此处输入图片描述

答案1

之前,这个答案包含完整的形状定义。它已移至ext.shapes.superellipse我的tikz-ext包裹并且可以简单地通过

\usetikzlibrary{ext.shapes.superellipse}

A超椭圆形状

键:

  • superellipse x exponent
  • superellipse y exponent
  • superellipse step(绘图循环的步宽)和
  • superellipse exponent(同时设置X指数)。

找到边界上的锚intersections需要花一点时间。

半径的计算与形状的计算相同,ellipse形状需要将值乘以 √2。为了在一页上容纳大量文本,我们使用的文本宽度为,1/√2 * \linewidth并从中减去inner xseps 和\pgflinewidth(这样形状的线条就不会突出到边距中)。

text width=.7071067\linewidth-\pgfkeysvalueof{/pgf/inner xsep}*2-\pgflinewidth

我还设置了align=flush center居中文本不是用连字符。

在节点内部,尺寸\linewidth是与一样长text width,因此我们可以直接将其用于水平\rule

尽管如此,整体现在与我仍然会将其放入不缩进行且作为其自己的段落的环境中tikzpicture一样宽。\linewidthcenter

序言的末尾有一些命令用于显示页面的垂直线。否则就不需要这些命令了。

代码

\documentclass{article}
\usepackage{tikz}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepgflibrary{ext.shapes.superellipse}

% Begin: adjust frame of geometry
\usepackage[pass,showframe]{geometry}\usepackage{etoolbox}
\makeatletter
\preto\Gm@vrule{\color{red}}\let\Gm@hrule\@empty\let\Gm@hruled\@empty
\makeatother
% Begin: end frame of geometry

\begin{document}
\begin{center}
\tikz\node[draw=green, line width=2pt, superellipse, align=flush center,
  text width=.7071067\linewidth-\pgfkeysvalueof{/pgf/inner xsep}*2-\pgflinewidth
]{
  {\Huge\color{blue}Apunts de Matemàtiques
    per a l'Accés a la UIB per a majors de 25 anys\par}
  {\color{gray}\rule[.5ex]{\linewidth}{1pt}\par}
  {Teoria i exercicis per a la preparació de les
    ``Proves d'accés a la Universitat de les Illes Balears per a majors de
    25~anys i menors de 40~anys'' de l'assignatura de Matemàtiques\par}};
\end{center}
\end{document}

输出

在此处输入图片描述

答案2

\documentclass[tikz, border=1cm]{standalone}
\begin{document}
\begin{tikzpicture}[
declare function={
  sx(\t)= a*cos(\t r)^(2/n);
  sy(\t)= b*sin(\t r)^(2/n);
  a=5;
  b=4;
  n=2.5;
}]
\draw[green!80!black, line width=3pt, variable=\t, domain=0:pi/2] plot({sx(\t)},{sy(\t)}) -- plot({-sx(pi/2-\t)},{sy(pi/2-\t)}) -- plot({-sx(\t)},{-sy(\t)}) -- plot({sx(pi/2-\t)},{-sy(pi/2-\t)}) -- cycle;
\node[blue, yshift=0.6cm]{\Large Title};
\node[yshift=-0.5cm]{Subtitle with long explanation};
\draw (-4,0) -- (4,0);
\end{tikzpicture}
\end{document}

带文本的绿色超椭圆

\documentclass[tikz, border=1cm]{standalone}
\begin{document}
\begin{tikzpicture}[
declare function={
  sx(\t)= a*cos(\t r)^(2/n);
  sy(\t)= b*sin(\t r)^(2/n);
  a=15;
  b=10;
  n=2.2;
}]
\draw[green!80!black, line width=4pt, variable=\t, domain=0:pi/2] plot ({sx(\t)},{sy(\t)}) -- plot({-sx(pi/2-\t)},{sy(pi/2-\t)}) -- plot({-sx(\t)},{-sy(\t)}) -- plot({sx(pi/2-\t)},{-sy(pi/2-\t)}) -- cycle;
\node[blue, yshift=0.8cm]{\Huge Apunts de Matemàtiques per a l'Accés a la UIB per a majors de 25 anys};
\node[yshift=-0.5cm]{Teoria i exercicis per a la preparació de les ``Proves d'accés a la Universitat de les Illes Balears per a majors de 25 anys i menors de 40 anys'' de l'assignatura de Matemàtiques};
\draw (-14,0) -- (14,0);
\end{tikzpicture}
\end{document}

带长文本的超级椭圆

相关内容