Me gustaría agregar un fondo relleno al H
carácter de sincronización, que de otro modo no lo tendría (es solo una línea). No quiero usar los caracteres D
o U
que tienen un relleno de fondo, porque también agregan líneas tanto en la parte superior como en la inferior; me gustaría una línea solo en la parte superior. Esto es lo lejos que llegué con el MWE a continuación:
En el metacar Y
, estoy intentando agregar un H
nodo de fondo, luego un nodo (pero \timing
no define una background
capa), luego uso B
el carácter (atrás) para volver a dibujar un nodo H
en la "parte superior", pero eso no funciona. como puede verse, los rellenos todavía están al frente y no están del todo alineados con las líneas de transición.
¿Cómo podría obtener un equivalente a un H
carácter "rellenado" correctamente?
Una pregunta adicional es: ¿cómo podría obtener el \timing
diagrama como un "nodo de ajuste" (con ancho y alto), para poder alinearlo en el centro del nodo maestro? anchor=center
no hace ninguna diferencia (probablemente porque el nodo nombrado tgraph1
no tiene un tamaño o simplemente se refiere al inicio del diagrama)
El MWE:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{fit}
\usepackage{tikz-timing}
% "The modifiers ‘@’ and ‘$’ allow the user to include macros."
\tikztimingmetachar{Y}{H@{\begin{pgfonlayer}{background}}N[rectangle,fill=gray,anchor=north east,minimum width=\xunit,minimum height=\yunit,draw=none,on background layer]{}@{\end{pgfonlayer}}BH}
% \tikzset{timing/u/.style={draw=none}} \tikztimingmetachar{Y}{U{}BH} % doesn't look good
% \tikzset{timing/h/.style={draw=red}} % nope
% %http://tex.stackexchange.com/questions/47704/how-to-establish-node-anchor-like-points-on-a-tikz-rectangle-path
\makeatletter
\tikzset{ %
fitting node/.style={
inner sep=0pt,
fill=none,
draw=none,
reset transform,
fit={(\pgf@pathminx,\pgf@pathminy) (\pgf@pathmaxx,\pgf@pathmaxy)}
},
reset transform/.code={\pgftransformreset},
}
\makeatother
\begin{document}
\begin{tikzpicture}
\node[draw,minimum width=5cm,minimum height=2.5cm] (master) at (0,0) {};
\timing[very thick,
name=tgraph1,
fill=black,
%timing/h/.style={fill=black},%{,cycle},
%fitting node, % crashes w/ "! Dimension too large."
anchor=center,
timing/yunit=1cm,
]
at (master.center)
{ LLL YYL HHH HHL };
\end{tikzpicture}
\end{document}
Respuesta1
Bueno, todavía no sé sobre el tamaño y la posición del nodo, espero que alguien me ayude con eso, pero logré algo con respecto al relleno del fondo, husmeando en kpsewhich tikz-timing.sty
. Básicamente, hay algunas macros que manejan transiciones allí y, por alguna razón, solo aceptarán \tikztimingdef{HL}
un fill
parámetro, y parece estar funcionando correctamente, pero solo siempre que su secuencia de tiempo comience con an L
y termine con an L
. Entonces, finalmente, termino con esto:
... que es lo que quería con respecto al relleno de fondo; Desafortunadamente, eso cambiará todo el comportamiento de H
los personajes, no solo cada diagrama de tiempo. Aquí está el MWE (como un poco de trivia, usé esto paraTerminología: ¿significado (y origen) correcto de PCM? - Desbordamiento de pila):
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{fit}
\usepackage{tikz-timing}
% to have the H character filled:
% (( note - if { LL LH HL H 0.9H 0.1L}:
% must split last H to 0.9H 0.1 (so to
% end on L, without drawing beyond range)
% else the fill of H is not good. ))
\tikztimingdef{HL}{
-- ++(\slope,-\height)
[fill=gray] \tikztiminguse{HH}{#1-\slope}
}
\begin{document}
\begin{tikzpicture}
\node[draw,minimum width=5cm,minimum height=2.5cm] (master) at (0,0) {};
\timing[very thick,
name=tgraph1,
fill=black,
%timing/h/.style={fill=black},%{,cycle},
%fitting node, % crashes w/ "! Dimension too large."
anchor=center,
timing/yunit=1cm,
]
at (master.center)
{ LLL HHL HHH HHL };
\end{tikzpicture}
\end{document}