是否可以在乳胶图中制作一个 3×3 的网格图,然后只标记列和行,而不需要为每行添加标题?例如,我希望将列标记为 A、B 和 C,将行标记为 1、2 和 3。然后我就可以将正方形 (2, B) 引用为中间正方形。
我正在使用一个包含 9 个子图环境的图形环境
\begin{figure*}[t]
\begin{subfigure}{0.3\textwidth}
\includegraphics[width=\linewidth]{/path/to/img1}
\end{subfigure}%
\begin{subfigure}{0.3\textwidth}
\includegraphics[width=\linewidth]{/path/to/img2}
\end{subfigure}%
\begin{subfigure}{0.3\textwidth}
\includegraphics[width=\linewidth]{/path/to/img3}
\end{subfigure}
\begin{subfigure}{0.3\textwidth}
\includegraphics[width=\linewidth]{/path/to/img4}
\end{subfigure}%
\begin{subfigure}{0.3\textwidth}
\includegraphics[width=\linewidth]{/path/to/img5}
\end{subfigure}%
\begin{subfigure}{0.3\textwidth}
\includegraphics[width=\linewidth]{/path/to/img6}
\end{subfigure}
\begin{subfigure}{0.3\textwidth}
\includegraphics[width=\linewidth]{/path/to/img7}
\caption{Smad7 reproduced}
\end{subfigure}%
\begin{subfigure}{0.3\textwidth}
\includegraphics[width=\linewidth]{/path/to/img8}
\end{subfigure}%
\begin{subfigure}{0.3\textwidth}
\includegraphics[width=\linewidth]{/path/to/img9}
\end{subfigure}
\caption{}
\end{figure*}
答案1
您可以使用 tikz 包来创建一个或多个foreach
循环以及所需的计算。
foreach 命令
\foreach
是启动循环的命令。它的语法是\foreach \x in {list} {commands}
,\x 可以是任何我们想要的变量名(如 \row 或 \col),列表可以是用逗号分隔的完整列表(如{1, item 2, third item, 4}
),或者如果它只是数字,可以用点来完成(如 {1,2,...,9} 或 {3,6,...,15})。commands
可以是您想要重复的许多命令(它就像 python 的 for 循环)。注意:foreach 循环在环境中运行,并且可以使用的命令存在一些限制,但目前这是某种高级信息。
pgfmathsetmacro 命令
\pgfmathsetmacro
是包含在所加载包中的命令,tikz
用于为变量提供数值(浮点数或整数)。如果您想要整数结果,则必须将操作放在int()
函数内部。我使用此命令来计算变量\totalCount
(即数字的计数器 - 此处从 1 到 9 -)并确定是否要在当前图像后开始新行(\newRow
对于这些 \totelCount 值,变量为 0.0,可以精确除以 3 - 请参阅 python modulo ...我认为 pgfmathsetmacro 也有一个模数,但我没有使用它-)。
附加信息:
要在 python 中检查某些内容,您可以使用条件语句,例如if
... 在 LaTeX 中使用相同的语句,但是对于整数,它是\ifnum...\else...\fi
,对于浮点数,我们可以使用\ifdim...\else...\fi
。(dim
来自维度,因为对于 LaTeX 浮点数大多数时候用作长度(因此在下面的命令中添加了一个 pt \ifdim
))
最后一部分是\xdef
扩展其结果后定义一个变量并使其成为全局变量的命令(这是一个大故事...请搜索“latex def、edef、gdef 和 xdef”等)
代码如下:
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{subcaption}
\usepackage{hyperref}
\usepackage{nameref}
\usepackage{cleveref}
\usepackage{graphicx}
\usepackage{tikz}
%opening
\title{}
\author{Kostis Leledakis}
\newcounter{myfigcol}
\newcounter{myfigrow}
\def\myspace{\hspace{5pt}}
\begin{document}
\begin{figure*}[t]
\foreach \row in {1,2,3} {%
\foreach \col in {1,2,3} {%
\setcounter{myfigcol}{\col}%
\setcounter{myfigrow}{\row}%
\pgfmathsetmacro\totalCount{int(\col+(\row-1)*3)}%
\xdef\totalC{\totalCount}%
\pgfmathsetmacro\newRow{\col/3-int(\col/3)}%
\xdef\rowC{\alph{myfigcol}}%
\xdef\colC{\arabic{myfigrow}}%
\renewcommand\thesubfigure{\rowC-\colC}%
\begin{subfigure}{0.3\textwidth}%
\includegraphics[width=\linewidth]{example-image-\rowC}%
\caption{\centering Smad\totalC{} reproduced or image: (\rowC-\colC) etc}\label{fig:First\totalC}%
\end{subfigure}\ifdim\newRow pt = 0pt\space\else\myspace\fi%
}
}
\caption{My First figure}\label{fig:First}
\end{figure*}
In the figure \ref{fig:First3} included inside \nameref{fig:First} as :\nameref{fig:First3} or else in \Cref{fig:First3}
\end{document}
输出:
我使用:example-image-\rowC
作为我的图像,但你可以使用
/path/to/image\totalC
如需更多或更多具体信息,请随时询问。