以前,我遇到过 3D Tikz 图片一侧添加了大量空白的问题,使用 解决了该问题\documentclass[varwidth,border=5pt]{standalone}
。
但是,现在我试图并排绘制 2D 和 3D 图片。subcaption
由于期刊图形要求,我无法将这两张图片单独包含在软件包的最终文档中。以前,我会生成两个单独的图片 pdf,然后将它们与另一个 .tex 文件合并为一个 pdf(用于插入最终文档)。但这似乎是一种复杂的做事方式。
这是我的 MWE:
\documentclass[varwidth,border=5pt]{standalone}
\usepackage{tikz}
\usepackage{tikz-3dplot}
\usetikzlibrary{arrows}
\usetikzlibrary{3d}
\tikzset{>=latex}
\begin{document}
\begin{tikzpicture}
\draw[-] (0,0)--(3,0)--(3,2)--(0,2)--cycle;
\draw[-] (0,2)--(3,2)--(3,4)--(0,4)--cycle;
\draw[-] (0,4)--(3,4)--(3,6)--(0,6)--cycle;
\node at (-0.4,5.7) {{\large a}};
\end{tikzpicture}
\tdplotsetmaincoords{90}{90}
\tdplotsetrotatedcoords{0}{20}{70}
\begin{tikzpicture}[tdplot_rotated_coords]
\draw[->, thick] (0,0,0) --++ (20:3);
\draw[->] (0,0,0) --++ (60:2);
\draw[dashed] (0,0,-2) circle(2);
\draw[dashed] (0,0,0) circle(2);
\draw[dashed] (0,0,2) circle(2);
\node[left] at (0,0,0) {{ $i$}};
\node[right] at (2.2,0.15,-0.05) {{\large {\bf M}}};
\node[below] at (0.5,0.5,0) {{\large $\phi_i$}};
\draw[->] (0,0,-2) -- (0,0,3.5);
\node[above] at (0,0,3.5) {{\large $z$}};
\node at (-2,0,3.5) {{\large b}};
\end{tikzpicture}
\end{document}
如果按原样编译,则两个 tikz 图片会一个在另一个上方对齐。我认为这是因为参数varwidth
。如果将其取出,图片将并排显示,但会出现与 3D 图片相关的空白,因此两者之间会有很大间隙。
有人知道解决这个问题的最佳方法吗?
谢谢。
答案1
第二版本:
因此,问题似乎是在一个 pdf 文件中包括不同的图形。有几种解决方案,但当您使用standalone
类时,TiKZ
您只需将tikz
作为选项包含到原始示例 ( \documentclass[tikz,varwidth,border=5pt]{standalone}
) 中,即可获得包含页数为 的 pdf 文件tikzpictures
。您可以使用 在文本中包含图形\includegraphics[page=...]{...}
。
\documentclass{article}
\usepackage{subcaption}
\usepackage{graphicx}
\usepackage{lipsum}
\begin{document}
\begin{figure}
\begin{subfigure}{.5\linewidth}
\centering
\includegraphics[page=1]{sensetitol-3}
\subcaption{Subfigure}
\end{subfigure}
\begin{subfigure}{.5\linewidth}
\centering
\includegraphics[page=2]{sensetitol-3}
\subcaption{Subfigure}
\end{subfigure}
\end{figure}
\lipsum[2]
\end{document}
原始答案:
我不明白您对 journalgraphics 要求有何问题,但如果您想将两个图形并排放置,那么varwidth
一个可能的解决方案就是将两个图形绘制在同一个图形内,tikzpicture
并将其中一个图形绘制在正确放置的图形内scope
。
注意:shift
这些值都是通过反复试验找到的。
\documentclass[varwidth,border=5pt]{standalone}
\usepackage{tikz}
\usepackage{tikz-3dplot}
\usetikzlibrary{arrows}
\usetikzlibrary{3d}
\tikzset{>=latex}
\begin{document}
\tdplotsetmaincoords{90}{90}
\tdplotsetrotatedcoords{0}{20}{70}
\begin{tikzpicture}
\draw[-] (0,0)--(3,0)--(3,2)--(0,2)--cycle;
\draw[-] (0,2)--(3,2)--(3,4)--(0,4)--cycle;
\draw[-] (0,4)--(3,4)--(3,6)--(0,6)--cycle;
\node at (-0.4,5.7) {{\large a}};
\begin{scope}[tdplot_rotated_coords, xshift=6cm, yshift=2.5cm]
\draw[->, thick] (0,0,0) --++ (20:3);
\draw[->] (0,0,0) --++ (60:2);
\draw[dashed] (0,0,-2) circle(2);
\draw[dashed] (0,0,0) circle(2);
\draw[dashed] (0,0,2) circle(2);
\node[left] at (0,0,0) {{ $i$}};
\node[right] at (2.2,0.15,-0.05) {{\large {\bf M}}};
\node[below] at (0.5,0.5,0) {{\large $\phi_i$}};
\draw[->] (0,0,-2) -- (0,0,3.5);
\node[above] at (0,0,3.5) {{\large $z$}};
\node at (-2,0,3.5) {{\large b}};
\end{scope}
\end{tikzpicture}
\end{document}
答案2
你可以将图片放入两个独立的varwidth
环境中来实现这一目的:
\documentclass[varwidth,border=5pt]{standalone}
\usepackage{tikz}
\usepackage{tikz-3dplot}
\usetikzlibrary{arrows}
\usetikzlibrary{3d}
\tikzset{>=latex}
\begin{document}
\begin{varwidth}{\linewidth}
\begin{tikzpicture}
\draw[-] (0,0)--(3,0)--(3,2)--(0,2)--cycle;
\draw[-] (0,2)--(3,2)--(3,4)--(0,4)--cycle;
\draw[-] (0,4)--(3,4)--(3,6)--(0,6)--cycle;
\node at (-0.4,5.7) {{\large a}};
\end{tikzpicture}
\end{varwidth}
\begin{varwidth}{\linewidth}
\tdplotsetmaincoords{90}{90}
\tdplotsetrotatedcoords{0}{20}{70}
\begin{tikzpicture}[tdplot_rotated_coords]
\draw[->, thick] (0,0,0) --++ (20:3);
\draw[->] (0,0,0) --++ (60:2);
\draw[dashed] (0,0,-2) circle(2);
\draw[dashed] (0,0,0) circle(2);
\draw[dashed] (0,0,2) circle(2);
\node[left] at (0,0,0) {{ $i$}};
\node[right] at (2.2,0.15,-0.05) {{\large {\bf M}}};
\node[below] at (0.5,0.5,0) {{\large $\phi_i$}};
\draw[->] (0,0,-2) -- (0,0,3.5);
\node[above] at (0,0,3.5) {{\large $z$}};
\node at (-2,0,3.5) {{\large b}};
\end{tikzpicture}
\end{varwidth}
\end{document}