Tikzpicture中的图形问题

Tikzpicture中的图形问题

下面是我的 MWE。我唯一的问题是,我需要的tikzpicturepagewidth( textwidth) 并且不溢出到右侧。我尝试了adjustboxfboxresizebox

\documentclass[
a4paper,            %   Papierformat A4
12pt,               %   Schrift 12-Punkt
headsepline,        %   mit Linie unter der Kopfzeile
numbers=noenddot,   %   Nummern ohne Punkt am Ende
bibliography=totoc, %   Literaturverzeichnis mit Nummer im             
Inhaltsverzeichnis (``TO Table Of Contents'')
index=totoc,        %   Index mit Nummer im Inhaltsverzeichnis
fleqn,              %   Formeln werden linksbündig statt zentriert 
angeordnet
headings=normal     %       Etwas kleinere Überschriften
]{scrbook}

\usepackage{tikz}
\usetikzlibrary{matrix, positioning,chains}
\usetikzlibrary{calc,trees,positioning,arrows,chains,shapes.geometric,%
decorations.pathreplacing,decorations.pathmorphing,shapes,%
matrix,shapes.symbols}

\usepackage{capt-of}


\tikzstyle{rounddiagram} = [
%\tikzset{
>=stealth',
punktchain/.style={
rectangle, 
rounded corners, 
% fill=black!10,
draw=black, very thick,
text width=10em, 
minimum height=3em, 
text centered, 
on chain},
line/.style={draw, thick, <-},
element/.style={
tape,
top color=white,
bottom color=blue!50!black!60!,
minimum width=8em,
draw=blue!40!black!90, very thick,
text width=10em, 
minimum height=3.5em, 
text centered, 
on chain},
every join/.style={->, thick,shorten >=1pt},
decoration={brace},
tuborg/.style={decorate},
tubnode/.style={midway, right=2pt},
]%}


\begin{document}
\begin{figure}

    \begin{tikzpicture}
    [style=rounddiagram, node distance=.8cm, start chain=going right]
    \node[punktchain, join]{FairRun};
    \node[punktchain, join]{Set I/O};
    \node[punktchain, join]{CbmStsFindClusters};
    \node[punktchain, join]{CbmStsFindHits};
    \end{tikzpicture}
    \end{figure}
\end{document}

任何帮助都将受到赞赏。

答案1

您可以随时计算节点应具有的最大宽度,以精确填充整个页面。我们需要4*(space taken by a node)+3*(node distance)=\textwidth,其中space taken by a node=(text width) + 2*(inner sep)+2*(outer sep)。请注意,\tikzstyle已弃用。

\documentclass[
a4paper,            %   Papierformat A4
12pt,               %   Schrift 12-Punkt
headsepline,        %   mit Linie unter der Kopfzeile
numbers=noenddot,   %   Nummern ohne Punkt am Ende
bibliography=totoc, %   Literaturverzeichnis mit Nummer im             
Inhaltsverzeichnis (``TO Table Of Contents'')
index=totoc,        %   Index mit Nummer im Inhaltsverzeichnis
fleqn,              %   Formeln werden linksbündig statt zentriert 
angeordnet
headings=normal     %       Etwas kleinere Überschriften
]{scrbook}

\usepackage{tikz}
\usetikzlibrary{matrix, positioning,chains}
\usetikzlibrary{calc,trees,positioning,arrows,chains,shapes.geometric,%
decorations.pathreplacing,decorations.pathmorphing,shapes,%
matrix,shapes.symbols}

\usepackage{capt-of}


