将两个图形放在一起,中间没有空格

将两个图形放在一起,中间没有空格

(该问题与图表、标题等无关)

gra1将两个图形并排放置很容易,gra2这样它们就可以沿着边界框的左右垂直边相互接触,

\includegraphics{gra1}\includegraphics{gra2}

足以实现目标(两个图形将被排列为G1G2中间没有空格)。

如果想将它们一个接一个地放在一起,使它们沿着水平边互相接触,该怎么办?它们应该像这样排列

G1
G2

它们之间没有空格。有什么方法可以做到这一点,并且像以前一样清晰、简单(不需要任何包)?

我知道,建立新生产线并不是解决方案,原因有二:

  1. 当两个图形足够小时,由于两个图形分属于不同的线,所以它们之间会出现一个空格;
  2. 我不希望这对图形与线条有任何关联,因为我只想将其作为一个整体来使用。

我并不是在寻找TikZ解决方案。

编辑第 2 点的原因是,我将使用这两个图形包作为环境\item中的可选参数itemize。因此,我想输入类似

\newcommand{\horzcat}{\includegraphics{gra1}\includegraphics{gra2}}
\newcommand{\vertcat}{<the solution I'm looking for>}

在序言中,这样我就可以得到如下的列表,

\begin{itemize}
    \item[\horzcat] ...
    \item[\vertcat] ...
    ...
\end{itemize}

答案1

例如,\vertcat通过将图像堆叠在\vbox底部图像底部的基线来实现(参见OP的评论)。

图像是左对齐的,整体宽度是较宽图像的宽度。 \offinterlineskip删除图像之间的空间,无论是否\baselineskip\lineskip以其他方式使用。

放置图像的解决方案不需要任何进一步的软件包。相反,它是使用纯 TeX 中已有的命令和宏来实现的。

\documentclass{article}
\usepackage{graphicx}

\newcommand*{\gra}[1]{%
  \includegraphics[width=10pt]{example-image-#1}%
}

\newcommand*{\horzcat}{\gra{a}\gra{b}}
\newcommand*{\vertcat}{%
  \leavevmode
  \vbox{% baseline is at the bottom
    \offinterlineskip % disable line skip
    \hbox{\gra{a}}%
    \hbox{\gra{b}}%
  }%
}

\begin{document}
\begin{itemize}
  \item[\horzcat] side by side
  \item[\vertcat] one above the other
\end{itemize}
\end{document}

结果

答案2

这很简单:

在此处输入图片描述

\documentclass{article}
\usepackage{graphicx}
\begin{document}
\centering
\includegraphics[width=0.5\linewidth]{example-image-a}\\% <-- force next image in new line
\includegraphics[width=0.5\linewidth]{example-image-b}
\end{document}

希望我理解正确:-)

附录: 不幸的是,我没有正确理解问题,同时你收到了两个很好的答案。无论如何,考虑一下大卫·卡莱尔在下面评论,我可以采用我的答案:

\documentclass{article}
\usepackage{graphicx}

\begin{document}
\centering
\parbox{0.5\linewidth}{\setlength\lineskip{0pt}
\includegraphics[width=\linewidth]{example-image-a}
\includegraphics[width=\linewidth]{example-image-b}
                        }
\end{document}

现在图像之间没有垂直空间,也不需要\\强制图像进入新行:-)

答案3

假设图形的高度不小于 a \baselineskip,将设置\lineskip为零就可以解决问题(@DavidCarlisle 也建议这样做):

\documentclass{article}
\usepackage{graphicx}
\begin{document}

Resetting lineskip to zero:

\parbox{1cm}{%
\setlength\lineskip{0pt}
\includegraphics[width=1cm]{example-image-a}\\
\includegraphics[width=1cm]{example-image-b}
}

\bigskip

And with normal lineskip

\parbox{1cm}{%
%\setlength\lineskip{0pt}
\includegraphics[width=1cm]{example-image-a}\\
\includegraphics[width=1cm]{example-image-b}
}

\end{document}

在此处输入图片描述

答案4

您可以使用设置为零的tabular环境\arraystretch。这也适用于微小元素。以下命令的可选参数\vstack控制元素是居中、左对齐还是右对齐;元素之间用 分隔\\

\newcommand\vstack[2][c]%
  {{\renewcommand\arraystretch{0}%
    \begin{tabular}[b]{@{}#1@{}}#2\end{tabular}%
  }}

在此处输入图片描述

\documentclass{article}
\usepackage{graphicx}
\newcommand\vstack[2][c]%
  {{\renewcommand\arraystretch{0}%
    \begin{tabular}[b]{@{}#1@{}}#2\end{tabular}%
  }}
\begin{document}

\vstack[l]%
  {\includegraphics[height=3pt]{example-image-a}\\
   \includegraphics[height=5pt]{example-image-b}
  }
a
\vstack
  {\includegraphics[height=3pt]{example-image-a}\\
   \includegraphics[height=5pt]{example-image-b}
  }
b
\vstack[r]%
  {\includegraphics[height=3pt]{example-image-a}\\
   \includegraphics[height=5pt]{example-image-b}
  }

\end{document}

相关内容