如何根据预定义的宽度有条件地定义图像/表格是否应占用一列或两列

如何根据预定义的宽度有条件地定义图像/表格是否应占用一列或两列

我第一次在这里发布问题,我想提前感谢您的帮助;)继续我的问题,我想做以下事情:

\newcommand{\my_image_width}{300}
###
###
###
if(\my_image_width > \columnwidth){
    \begin{figure*}[htc]
        \begin{center}
           \includegraphics[width=\my_image_width pt]{path/to/my/image.png}
           \caption[]{My figure occupies two columns}
        \end{center}
    \end{figure*}
}
else{
    \begin{figure}[htc]
        \begin{center}
           \includegraphics[width=\my_image_width pt]{path/to/my/image.png}
           \caption[]{My figure occupies one column}
        \end{center}
    \end{figure}
}

请记住,这可以是图像或表格。为了澄清起见,我的主要问题是如何针对列宽和变量使用这种“if”。

答案1

请考虑该命令\Figure[][]{}{},它将接受四个参数,其中第一个选项是可选的。该宏将把带有比例参数的图像放在一个框内,如果框的宽度大于,\columnwidth则将figure*使用它来代替figure环境。宏的参数:

  1. 通过此选项可以提供键值选项来缩放图形,对齐图形,以及各种垂直跳过(例如图形的上方、中间和下方跳过)。
  2. 浮标的位置。
  3. 图形的名称。
  4. 字幕文字。

您可以提供以下键值选项:

  1. scale:缩放图像
  2. align:值应为centeringraggedleftraggedright
  3. aboveskip:跳过上面的图片
  4. middleskip:在图片和标题之间切换
  5. belowskip:跳过下面的图片

    \documentclass[twocolumn]{article}
    
    \RequirePackage{xkeyval}
    \RequirePackage{graphicx}
    \RequirePackage{lipsum}
    
    \makeatletter
    \fboxsep=0pt\fboxrule=1pt
    \def\fig@default{%
      \def\fig@scale{1}%
      \def\fig@align{centering}%
      \def\fig@aboveskip{0pt}%
      \def\fig@belowskip{0pt}%
      \def\fig@middleskip{10pt}%
    }
    \define@key{fig}{scale}{\def\fig@scale{#1}}
    \define@key{fig}{align}{\def\fig@align{#1}}
    \define@key{fig}{aboveskip}{\def\fig@aboveskip{#1}}
    \define@key{fig}{belowskip}{\def\fig@belowskip{#1}}
    \define@key{fig}{middleskip}{\def\fig@middleskip{#1}}
    \def\Figure{\@ifnextchar[{\@Figure}{\@Figure[scale=1]}}
    \def\@Figure[#1][#2]#3#4{\fig@default%
      \setkeys{fig}{#1}%
      \global\setbox0\hbox{\includegraphics[scale=\fig@scale]{#3}}%
      \ifdim\the\wd0>\the\columnwidth%
        \xdef\fig@env{figure*}%
      \else%
        \xdef\fig@env{figure}%
      \fi%
      \begin{\fig@env}[#2]%
      \expandafter\csname\fig@align\endcsname%
      \vskip\fig@aboveskip%
      \fbox{\includegraphics[scale=\fig@scale]{#3}}%
      \vskip\fig@middleskip%
      \caption{#4}%
      \vskip\fig@belowskip%
      \end{\fig@env}%
    }
    \makeatother
    
    \begin{document}
    
    \lipsum[1-4]
    
    \Figure[scale=.3,align=raggedleft,middleskip=1pc][b!]{example-image}{Test caption.}
    
    \Figure[scale=1][t!]{example-image}{Test caption.}
    
    \lipsum
    
    \Figure[scale=.3,align=raggedleft,middleskip=1pc][b!]{example-image}{Test caption.}
    
    \lipsum[1-20]
    
    \end{document}
    

类似地,您可以为表定义一个宏。

相关内容