目前面临两个小问题。
首先,我创建了一个自定义命令,让我可以在左侧放置图像,在右侧放置文本。我将其命名为 \imtxtopt。除了一个小问题外,它运行良好。
迷你盒子之间不存在差距。
我将两个迷你盒子嵌套在另一个迷你盒子中,但这也无济于事。然后我添加了 \vspace,这有助于解决我的问题:
但是,现在的问题是每个 \imtxtopt 的末尾都有一些额外的空间(这是可以接受的),如果我堆叠多个 \imtxtopt 命令,我不希望最后一个 \imtxtopt 有这些空间。我知道我可以创建另一个没有 \vspace 的命令,但是是否有可能有一个 if/else 语句类型的解决方案?简而言之,我希望每个 \imtxtopt 之间以及下一个段落和前一个 \imtxtopt 之间的间距保持一致。我试图找出是否有办法在 LaTeX 中全局添加迷你框之间的分隔,但没有成功。
第二个问题是,如果我不使用 callouts 包,我会将图像大小计算作为文本的一部分(代码 3):
这是为什么?我该如何避免?我在制作 MWE 时才发现这个问题,因为我的文档中默认已经包含标注,所以我没有注意到这是一个问题。
代码如下:
代码1:
% Default Template and Font Size
\documentclass{article}
% Set Margins of the Document
\usepackage[a4paper,bindingoffset=0in,left=2.54cm,right=2.54cm,top=3.8cm,bottom=2.5cm,footskip=.25in]{geometry}
% Special container for image on left and text on right with options
\newcommand\imtxtopt[4]{
\begin{minipage}{#1}
\centering
\includegraphics[#2]{#3}
\end{minipage}\quad
\begin{minipage}{\textwidth-#1-1em}
#4
\end{minipage}
}
\usepackage{lipsum}
% Annotations
\usepackage{callouts}
\usepackage{graphicx}
\begin{document}
\section{Test 1}
\imtxtopt{2cm}{width=2cm}{example-image}{\lipsum[1]}
\imtxtopt{2cm}{width=2cm}{example-image}{\lipsum[1]}
\imtxtopt{2cm}{width=2cm}{example-image}{\lipsum[1]}
\lipsum[1]
\end{document}
代码2:
% Default Template and Font Size
\documentclass{article}
% Set Margins of the Document
\usepackage[a4paper,bindingoffset=0in,left=2.54cm,right=2.54cm,top=3.8cm,bottom=2.5cm,footskip=.25in]{geometry}
% Special container for image on left and text on right with options
\newcommand\imtxtopt[4]{
\begin{minipage}[H]{\textwidth}
\begin{minipage}{#1}
\centering
\includegraphics[#2]{#3}
\end{minipage}\quad
\begin{minipage}{\textwidth-#1-1em}
#4
\end{minipage}
\vspace{6pt}
\end{minipage}
}
\usepackage{lipsum}
% Annotations
\usepackage{callouts}
\usepackage{graphicx}
\begin{document}
\section{Test 1}
\imtxtopt{2cm}{width=2cm}{example-image}{\lipsum[1]}
\imtxtopt{2cm}{width=2cm}{example-image}{\lipsum[1]}
\imtxtopt{2cm}{width=2cm}{example-image}{\lipsum[1]}
\lipsum[1]
\end{document}
代码3:
% Default Template and Font Size
\documentclass{article}
% Set Margins of the Document
\usepackage[a4paper,bindingoffset=0in,left=2.54cm,right=2.54cm,top=3.8cm,bottom=2.5cm,footskip=.25in]{geometry}
% Special container for image on left and text on right with options
\newcommand\imtxtopt[4]{
\begin{minipage}{#1}
\centering
\includegraphics[#2]{#3}
\end{minipage}\quad
\begin{minipage}{\textwidth-#1-1em}
#4
\end{minipage}
}
\usepackage{lipsum}
% Annotations
%\usepackage{callouts}
\usepackage{graphicx}
\begin{document}
\section{Test 1}
\imtxtopt{2cm}{width=2cm}{example-image}{\lipsum[1]}
\imtxtopt{2cm}{width=2cm}{example-image}{\lipsum[1]}
\imtxtopt{2cm}{width=2cm}{example-image}{\lipsum[1]}
\lipsum[1]
\end{document}
答案1
如果您不使用 callouts 包,您会将图像大小计算结果作为文本的一部分,原因是图像大小计算结果未包装到 中\dimexpr...\relax
。
您的小页面的内容是垂直居中的。这意味着:由您的小页面形成的框的基线垂直位于这些框的中间。因此这些框具有很大的深度,这会影响 LaTeX 垂直放置这些框的方式。
我建议不要使用小页面,而是使用自己的盒子测量方法来对齐图像,同时将文本放在普通的\vbox
es 中,其深度将是它们所包含的最后一行文本的深度。
% Default Template and Font Size
\documentclass{article}
\newbox\mytempboxa
\newbox\mytempboxb
% Set Margins of the Document
\usepackage[a4paper,bindingoffset=0in,left=2.54cm,right=2.54cm,top=3.8cm,bottom=2.5cm,footskip=.25in]{geometry}
\makeatletter
% Special container for image on left and text on right with options
\newcommand\imtxtopt[4]{%
\setbox\mytempboxa=\vbox{%
\hsize=#1\relax
\centering
\includegraphics[#2]{#3}%
}%
\setbox\mytempboxb=\vbox{%
\hsize=\dimexpr\textwidth-\wd\mytempboxa-1em\relax
\noindent#4%
}%
\ifdim\ht\mytempboxa<\ht\mytempboxb\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
{%
\setbox\mytempboxa=\vbox to \ht\mytempboxb{%
\hsize=#1\relax
\centering
\vfill
\includegraphics[#2]{#3}%
\vfill
}%
}{%
\setbox\mytempboxb=\vbox to \ht\mytempboxa{%
\hsize=\dimexpr\textwidth-\wd\mytempboxa-1em\relax
\vfill#4\vfill
}%
}%
\par\hbox to\textwidth{%
\box\mytempboxa\hfill\box\mytempboxb\strut
}%
}%
\makeatother
\usepackage{lipsum}
\usepackage{graphicx}
\begin{document}
\section{Test 1}
\imtxtopt{2cm}{width=2cm}{example-image}{\lipsum[1]}
% Do whatever \vskip you want.
%\smallskip
\imtxtopt{2cm}{width=2cm}{example-image}{\lipsum[1]}
% Do whatever \vskip you want.
%\smallskip
\imtxtopt{2cm}{width=2cm}{example-image}{\lipsum[1]}
\lipsum[1]
\end{document}