- Questo topic ha 2 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 12 anni, 7 mesi fa da .
-
Topic
-
Salve a tutti.Recentemente per comodità mi sono definito un comando [tt]\freccia[/tt] che utilizzo per disegnare lo spostamento di elettroni in formule chimiche. Il comando funziona bene, ma sono incorso in un piccolo problema: non riesco a spostare la freccia come meglio mi aggrada.
Mi spiego meglio: il comando prende come argomenti principali i nomi dei due nodi che deve collegare (nodi che vanno posti nella molecola). Traccia una freccia che li collega (la freccia è -stealth o dimezzata a seconda che al comando si dà un asterisco o no). Vorrei sostanzialmente traslare la freccia lungo una direzione perpendicolare alla congiungente ai due nodi, ma non riesco nel mio intento.
Qualcuno saprebbe consigliarmi cosa devo fare? Non necessariamente codice, anche solo dei link o idee sul da farsi.
Grazie per l’aiuto.
Vi allego un file contente il comando completo.
Di seguito anche un esempio minimo compilabile con il comando interessato. Necessita di due compilazioni.
`
\documentclass{article}
\usepackage{chemfig}
\makeatletter
\input{freccia}
\begin{document}
\chemfig{-@3(-[:60])(=[@2:-60]@1O-[,,,,,draw=none]@4M)}\freccie{*21,*23,*4[-30]1}
\end{document}
`
Il file [tt]freccia.tex[/tt]
`
% freccia parziale sinistra in stile stealth
\pgfarrowsdeclare{left stealth}{left stealth}
{
\pgfutil@tempdima=0.28pt%
\pgfutil@tempdimb=\pgflinewidth%
\ifdim\pgfinnerlinewidth>0pt%
\pgfmathsetlength\pgfutil@tempdimb{.6\pgflinewidth-.4*\pgfinnerlinewidth}%
\fi%
\advance\pgfutil@tempdima by.3\pgfutil@tempdimb%
\pgfarrowsleftextend{+-3\pgfutil@tempdima}
\pgfarrowsrightextend{+5\pgfutil@tempdima}
}
{
\pgfutil@tempdima=0.28pt%
\pgfutil@tempdimb=\pgflinewidth%
\ifdim\pgfinnerlinewidth>0pt%
\pgfmathsetlength\pgfutil@tempdimb{.6\pgflinewidth-.4*\pgfinnerlinewidth}%
\fi%
\advance\pgfutil@tempdima by.3\pgfutil@tempdimb%
\pgfmathsetlength\pgfutil@tempdimb{5\pgfutil@tempdima-\pgflinewidth}
\pgfpathmoveto{\pgfqpoint{5\pgfutil@tempdima}{0pt}}
\pgfpathlineto{\pgfqpoint{-3\pgfutil@tempdima}{4\pgfutil@tempdima}}
\pgfpathlineto{\pgfpointorigin}
\pgfpathlineto{\pgfqpoint{0pt}{-.5\pgflinewidth}}
\pgfpathlineto{\pgfqpoint{\pgfutil@tempdimb}{-.5\pgflinewidth}}
\pgfusepathqfill
}
% freccia parziale destra in stile stealth
\pgfarrowsdeclare{right stealth}{right stealth}
{
\pgfutil@tempdima=0.28pt%
\pgfutil@tempdimb=\pgflinewidth%
\ifdim\pgfinnerlinewidth>0pt%
\pgfmathsetlength\pgfutil@tempdimb{.6\pgflinewidth-.4*\pgfinnerlinewidth}%
\fi%
\advance\pgfutil@tempdima by.3\pgfutil@tempdimb%
\pgfarrowsleftextend{+-3\pgfutil@tempdima}
\pgfarrowsrightextend{+5\pgfutil@tempdima}
}
{
\pgfutil@tempdima=0.28pt%
\pgfutil@tempdimb=\pgflinewidth%
\ifdim\pgfinnerlinewidth>0pt%
\pgfmathsetlength\pgfutil@tempdimb{.6\pgflinewidth-.4*\pgfinnerlinewidth}%
\fi%
\advance\pgfutil@tempdima by.3\pgfutil@tempdimb%
\pgfmathsetlength\pgfutil@tempdimb{5\pgfutil@tempdima-\pgflinewidth}
\pgfpathmoveto{\pgfqpoint{5\pgfutil@tempdima}{0pt}}
\pgfpathlineto{\pgfqpoint{-3\pgfutil@tempdima}{-4\pgfutil@tempdima}}
\pgfpathlineto{\pgfpointorigin}
\pgfpathlineto{\pgfqpoint{0pt}{.5\pgflinewidth}}
\pgfpathlineto{\pgfqpoint{\pgfutil@tempdimb}{.5\pgflinewidth}}
\pgfusepathqfill
}% freccia spostamento elettroni: la versione asteriscata produce una mezza freccia (un solo elettrone). Due argomenti opzionali \freccia*[1]{2}[3]{4}, l'argomento 1 viene passato a \tikz[1]{}, mentre il secondo (posizione 3) viene usato come angolo di uscita dal nodo in posizione 2 (30° default). L'angolo di entrata è calcolato come complementare di tale angolo sfruttando la chiave “bend left”. In base all'angolo, se presente l'asterisco, viene poi scelto il tipo di mezza freccia da disegnare. In posizione 4, infine, il nodo di arrivo. La freccia va dal nodo 2 al nodo 4.
\newdimen\shift@freccia
\tikzset{freccia/.style={-stealth},freccie opt/.style={},shift freccia/.code={\shift@freccia=#1\relax},shift freccia/.default=3em}
\newif{\iffreccia}\newcommand\freccia{\@ifstar{\frecciatrue\freccia@i}{\freccia@i}}
\def\freccia@i{\@testopt\freccia@ii{}}
\def\freccia@ii[#1]#2{\@testopt{\freccia@iii[#1]{#2}}{30}}
\def\freccia@iii[#1]#2[#3]#4{%
\iffreccia
\ifnum#3<0\relax
\tikzstyle{freccia} = [-right stealth]
\else
\tikzstyle{freccia} = [-left stealth]
\fi
\fi
\tikz[overlay,remember picture,shorten <=.3ex,shorten >=.2ex,freccia,freccie opt,#1]{
\draw[cap=round,join=round](#2) to[bend left=#3](#4);}}
% frecce multiple. Ogni singola freccia va inserita come normale argomento di \freccia
\newcommand\freccie[2][]{%
\tikzstyle{freccie opt} = [#1]%
\def\@freccie{#2}%
\@for\next:=\@freccie\do
{\expandafter\freccia\next}}
`
- Devi essere connesso per rispondere a questo topic.