\tikzset{rounddiagram/.style={>=stealth'},
punktchain/.style={
rectangle, 
rounded corners, 
% fill=black!10,
draw=black, very thick,
text width=10em, 
minimum height=3em, 
text centered, 
on chain},
% line/.style={draw, thick, <-},
% element/.style={
% tape,
% top color=white,
% bottom color=blue!50!black!60!,
% minimum width=8em,
% draw=blue!40!black!90, very thick,
% text width=10em, 
% minimum height=3.5em, 
% text centered, 
% on chain},
every join/.style={->, thick,shorten >=1pt},
% decoration={brace},
% tuborg/.style={decorate},
% tubnode/.style={midway, right=2pt},
}


\begin{document}
\begin{figure}

\begin{tikzpicture}[rounddiagram, node distance=.8cm, start chain=going right]
    \pgfmathsetmacro{\mynodewidth}{(\textwidth-3*0.8cm)/4-4pt}
    \begin{scope}[punktchain/.append style={text width=\mynodewidth pt,inner sep=1pt,outer
    sep=1pt}]
    \node[punktchain, join]{FairRun};
    \node[punktchain, join]{Set I/O};
    \node[punktchain, join]{CbmStsFindClusters};
    \node[punktchain, join]{CbmStsFindHits};
    \end{scope}
\end{tikzpicture}
\end{figure}
\end{document}

在此处输入图片描述

输出表明您可能希望将第三个节点的文本写成两行,为不同的节点设置不同的宽度,或者通过scale=(something <1)在节点中使用使它们更小。

假设您只想缩放文本。使图片精确适合的比例因子可以按如下方式计算。

\documentclass[
a4paper,            %   Papierformat A4
12pt,               %   Schrift 12-Punkt
headsepline,        %   mit Linie unter der Kopfzeile
numbers=noenddot,   %   Nummern ohne Punkt am Ende
bibliography=totoc, %   Literaturverzeichnis mit Nummer im             
Inhaltsverzeichnis (``TO Table Of Contents'')
index=totoc,        %   Index mit Nummer im Inhaltsverzeichnis
fleqn,              %   Formeln werden linksbündig statt zentriert 
angeordnet
headings=normal     %       Etwas kleinere Überschriften
]{scrbook}

\usepackage{tikz}
\usetikzlibrary{positioning,chains,arrows}


\tikzset{rounddiagram/.style={>=stealth'},
punktchain/.style={
rectangle, 
rounded corners, 
draw=black, very thick,
text width=10em, 
minimum height=3em, 
text centered, 
on chain},
every join/.style={->, thick,shorten >=1pt}}


\begin{document}
\begin{figure}

\begin{tikzpicture}[rounddiagram, node distance=.8cm, start chain=going right]
    \def\myLst{FairRun,Set I/O,CbmStsFindClusters,CbmStsFindHits}
    \def\mywidth{0}
    \foreach \X [count=\Y] in \myLst
    {
     \pgfmathsetmacro{\mywidth}{max(width("\X"),\mywidth)}
     \xdef\mywidth{\mywidth}
    }
    \pgfmathsetmacro{\mynodewidth}{(\textwidth-3*0.8cm)/4-4pt}
    \pgfmathsetmacro{\myscale}{(\mynodewidth-4)/\mywidth}
    \foreach \X in \myLst
    \node[punktchain,join,text width=\mynodewidth pt,inner sep=1pt,outer
    sep=1pt]{\scalebox{\myscale}{\X}};
\end{tikzpicture}
\end{figure}
\end{document}

在此处输入图片描述

正如您所看到的,您需要做的就是向代码提供包含\myLst文本的列表,其他一切都是自动的。

答案2

有两种方法:

正如@Zarko 提到的,您可以更改字体并减小 的大小text width。第二种方法是保留所有内容并添加transform canvas={xshift = 0.8cm}到选项中tikzpicture

输出

\documentclass[
a4paper,            %   Papierformat A4
12pt,               %   Schrift 12-Punkt
headsepline,        %   mit Linie unter der Kopfzeile
numbers=noenddot,   %   Nummern ohne Punkt am Ende
bibliography=totoc, %   Literaturverzeichnis mit Nummer im             
Inhaltsverzeichnis (``TO Table Of Contents'')
index=totoc,        %   Index mit Nummer im Inhaltsverzeichnis
fleqn,              %   Formeln werden linksbündig statt zentriert 
angeordnet
headings=normal     %       Etwas kleinere Überschriften
]{scrbook}

\usepackage{tikz}
\usetikzlibrary{matrix, positioning,chains}
\usetikzlibrary{calc,trees,positioning,arrows,chains,shapes.geometric,%
decorations.pathreplacing,decorations.pathmorphing,shapes,%
matrix,shapes.symbols}

\usepackage{capt-of}


\tikzstyle{rounddiagram} = [
%\tikzset{
>=stealth',
punktchain/.style={
rectangle, 
rounded corners, 
% fill=black!10,
draw=black, very thick,
text width=7.5em, 
minimum height=3em, 
text centered, 
font = \footnotesize,
on chain},
line/.style={draw, thick, <-},
element/.style={
tape,
top color=white,
bottom color=blue!50!black!60!,
minimum width=8em,
draw=blue!40!black!90, very thick,
text width=10em, 
minimum height=3.5em, 
text centered, 
on chain},
every join/.style={->, thick,shorten >=1pt},
decoration={brace},
tuborg/.style={decorate},
tubnode/.style={midway, right=2pt},
]%}


\begin{document}
    \begin{figure}
    \begin{tikzpicture}
    [style=rounddiagram, node distance=.8cm, start chain=going right]
    \node[punktchain, join]{FairRun};
    \node[punktchain, join]{Set I/O};
    \node[punktchain, join]{CbmStsFindClusters};
    \node[punktchain, join]{CbmStsFindHits};
    \end{tikzpicture}
    \end{figure}

    \begin{figure}
    \begin{tikzpicture}
    [style=rounddiagram, node distance=.8cm, start chain=going right, transform canvas={xshift = 0.8cm}]
    \node[punktchain, join, text width=10em, font =\normalsize]{FairRun};
    \node[punktchain, join, text width=10em, font =\normalsize]{Set I/O};
    \node[punktchain, join, text width=10em, font =\normalsize]{CbmStsFindClusters};
    \node[punktchain, join, text width=10em, font =\normalsize]{CbmStsFindHits};
    \end{tikzpicture}
    \end{figure}
\end{document}

答案3

我会将其更改text widthminimum width更小的尺寸,例如7em。此外,我还会将所有 TikZ 库翻倍并使用tikzset而不是\tikzstyle

在此处输入图片描述

(红线表示文本边框)

\documentclass[
a4paper,            %   Papierformat A4
12pt,               %   Schrift 12-Punkt
headsepline,        %   mit Linie unter der Kopfzeile
numbers=noenddot,   %   Nummern ohne Punkt am Ende
bibliography=totoc, %   Literaturverzeichnis mit Nummer im
Inhaltsverzeichnis (``TO Table Of Contents'')
index=totoc,        %   Index mit Nummer im Inhaltsverzeichnis
fleqn,              %   Formeln werden linksbündig statt zentriert
angeordnet
headings=normal     %       Etwas kleinere Überschriften
]{scrbook}

\usepackage{tikz}
\usetikzlibrary{arrows,
                calc, chains,
                decorations.pathreplacing, decorations.pathmorphing,
                matrix,
                positioning,
                shapes.geometric, shapes.symbols,
                trees
                }

\usepackage{capt-of}


\tikzset{rounddiagram/.style = {
>=stealth',
punktchain/.style = {rectangle, rounded corners, draw, very thick,
                     minimum width=7em, % <--- changed from "text width"
                     minimum height=5ex,
                     align=center, on chain},
      line/.style = {draw, thick, <-},
   element/.style = {tape, draw=blue!40!black!90, very thick,
                     top color=white, bottom color=blue!50!black!60!,
                     text width=10em, minimum height=7ex,
                     align=center, on chain},
every join/.style = {->, thick,shorten >=1pt},
       decoration = {brace},
    tuborg/.style = {decorate},
   tubnode/.style = {midway, right=2pt},
}}

%---------------- show page layout. don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%


\begin{document}
\begin{figure}
    \centering
    \begin{tikzpicture}[style=rounddiagram,
node distance=5mm,
start chain=going right,
punktchain/.append style = {join}
                        ]
\node[punktchain] {FairRun};
\node[punktchain] {Set I/O};
\node[punktchain] {CbmStsFindClusters};
\node[punktchain] {CbmStsFindHits};
\end{tikzpicture}
    \end{figure}
\end{document}

答案4

\documentclass{article}
\usepackage{tikz}

\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}[>=latex, node distance=2.5cm, auto]
    % Nodes
    \node (stress) {Stress Levels};
    \node (decision) [below left=of stress] {Decision-Making Skills};
    \node (thinking) [below right=of stress] {Critical-Thinking Skills};
    \node (environment) [below=of stress] {School Environment};
    \node (experiences) [below=of decision] {Personal Experiences};
    \node (interactions) [below=of thinking] {Peer Interactions};
    \node (outcome) [below=of environment, align=center] {Academic\\Performance/Well-being};

    % Arrows
    \draw[->] (stress) -- (decision);
    \draw[->] (stress) -- (thinking);
    \draw[->] (decision) -- (outcome);
    \draw[->] (thinking) -- (outcome);
    \draw[->] (environment) -- (outcome);
    \draw[->] (experiences) -- (outcome);
    \draw[->] (interactions) -- (outcome);

\end{tikzpicture}
\caption{Conceptual Paradigm: Stress Levels, Decision-Making, and Critical-Thinking Skills}
\end{figure}

\end{document}

相关内容