总体概述
我尝试在小页面的每个角落放置不同的元素。
平均能量损失
\documentclass[a4paper,12pt]{article}
\usepackage{graphicx}
\usepackage{picture}
\usepackage{calc}
\begin{document}
\begin{minipage}{8.5cm}
\setlength{\unitlength}{1cm}
\begin{picture}(0,0)
\put(-0.5,0){\includegraphics[width=0.5cm]{example-image-a}} % NO
\put(8.5,0){\includegraphics[width=0.5cm]{example-image-b}} %NE
\put(-0.5,-\textheight){\includegraphics[width=0.5cm]{example-image-c}} %SO
\put(8.5,-7){\includegraphics[width=0.5cm]{example-image-a}} % SE
\end{picture}
\noindent Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
\end{minipage}
\end{document}
渲染
问题
如您所见,我可以定义水平位置,因为我知道总宽度(因为minipage
环境迫使我声明它)。但我无法提前知道小页面的高度。
理想情况下,我应该能够捕获变量中的该值,以便在坐标中使用它。相反,我使用了它,\textheight
但它给出了羊毛页面文本的高度,而不仅仅是迷你页面框的高度。
问题
如何捕获变量内部小型页面的高度以便在小型页面本身内使用它?
或者那么,如何通过另一种方式将元素放在每个角落?
答案1
tikzmark
该包的库允许tikz
在节点的四个角寻址和放置材料tikz
,如本例所示。
看蒂克兹马克doc(许多例子)。
命令 \tikzmarknode{<name>}{<content>}
命令将输出 内容并创建一个名为姓名。
然后,您可以使用名称.东北右上角的命名法;名称.西南左下角等等
显然,可以通过定义新命令或新环境来合并这两个步骤。
\documentclass[a4paper,12pt]{article}
\usepackage{tikz}% <<<<<<<<<<<
\usetikzlibrary{tikzmark}% <<<<<<<<<<<
\begin{document}
\tikzmarknode{mini}{\begin{minipage}{8.5cm}Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\end{minipage}}
\begin{tikzpicture}[remember picture, overlay]
\node at (mini.north east) {X};
\node at (mini.north west) {X};
\node at (mini.south east) {X};
\node at (mini.south west) {X};
\end{tikzpicture}
\end{document}
在以下示例中,添加了四幅具有一些 xy 偏移的图像。
\documentclass[a4paper,12pt]{article}
\usepackage{tikz}% <<<<<<<<<<<
\usetikzlibrary{tikzmark}% <<<<<<<<<<<
\begin{document}
\tikzmarknode{mini}{\begin{minipage}{8.5cm}Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\end{minipage}}
\begin{tikzpicture}[remember picture, overlay]
\node[shift={(1em, 1ex)}, at=(mini.north east)] {\includegraphics[width=0.5cm]{example-image-b}};
\node[shift={(-1em, 1ex)}, at=(mini.north west)] {\includegraphics[width=0.5cm]{example-image-a}};
\node[shift={(1em, -1ex)}, at=(mini.south east)] {\includegraphics[width=0.5cm]{example-image-a}};
\node[shift={(-1em, -1ex)}, at=(mini.south west)] {\includegraphics[width=0.5cm]{example-image-c}};
\end{tikzpicture}
\end{document}
您可以简化编写xy偏移通过向节点添加内部空间。尝试
\tikzmarknode[inner sep=1ex]{mini}{\begin{minipage}{8.5cm}Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\end{minipage}}
在第一个例子中。
答案2
我们可以利用lrbox
环境将环境捕捉到一个盒子里,以后可以用来测量。
接下来我们要做的就是确保将所有这些东西放在正确的位置。
我在这里假设每边的角落图像具有相同的宽度,因为这样放置它们会变得非常容易。
这样,图像就不会突出到其他文本区域。
如果您需要访问minipage
环境的 optiona 参数,则当然需要调整环境定义。
我还使整个构造成为一个独立的段落,但细节以后仍可更改。
代码
\documentclass[a4paper, 12pt]{article}
\usepackage{graphicx}
\makeatletter
\newsavebox\@tempboxb
\NewDocumentEnvironment{minipagewithfourimages}{m mmmm}{%
\begin{lrbox}{\@tempboxb}%
\begin{minipage}{#1}%
}{%
\end{minipage}%
\end{lrbox}%
\par\noindent\leavevmode\noindent
\rlap{\raisebox{\ht\@tempboxb}{#2}}%
\sbox\@tempboxa{#3}%
\raisebox{\dimexpr-\dp\@tempboxb-\ht\@tempboxa}{\usebox\@tempboxa}%
\usebox\@tempboxb
\rlap{\raisebox{\ht\@tempboxb}{#4}}%
\sbox\@tempboxa{#5}%
\raisebox{\dimexpr-\dp\@tempboxb-\ht\@tempboxa}{\usebox\@tempboxa}%
\par
}
\begin{document}
Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
\begin{minipagewithfourimages}{8.5cm}{\includegraphics[width=0.5cm]{example-image-a}}
{\includegraphics[width=0.5cm]{example-image-b}}
{\includegraphics[width=0.5cm]{example-image-c}}
{\includegraphics[width=0.5cm]{example-image-a}}
Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.
\end{minipagewithfourimages}
Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
\end{document}