Estoy dibujando algunos cobordismos simples con tikz y tqft. Me gustaría indicar la orientación de los círculos entrantes y salientes poniéndoles puntas de flecha. ¿Existe una forma sencilla de hacerlo?
El código que estoy usando es, por ejemplo
\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 produce (aunque en mejor resolución):
El tipo de flecha que me gustaría tener es como en esta imagen (solo la parte verde claro)
Respuesta1
He subido una nueva versión detqft
a CTAN (7 de abril de 2014). Una vez que esto se propague a través del sistema, el siguiente código funcionará y colocará flechas en los arcos superiores de los círculos límite.
\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}
Tenga en cuenta que esto requiere TikZ3.0 (o posterior). Además, la forma de cargar el paquete ahora es como una biblioteca TikZ, no como un archivo de estilo separado.
Es posible que desees flechas más grandes, pero ese es un tema aparte.
Respuesta2
RESPUESTA REVISADA (consulte la respuesta original a continuación para obtener una descripción del 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}
Y como me esforcé por parametrizarlo para permitir sintaxis como \LeftSideArrow\setoutside\uppointing{\fig}
, muestro ese código aquí:
\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}
RESPUESTA ORIGINAL (antes de que OP publique una imagen)
Aquí trabajo afuera tikz
para establecer las flechas. Yo en cambio uso \stackinset
. Primero muestro varios casos de uso utilizando la \stackinset
sintaxis sin formato. Pero si esto fuera algo común, el uso podría parametrizarse, como muestro al final de mi 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}
Si la tikz
imagen se usa una y otra vez, se ahorra tiempo si se hace una vez y se encuadra. Por lo tanto, en ese caso, \def\fig{...}
en mi MWE podría ser reemplazado 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}
Luego, \fig
estaría disponible como una caja ya preparada, que contendría el contenido de \figraw
.
Si uno quisiera un estilo de flecha diferente, los glifos de flecha sigilosa podrían importarse desde mathabx
, insertando esto en su 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}
Entonces, usar \varleftarrow
and \varrightarrow
, en lugar de \leftarrow
and \rightarrow
, produciría, por ejemplo, algo como esto:
Respuesta3
Aquí hay una solución dentro de tikz y tqft. Hace uso de los nodos proporcionados en el paquete tqft: todo el cobordismo es un nodo llamado "a". Tiene subnodos "a.límite entrante n" donde n enumera los círculos límite entrantes y de manera similar para los salientes.
Lamentablemente el desplazamiento se encuentra a mano y al no tener idea del funcionamiento interno del tikz no sé cómo responde al escalado ni nada. Un buen toque definitivamente sería tener una opción en el paquete tqft que coloque estas pequeñas flechas en los 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}