tikz 相对于页面和内容定​​位图像

tikz 相对于页面和内容定​​位图像

这是一段代码,它会将一张图片放在页面左侧,将一张图片放在右侧。我需要找到另一种定位图片的方法,这样只需重复此代码,lualatex 就会适当地附加新内容。

我需要的不是 \path (0,0),而是将图像(锚定在左上角)放置在页面左侧的文本下方(如果有)或左上角,并且第二幅图像与第一幅图像水平对齐(均锚定在顶部),但放置在页面右侧的边距处。 “(0,0)”是绝对坐标,因此,如果我仅为新的一对图像重复该代码,我将不得不为每一对新图像手动调整这些坐标。 “(0,0)”是绝对坐标,因此,如果我仅为新的一对图像重复该代码,我将不得不为每一对新图像手动调整这些坐标。

\documentclass[a4paper]{scrartcl}

\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{positioning,shapes.callouts}
\graphicspath{ {/../items/} }
\usepackage[margin=2cm]{geometry}

\begin{document}
\begin{tikzpicture}[
node distance = 8mm and 13 mm,
   box/.style = {inner sep=0pt},
  note/.style = {rectangle callout, callout relative pointer={(#1)},
                 callout pointer width=4mm, 
                 draw, ultra thick, rounded corners,
                 text width=41mm, inner sep=3mm, font=\large}
                    ]
\setkeys{Gin}{height=4cm}
\path   (0,0)           node (cardbox)  [box, right] {\includegraphics{jpg/albIe7h}}
        (\linewidth,0)  node (bottle)  [box,  left] {\includegraphics{jpg/A2eDdiT}};

\end{tikzpicture}
\end{document}

编辑:我刚刚意识到,重复整个“tikzpicture”环境允许通过保持“\path (0,0) node”不重叠来添加其他材料。因此,有没有办法声明

node distance = 8mm and 13 mm,
   box/.style = {inner sep=0pt},
  note/.style = {rectangle callout, callout relative pointer={(#1)},
                 callout pointer width=4mm, 
                 draw, ultra thick, rounded corners,
                 text width=41mm, inner sep=3mm, font=\large}
                    ]
\setkeys{Gin}{height=4cm}

而不必每次都重写。

在评论中我要求仅使用 tabular 和 tcolorbox 的解决方案,即根本不使用 tikz。

我使用 tabularx 的目标是制作一个像“lXr”这样的 3 列的表格,其中第 1 列和第 3 列将容纳 2 幅图像,而文本框将在左对齐环境中进入第 2 列。minipage 允许这样做,并且还定义特定的高度并从底部填充。

EDIT2:我想展示我对另一个用户在此处给出的解决方案所做的更改:

%\setkeys{Gin}{height=4cm}
\setkeys{Gin}{keepaspectratio} % the image size will be appropriately set for each case.

\begin{document}
\begin{tikzpicture}
\path   (0,0)           node (cardbox)  [box, right] {\includegraphics[height=40mm]{jpg/albIe7h}}
(\linewidth,0)  node (bottle)   [box,  left] {\includegraphics[height=30mm]{jpg/A2eDdiT}};
\node (n1) [note={-9mm,1mm},
            right=40mm of cardbox.north west, yshift=-15mm]
           {This is a box\\ Ceci est une boîte};
\node (n2) [note={17mm,2mm},
            below=of n1]
           {That's a bottle\\ Celà est une bouteille};

\end{tikzpicture}

答案1

渴望评论...

抱歉,但我看不懂你的问题和评论。我搞不清楚问题出在哪里。例如,以下(不那么短的)MWE 运行正常:

\documentclass[a4paper]{scrartcl}
\usepackage[margin=20mm]{geometry}
%---------------- Show page layout. Don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%
\usepackage{lipsum}% For dummy text. Don't use in a real document

\usepackage{tikz}
\usetikzlibrary{positioning,
                shapes.callouts
                }
\tikzset{
node distance = 8mm and 13 mm,
   box/.style = {inner sep=0pt},
  note/.style = {rectangle callout, callout relative pointer={(#1)},
                 callout pointer width=4mm,
                 draw, ultra thick, rounded corners,
                 text width=41mm, inner sep=3mm, font=\large}
        }
\usepackage{graphicx}
\setkeys{Gin}{height=4cm}

\begin{document}
    \begin{center}
\begin{tikzpicture}
\path   (0,0)           node (cardbox)  [box, right] {\includegraphics{jpg/albIe7h}}
        (\linewidth,0)  node (bottle)   [box,  left] {\includegraphics{jpg/A2eDdiT}};
\node (n1) [note={-9mm,1mm},
            right=of cardbox.east]
           {This is a box\\ Ceci est une boîte};
\node (n2) [note={17mm,2mm},
            below=of n1]
           {That's a bottle\\ Celà est une bouteille};

\end{tikzpicture}
    \end{center}
\lipsum[66]
    \begin{center}
\begin{tikzpicture}
\path   (0,0)           node (cardbox)  [box, right] {\includegraphics{jpg/albIe7h}}
        (\linewidth,0)  node (bottle)   [box,  left] {\includegraphics{jpg/A2eDdiT}};
\node (n1) [note={-9mm,1mm},
            right=of cardbox.east]
           {This is a box\\ Ceci est une boîte};
\node (n2) [note={17mm,2mm},
            below=of n1]
           {That's a bottle\\ Celà est une bouteille};
\end{tikzpicture}
    \end{center}
\lipsum[66]
    \begin{center}
\begin{tikzpicture}
\path   (0,0)           node (cardbox)  [box, right] {\includegraphics{jpg/albIe7h}}
        (\linewidth,0)  node (bottle)   [box,  left] {\includegraphics{jpg/A2eDdiT}};
\node (n1) [note={-9mm,1mm},
            right=of cardbox.east]
           {This is a box\\ Ceci est une boîte};
\node (n2) [note={17mm,2mm},
            below=of n1]
           {That's a bottle\\ Celà est une bouteille};
\end{tikzpicture}
    \end{center}
\end{document}

在此处输入图片描述

(红线表示页面布局)

从 MWE 中可以看到,图像元素样式的定义已移至 中的前言中\tikzset。这样就无需在每张图片上重复了。

从图片中您可以看到,图像很好地适合左右文本边框之间,并且页面上的第一个图像位于文本区域的顶部。

我的结论:

  • 图像代码按预期工作,您只需正确插入文档即可(我使用center环境,但您可以使用例如figure浮点数或其他一些。
  • 我无法弄清楚,你的问题到底是什么(正如我在回答开始时提到的那样)。
  • 不清楚您的表格和tcolorboxes 在哪里,以及它们与这些图像或您的问题有什么关系。请通过编辑您的问题来澄清这一点

附录: 上述答案的小改进。现在通知与左边缘的距离相同,为左侧和右侧定向注释以及带有图像的左侧和右侧框定义了单独的样式。让我强调一下,所有这些都是基于猜测 OP 想要什么:

\documentclass[a4paper]{scrartcl}
\usepackage[margin=20mm]{geometry}
\setlength\parindent{0pt}

%---------------- Show page layout. Don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%
\usepackage{lipsum}% For dummy text. Don't use in a real document

\usepackage{tikz}
\usetikzlibrary{positioning,
                shapes.callouts
                }
\tikzset{
node distance = 2mm and 55mm,
    boxL/.style = {inner sep=0pt, below #1, anchor=north west},
    boxR/.style = {inner sep=0pt, anchor=north east},
noteBase/.style = {rectangle callout, callout pointer width=4mm,
                   draw=blue, ultra thick, line join=round,
                   text width=32mm, minimum height=2.2\baselineskip, inner sep=2mm},
   noteL/.style = {noteBase, callout relative pointer={(-11mm,1mm)}},
   noteR/.style = {noteBase, callout relative pointer={(+17mm,2mm)}},
        }
\usepackage{graphicx}
\setkeys{Gin}{height=4cm}

\begin{document}
\begin{tikzpicture}
\path   (0,0)           node (n1)  [boxL=right] {\includegraphics[height=3cm]{jpg/albIe7h}}
        (\linewidth,0)  node (n2)  [boxR=left] {\includegraphics{jpg/A2eDdiT}};
\node (n1) [noteL, right=of n1.west]
           {This is a box\\ Ceci est une boîte};
\node (n2) [noteR, below=of n1]
           {That's a bottle\\ Celà est une bouteille};

\end{tikzpicture}

\lipsum[66]

\medskip
\begin{tikzpicture}
\path   (0,0)           node (n1)  [boxL=right] {\includegraphics{jpg/A2eDdiT}}
        (\linewidth,0)  node (n2)  [boxR=left] {\includegraphics{jpg/albIe7h}};
\node (n3) [noteL, right=of n1.west]
           {Ceci est une boîte\\ This is a box};
\node (n4) [noteR, below=of n3]
           {That's a bottle\\ Celà est une bouteille};
\end{tikzpicture}

\medskip
\begin{tikzpicture}
\path   (0,0)           node (n1)  [boxL=right] {\includegraphics{jpg/albIe7h}}
        (\linewidth,0)  node (n2)  [boxR=left] {\includegraphics[height=2cm]{jpg/A2eDdiT}};
\node (n3) [noteL, right=of n1.west]
           {This is a box\\ Ceci est une boîte};
\node (n4) [noteR, below=of n3]
           {That's a bottle\\ Celà est une bouteille};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容