Фоновая заливка для H (высокого) символа синхронизации и размер диаграммы для tikz-timing

Фоновая заливка для H (высокого) символа синхронизации и размер диаграммы для tikz-timing

Я хотел бы добавить заполненный фон к Hсимволу синхронизации, у которого его нет (это просто линия). Я не хочу использовать символы Dили U, у которых есть фоновая заливка, потому что они также добавляют линии и сверху, и снизу - я хотел бы линию только сверху. Вот как далеко я продвинулся с MWE ниже:

тест1.png

В metachar Yя пытаюсь добавить H, затем фоновый узел (но \timingне определяет backgroundслой), затем использовать Bсимвол (back), чтобы снова перерисовать a Hна «сверху», но это не работает — как можно видеть, заливки все еще находятся спереди и не совсем выровнены с линиями перехода.

Как мне получить эквивалент правильно «заполненного» Hсимвола?

Дополнительный вопрос - как мне получить диаграмму \timingв качестве "подходящего узла" (с шириной и высотой), чтобы я мог выровнять ее по центру в главном узле? anchor=centerне имеет никакого значения (вероятно, потому что либо названный узел tgraph1не имеет размера, либо он просто ссылается на начало диаграммы)

МВЭ:

\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}

решение1

Ну, я все еще не знаю о размерах и положении узла, надеюсь, кто-нибудь поможет с этим - но я кое-что понял относительно заливки фона, покопавшись в kpsewhich tikz-timing.sty. По сути, там есть несколько макросов, обрабатывающих переходы, и по какой-то причине только \tikztimingdef{HL}принимает fillпараметр - и это, кажется, работает правильно, но только до тех пор, пока ваша временная последовательность начинается с Lи заканчивается на L. Так что, в конечном итоге, я пришел к этому:

test1a.png

... что я и хотел в отношении фоновой заливки; к сожалению, это изменит все поведение Hперсонажей, а не только на одной временной диаграмме. Вот MWE (в качестве мелочи, использовал это дляТерминология - Правильное значение (и происхождение) PCM? - Stack Overflow):

\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}

Связанный контент