
Я пытаюсь сделать следующую диаграмму:
\begin{tikzpicture}[
start chain=1 going right,node distance=-0.15mm]
\node [on chain=1] at (-1.5,-.4) {f(};
\node [draw,on chain=1] {*};
\node [draw,on chain=1] {*};
\node [draw,on chain=1] {*};
\node [draw,on chain=1] {0};
\node [draw,on chain=1] {0};
\node [draw,on chain=1] {*};
\node [draw,on chain=1] {0};
\node [draw,on chain=1] {1};
\node [draw,on chain=1] {*};
\node [draw,on chain=1] {*};
\node [draw,on chain=1] {0};
\node [name=r,on chain=1] {$) = 0$};
\end{tikzpicture}
Проблема, с которой я столкнулся, заключается в том, что рамки вокруг * немного больше, чем вокруг цифр 1, 0. Как мне гарантировать, что все рамки будут одинакового размера?
Также я хотел бы, чтобы переменная x появилась над центром цепочки, какой самый простой способ сделать это? Единственный способ, который я знаю сейчас, это команда node at (x,y). Я думаю, что должен быть способ назвать узел в середине цепочки и определить узел, который будет идти прямо над ним, но я не знаю синтаксиса для этого.
решение1
Вы можете задать minimum size
опцию для узлов. Если задать достаточно большое значение, все поля будут одинакового размера.
Чтобы разместить x
над центром цепи, есть несколько вариантов. Вы можете назвать узел с синтаксисом
\node (<name>) [<options>] {<node label>};
(Это делает то же самое, что и \node [name=<name>] {}
.) Затем вы можете использовать <name>
в качестве координаты и разместить другой узел относительно нее, с помощью
\node [above=of <name>] {$x$};
Другой способ — дать имена первому и последнему узлу в цепочке и поместить новый узел посередине между ними, например:
\path (startnode) -- node[above] {$x$} (endnode);
Чтобы упростить создание диаграмм, вы можете объявить свои собственные стили с помощью
<style name>/.style={<options>}
Добавьте это к необязательному аргументу tikzpicture
, или в \tikzset
макросе, если вам нужно глобальное определение. Таким образом вы можете быстро изменить размер, цвет и т. д. всех узлов с этим стилем. В коде ниже я определил стиль box on chain
.
\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{chains}
\begin{document}
\begin{tikzpicture}[
start chain=1 going right,node distance=-0.15mm,
box on chain/.style={draw, on chain=1,minimum size=.5cm}]
\node [on chain=1] at (-1.5,-.4) {f(};
\node(start) [box on chain] {*};
\node [box on chain] {*};
\node [box on chain] {*};
\node [box on chain] {0};
\node [box on chain] {0};
\node (mid) [box on chain] {*};
\node [box on chain] {0};
\node [box on chain] {1};
\node [box on chain] {*};
\node [box on chain] {*};
\node(end) [box on chain] {0};
\node [name=r,on chain=1] {$) = 0$};
% place new node above node called mid
\node [above=of mid] {\( x \)};
% different method: place node in the middle between start and end, 2ex above
% \path (start) -- node[above=2ex]{\( x \)} (end);
\end{tikzpicture}
\end{document}