Estou desenhando alguns cobordismos simples com tikz e tqft. Gostaria de indicar a orientação dos círculos de entrada e saída colocando pontas de seta neles. Existe uma maneira simples de fazer isso?
O código que estou usando é, por exemplo
\documentclass[varwidth=true, border=2pt]{standalone}
\usepackage{tikz}
\usepackage{tqft}
\begin{tikzpicture}[tqft/flow=east]
\node[tqft, incoming boundary components=1,
outgoing boundary components=1,draw, boundary lower style={dashed,draw}] at (0,0) {};
\end{tikzpicture}
que produz (embora em melhor resolução):
O tipo de seta que eu gostaria de ter é como nesta foto (apenas a parte verde clara)
Responder1
Eu carreguei uma nova versão dotqft
para CTAN (7 de abril de 2014). Depois que isso se propagar pelo sistema, o código a seguir funcionará e colocará setas nos arcos superiores dos círculos de limite.
\documentclass{article}
%\url{http://tex.stackexchange.com/q/166698/86}
\usepackage{tikz}
\usetikzlibrary{calc,tqft,decorations.markings}
\begin{document}
\begin{tikzpicture}[every tqft/.style={transform shape},rotate=90]
\pic[
tqft,
incoming boundary components=1,
outgoing boundary components=1,
draw,
every lower boundary component/.style={draw},
every incoming lower boundary component/.style={dashed,draw},
every outgoing upper boundary component/.style={
decorate,
decoration={
markings,
mark=at position .5 with {\arrow{>}},
},
},
every incoming upper boundary component/.style={
decorate,
decoration={
markings,
mark=at position .5 with {\arrowreversed{>}},
},
},
name=a
];
\end{tikzpicture}
\end{document}
Observe que isso requer TikZ3.0 (ou posterior). Além disso, a forma de carregar o pacote agora é como uma biblioteca TikZ, não como um arquivo de estilo separado.
Você pode querer flechas maiores, mas isso é uma questão separada.
Responder2
RESPOSTA REVISADA (veja a resposta original abaixo para descrição do método)
\documentclass{article}
\usepackage{tikz, tqft, graphicx, stackengine}
\parskip 1ex
\begin{document}
\def\figraw{\begin{tikzpicture}[tqft/flow=east]
\node[tqft, incoming boundary components=1,
outgoing boundary components=1,draw, boundary lower style={dashed,draw}] at (0,0) {};
\end{tikzpicture}}
\savestack{\fig}{\figraw}
\def\OUT{-1.60pt}
\def\IN{8.03pt}
\def\WW{1.5pt}
\def\VV{-1.5pt}
\def\VEE{\scalebox{0.6}{$\vee$}}
\def\WEDGE{\scalebox{0.6}{$\wedge$}}
\stackinset{r}{\IN}{c}{\VV}{\VEE}{\fig}\par
\stackinset{l}{\OUT}{c}{\VV}{\VEE}{%
\stackinset{r}{\IN}{c}{\WW}{\WEDGE}{%
\fig%
}}\par
\stackinset{l}{\OUT}{c}{\WW}{\WEDGE}{%
\stackinset{r}{\IN}{c}{\VV}{\VEE}{%
\fig%
}}\par
\end{document}
E como me esforcei para parametrizá-lo, para permitir sintaxe como \LeftSideArrow\setoutside\uppointing{\fig}
, mostro esse código aqui:
\documentclass{article}
\usepackage{tikz, tqft, graphicx, stackengine}
\parskip 1ex
%
\def\OUT{-1.60pt}
\def\IN{8.03pt}
\def\WW{1.5pt}
\def\VV{-1.5pt}
\def\VEE{\scalebox{0.6}{$\vee$}}
\def\WEDGE{\scalebox{0.6}{$\wedge$}}
%
\def\LeftSideArrowHelper{\stackinset{l}}
\def\RightSideArrowHelper{\stackinset{r}}
\def\setinside{\IN}
\def\setoutside{\OUT}
\def\uppointing{{c}{\WW}{\WEDGE}}
\def\downpointing{{c}{\VV}{\VEE}}
\def\LeftSideArrow{\expandafter\expandafter\expandafter\LeftSideArrowHelper\expandafter}
\def\RightSideArrow{\expandafter\expandafter\expandafter\RightSideArrowHelper\expandafter}
\begin{document}
\def\figraw{\begin{tikzpicture}[tqft/flow=east]
\node[tqft, incoming boundary components=1,
outgoing boundary components=1,draw, boundary lower style={dashed,draw}] at (0,0) {};
\end{tikzpicture}}
\savestack{\fig}{\figraw}
\LeftSideArrow\setoutside\uppointing{%
\RightSideArrow\setinside\downpointing{%
\fig}}
\end{document}
RESPOSTA ORIGINAL (antes de OP postar uma imagem)
Aqui eu trabalho fora tikz
para estabelecer as flechas. Em vez disso, eu uso \stackinset
. Primeiro mostro vários casos de uso usando a \stackinset
sintaxe bruta. Mas se isso fosse uma ocorrência comum, o uso poderia ser parametrizado, como mostro no final do meu MWE.
\documentclass{article}
\usepackage{tikz, tqft, graphicx, stackengine}
\parskip 1ex
\begin{document}
\def\fig{\begin{tikzpicture}[tqft/flow=east]
\node[tqft, incoming boundary components=1,
outgoing boundary components=1,draw, boundary lower style={dashed,draw}] at (0,0) {};
\end{tikzpicture}}
\stackinset{r}{-18pt}{c}{-1.8pt}{\scalebox{2.5}{$\rightarrow$}}{\fig}\par
\stackinset{r}{-18pt}{c}{-1.8pt}{\scalebox{2.5}{$\leftarrow$}}{\fig}\par
\stackinset{r}{3pt}{c}{-1.8pt}{\scalebox{2.5}{$\leftarrow$}}{\fig}\par
\stackinset{l}{3pt}{c}{-1.8pt}{\scalebox{2.5}{$\leftarrow$}}{%
\stackinset{r}{-18pt}{c}{-1.8pt}{\scalebox{2.5}{$\leftarrow$}}{%
\fig%
}}\par
\stackinset{l}{-18pt}{c}{-1.8pt}{\scalebox{2.5}{$\rightarrow$}}{%
\stackinset{r}{-18pt}{c}{-1.8pt}{\scalebox{2.5}{$\rightarrow$}}{%
\fig%
}}\par
If this element were used often, it could be parameterized:
\def\LeftArrow{{\scalebox{2.5}{$\leftarrow$}}}
\def\RightArrow{{\scalebox{2.5}{$\rightarrow$}}}
\edef\insideleft{{l}{3pt}{c}{-1.8pt}}
\edef\outsideleft{{l}{-18pt}{c}{-1.8pt}}
\edef\insideright{{r}{3pt}{c}{-1.8pt}}
\edef\outsideright{{r}{-18pt}{c}{-1.8pt}}
\def\MakeArrow{\expandafter\stackinset}
\MakeArrow\outsideleft\LeftArrow{%
\MakeArrow\outsideright\RightArrow{%
\fig%
}}
\end{document}
Se a tikz
imagem for usada repetidamente, você economiza tempo ao criá-la uma vez e encaixá-la. Assim, nesse caso, o \def\fig{...}
no meu MWE poderia ser substituído por
\def\figraw{\begin{tikzpicture}[tqft/flow=east]
\node[tqft, incoming boundary components=1,
outgoing boundary components=1,draw, boundary lower style={dashed,draw}] at (0,0) {};
\end{tikzpicture}}
\savestack{\fig}{\figraw}
Então, \fig
estaria disponível como uma caixa pronta, contendo o conteúdo do arquivo \figraw
.
Se alguém quisesse um estilo de seta diferente, os glifos de seta furtiva poderiam ser importados de mathabx
, inserindo isto em seu preâmbulo:
% Setup the matha font (from mathabx.sty)
\DeclareFontFamily{U}{matha}{\hyphenchar\font45}
\DeclareFontShape{U}{matha}{m}{n}{
<5> <6> <7> <8> <9> <10> gen * matha
<10.95> matha10 <12> <14.4> <17.28> <20.74> <24.88> matha12
}{}
\DeclareSymbolFont{matha}{U}{matha}{m}{n}
% Define a subset character from that font (from mathabx.dcl)
% to completely replace the \subset character, you can replace
% \varsubset with \subset
\DeclareMathSymbol{\varleftarrow}{3}{matha}{"D0}
\DeclareMathSymbol{\varrightarrow}{3}{matha}{"D1}
Então, usar \varleftarrow
and \varrightarrow
, em vez de \leftarrow
and \rightarrow
, produziria, por exemplo, algo assim:
Responder3
Aqui está uma solução dentro do tikz e do tqft. Ele faz uso dos nós fornecidos no pacote tqft: Todo o cobordismo é um nó chamado "a". Possui subnós "a.incoming border n", onde n enumera os círculos de fronteira de entrada e da mesma forma para os de saída.
Infelizmente o deslocamento é encontrado manualmente e não tendo ideia do funcionamento interno do tikz, não sei como ele responde ao dimensionamento ou algo assim. Um toque legal seria definitivamente ter uma opção no pacote tqft que colocasse essas pequenas setas nos círculos.
\begin{tikzpicture}[tqft/flow=east]
\node[tqft, incoming boundary components=1,
outgoing boundary components=1,draw, boundary lower style={dashed,draw}](a) at (0,0) {};
\node at ($(a.incoming boundary 1)+(-0.166,0)$) {$\wedge$};
\node at ($(a.outgoing boundary 1)+(-0.172,0)$) {$\vee$};
\end{tikzpicture}