编辑:我最初给出的例子相当有缺陷——我就不说了,但第二部分是我真正挣扎的部分。
原始问题 类似的问题此主题但我没有使用 pgfplotsset,所以该解决方案对我来说不起作用。
我正在开发一个工具来帮助我生成图表。出于某种原因,要绘制下面的图表:
我必须生成 tikz:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{textcomp}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}
\title{Diagram Practice}
%\author{Jack Turner}
\date{}
\begin{document}
\tikzstyle{box}=[minimum size = 1.25cm,right=10mm, rectangle, draw=black, fill=white, thick]
\begin{tikzpicture}
\draw[black] (1.,0.) -- (2.,0.);
\node[box] (f) at (1.,0.) {$f$};
\draw[black] (3.25,-0.208333333333) -- (3.5,-0.208333333333);
\draw[black] (3.25,0.208333333333) -- (3.5,0.208333333333);
\end{tikzpicture}
\end{document}
当盒子放置在 (1,0) 时,我必须为从左侧进入的电线设置一条从 (1,0) -- (2,0) 的路径,这对我来说似乎很愚蠢。为什么不是从 (0,0) -- (1,0) 的路径?编辑:这是因为right = 10mm
我的造型
此外,为什么盒子没有被放置在原点?为什么路径会碰到盒子的中心而不是与底部对齐?
随着图表变得更大,缩放似乎变得更加复杂 - 所以如果我把三个盒子放在一起并尝试将它们连接起来,那么几乎不可能让连接它们的电线真正接触到盒子的边缘。
有没有办法阻止 tikz 进行这些相对调整?
问题2
如果我做:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{textcomp}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}
\title{Diagram Practice}
%\author{Jack Turner}
\date{}
\begin{document}
\tikzstyle{box}=[minimum size = 1.25cm,right=10mm, rectangle, draw=black, fill=white, thick]
\begin{tikzpicture}
\node[box] (f) at (1.,0.) {$f$};
\node[box] (h) at (7.,0) {$h$};
\end{tikzpicture}
\end{document}
节点绘制得很好:
但如果我删除左边的节点:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{textcomp}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}
\title{Diagram Practice}
%\author{Jack Turner}
\date{}
\begin{document}
\tikzstyle{box}=[minimum size = 1.25cm,right=10mm, rectangle, draw=black, fill=white, thick]
\begin{tikzpicture}
\node[box] (h) at (7.,0) {$h$};
\end{tikzpicture}
\end{document}
节点移到了原来f
所在的位置。我怎样才能h
让它停留在完全相同的位置?这是 LaTeX 对图表所做的操作,还是 tikz 的问题?
答案1
tikz
自动调整图像的边界框以适应图片中的所有元素。如果您的图片tikzpicture
仅包含一个元素(无论其坐标如何),边界框都会缩小到该元素。请参阅以下示例 - 文档结构如下:
\documentclass[tikz, border=5mm]{standalone}
\usetikzlibrary{backgrounds}
\tikzset{
box/.style={draw, minimum size=1.25cm},
background rectangle/.style={draw, red}
}
\begin{docment}
\begin{tikzpicture}[show background rectangle]
<code here>
\end{tikzpicture}
\end{document}
用于background rectangle
显示 的边界框tikzpicture
。
这里是两个节点及其结果边界框的示例:
\node [box] at (0,0) {a};
\node [box] at (7,0) {b};
如果您只有一个元素,tikzpicture
则会获得以下边界框:
\node [box] at (7,0) {b};
如果您确实需要自定义边界框 - 我真的不认为有这个必要 - 您可以使用以下示例之一。但要使其正常工作,您必须自己做一些工作,例如计算边界框的大小以及节点在其中的正确位置。
为了扩展边界框,您可以添加其他元素(如矩形)并将它们设置opacity
为0
:
\draw [opacity=0] (0,0) rectangle (7,1.25);
\node [box, anchor=south west] at (7,0) {b};
另一种可能性是使用命令\useasboundingbox
,它允许您使用tikz
-element 作为自定义边界框:
\useasboundingbox (0,0) rectangle (8.25,1.25);
\node [box, anchor=south west] at (7,0) {b};
编辑: 绘制图表的一些额外想法
当您使用节点绘制图像时,您可以使用它们将图像与路径连接起来。如果您已经获得了节点的坐标,则无需手动指定路径的每个坐标。请参阅以下示例:
\documentclass[tikz, border=5mm]{standalone}
\tikzset{
box/.style={draw, minimum size=1.25cm},
double distance=12pt,
}
\begin{document}
\begin{tikzpicture}
\node (a) [box] at (0,0) {$a$};
\node (b) [box] at (3,0) {$b$};
\node (c) [box] at (3,3) {$c$};
\draw [double] (a) -- (b);
\draw [double] (a) |- (c);
\draw [-<] (a) -- ++(-1,0);
\draw (b) -- (c);
\draw [->] (c) -- ++(1,0);
\end{tikzpicture}
\end{document}
编辑链中节点的示例
\documentclass[tikz, border=5mm]{standalone}
\tikzset{
box/.style={draw, minimum size=1.25cm},
double distance=12pt,
}
\begin{document}
\begin{tikzpicture}
\node (a) [box] at (0,0) {$a$};
\node (b) [box] at (3,0) {$b$};
\node (c) [box] at (6,0) {$c$};
\draw [double] (a) -- (b);
\draw [double] (a) |- +(2,2) -| (c);
\draw [-<] (a) -- ++(-1,0);
\draw (b) -- (c);
\draw [->] (c) -- ++(1,0);
\end{tikzpicture}
\end{document}