在学习如何创建更高质量的图表时,我遇到了这个tikz
软件包,特别是这个示例教程网页(www.texample.net/tikz/examples/class-diagram/)。
我逐字逐句地采用了那里提供的脚本,并且能够编译它来制作如链接中所示的图表。
然而,随后我尝试将该图表嵌入到我的主文档中\input
,却无法使其工作。
完整代码详细信息
父文件(尝试嵌入RDB_diagram_shell.tex
文件):
% Load necessary packages
\documentclass[pdf]{beamer}
\usetheme{Berkeley} % I like this theme better
\usecolortheme{wolverine} % This gives the orange colorscheme
\usepackage{standalone} % I was trying to use this package to embed diagram files within here.
\usetikzlibrary{positioning,shapes,shadows,arrows}
%
%%%%%%%%%%%%%%%%%%%%%%%%
% Title Slide
\title{Blah}
\author{Mike Williamson}
\begin{document}
%%%
\begin{frame}
\frametitle{RDB Tables Example}
\input{RDB_diagram_shell}
\end{frame}
\end{document}
RDB_diagram_shell.tex
:
% DB Layout diagram
\begin{tikzpicture}[node distance=2cm]
%\coordinate (origin) at (50,50);
\node (Order) [facttable, rectangle split, rectangle split parts=2] {
\textbf{ORDER}
\nodepart{second}
order\_num (PK) \\
customer\_ID (FK) \\
store\_ID (FK) \\
clerk\_ID (FK) \\
date
};
\node (AuxNodeTop) [text width=0.5cm, above=of Order, shift={(0,-1.5cm)}] {};
\node (Store) [dimtable, rectangle split, rectangle split parts=2, left=of AuxNodeTop] {
\textbf{STORE}
\nodepart{second}
store\_ID (PK) \\
store\_name \\
address \\
district \\
floor\_type
};
\node (Clerk) [dimtable, rectangle split, rectangle split parts=2, right=of AuxNodeTop] {
\textbf{CLERK}
\nodepart{second}
clerk\_ID (PK) \\
clerk\_name \\
clerk\_grade
};
\node (Customer) [dimtable, rectangle split, rectangle split parts=2, below=of Order, shift={(0,1cm)}] {
\textbf{CUSTOMER}
\nodepart{second}
customer\_ID (PK) \\
customer\_name \\
purchase\_profile \\
credit\_profile \\
address
};
\draw[rightarrow] (Store.south) -- ++(-0.5, 0) -| (Order.west);
\draw[leftarrow] (Clerk.south) -- ++(0.5, 0) -| (Order.east);
\draw[uparrow] (Customer.north) -| (Order.south);
\end{tikzpicture}
这就是两个脚本的全部内容。
错误
我收到以下错误:
...DB_diagram.tex:20: Package pgfkeys Error: I do not know the key '/tikz/rectangle split' and I am going to ignore it. Perhaps you mis-spelled it.
这似乎表明我不能用空格字符分隔单词rectangle
和split
。(注意:这些关键词仅存在在嵌入的文件中,单独编译时可以很好地编译。)但是,为什么当我单独制作文件而不是嵌入它时它会起作用呢?
再次重申:
- 我能够当我单独编译图表时,我编译了图表。但我无法当它嵌入到一个小的 shell 文件中时对其进行编译。
- 这是为什么?我做错了什么?
编辑
下面的一些评论者想看看实际的文件。上面给出了两个 Tex 文件,所以我猜想评论者想从我可以编译的较小的 Tex 文件中查看渲染的文件。它在这里:
答案1
您的文档示例存在更多问题:
- 来自“独立”文件的包
standalone
包含您的图像,删除其前言,\begin{document}
并\end{document}
仅将图像代码导入主文档。因此,独立文件中的所有包和定义对于主文档都是不可见的。 - 如果
tikzpicture
包含一些附加在方括号中的选项,则主文档中的框架必须具有选项[fragile]
- 为了解决您的问题,您需要将“独立”文件的完整前言添加到主文件中。到目前为止,似乎您只添加了其前言的一部分,因此缺少的包和样式定义会导致报告错误。
由于我们不知道您在“独立”文件中使用的样式,我重建了自己的样式(尝试使用我的样式,它们似乎更短且更一致)并将其嵌入到
tikz
图片中:\documentclass{beamer} \usetheme{Berkeley} % I like this theme better \usecolortheme{wolverine} % This gives the orange colorscheme \usepackage{standalone} % I was trying to use this package to embed diagram files within here. \usepackage{tikz} \usetikzlibrary{arrows.meta, % <---- positioning, shadows, shapes.multipart} % <---- \begin{document} %%%% \begin{frame}[fragile] % <---- \frametitle{RDB Tables Example} % for simplify tests i include the content of the "standalone" file here \begin{tikzpicture}[ % <---- node distance = 5mm and 3mm, MPN/.style args = {#1/#2}{% Multi Part Node % <---- rectangle split, rectangle split parts=2, draw, rounded corners, fill=#1, text=#2, font=\footnotesize\linespread{0.9}\selectfont, text width=28mm, align=center, drop shadow}, MPN/.default = blue!50/white, % <---- arr/.style = {semithick, -{Triangle[open]}} % <---- ] \node (Order) [MPN=green!30/black] { % <---- \textbf{ORDER} \nodepart{second} order\_num (PK) \\ customer\_ID (FK) \\ store\_ID (FK) \\ clerk\_ID (FK) \\ date }; \node (Store) [MPN, above left=of Order.west] { % <---- \textbf{STORE} \nodepart{two} store\_ID (PK) \\ store\_name \\ address \\ district \\ floor\_type }; \node (Clerk) [MPN, above right=of Order.east] { % <---- \textbf{CLERK} \nodepart{two} clerk\_ID (PK) \\ clerk\_name \\ clerk\_grade }; \node (Customer) [MPN, below=of Order] { % <---- \textbf{CUSTOMER} \nodepart{two} customer\_ID (PK) \\ customer\_name \\ purchase\_profile \\ credit\_profile \\ address }; \draw[arr] (Store) |- (Order); % <---- \draw[arr] (Clerk) |- (Order); % <---- \draw[arr] (Customer) -- (Order); % <---- \end{tikzpicture} \end{frame} \end{document}
这使
你应该得到相同的结果
\documentclass{beamer}
\usetheme{Berkeley} % I like this theme better
\usecolortheme{wolverine} % This gives the orange colorscheme
\usepackage{standalone} % I was trying to use this package to embed diagram files within here.
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
positioning,
shadows, shapes.multipart}
\begin{document}
\begin{frame}[fragile]
\frametitle{RDB Tables Example}
\input{RDB_diagram_shell}
\end{frame}
\end{document}
哪里RDB_diagram_shell
\documentclass[tikz]{standalone} % diagram "RDB_diagram_shell".
\usetikzlibrary{arrows.meta,
positioning,
shadows, shapes.multipart}
\begin{document}
% code of `tikzpicture` as is written in complete mwe above
\end{document}