将浮点数放置在指定位置

将浮点数放置在指定位置

我有一堆由程序生成的坐标和相应图形主体的文本,例如:

\includegraphics{abc.png}
\caption{abc}
\label{fig:abc}

我想知道是否有某种方法可以将图形放置在指定的绝对坐标处(例如,第 1 页,x = 245px,y = 452px)。

我见过这个问题,但它不适用于图形(不能放入框中)

至于为什么我不能只使用非浮点数,我正在使用现有文件不想经历一切并手动转换为其他内容。我在想也许这样的方法可行:

\documentclass{article}
\usepackage{capt-of}

\newcommand{\fakefigure}[1]{
    \renewcommand{\label}[1]{}
    \renewcommand{\caption}[1]{\captionof{figure}{#1}}
    #1
}

\begin{document}

\fakefigure{
    \includegraphics{abc.png}
    \caption{abc}
    \label{fig:abc}
}
\end{document}

然后我可以把在盒子里这里。但我不确定是否还有其他一些命令需要我来捕获才能使其工作。

答案1

这是使\fakefigure问题中建议的宏起作用的一种方法。好吧,至少它通过了最低限度的测试,结合Werner 关于绝对位置的回答

建议的 重新定义\caption不起作用,因为是根据 定义的capt-of。但是,可以先保存 的定义,然后在重新定义 时使用已保存的定义。\captionof\caption\caption\caption

\global\let\oldcaption\caption
\renewcommand\caption{\def\@captype{figure}\oldcaption}% modified from capt-of

我这里只允许使用figure类型元素。如果您需要将其他类型的浮点数转换为非浮点数,则需要重新设置 提供的可选参数capt-of

然后我们可以将其与Mico 的建议创建\fakefigure{}宏:

\makeatletter
\global\let\oldcaption\caption
\newcommand{\fakefigure}[1]{%
  \begin{minipage}{\textwidth}
    \renewcommand\caption{\def\@captype{figure}\oldcaption}% modified from capt-of
    #1
  \end{minipage}%
}
\makeatother

这样我们就可以写类似

\placetextbox{.35}{,3}{%
  \fakefigure{%
    \includegraphics[height=.2\textheight]{tiger}%
    \caption{abc}%
    \label{fig:abc}%
  }%
}

将 TeX 的标准老虎放置在页面上的任意位置。

老虎任意位置

\documentclass{article}
\usepackage{graphicx,kantlipsum,eso-pic}
\makeatletter
\global\let\oldcaption\caption
\newcommand{\fakefigure}[1]{%
  \begin{minipage}{\textwidth}
    \renewcommand\caption{\def\@captype{figure}\oldcaption}% modified from capt-of
    #1
  \end{minipage}%
}
\makeatother
% from Werner's answer at https://tex.stackexchange.com/a/24675/
\newcommand{\placetextbox}[3]{% \placetextbox{<horizontal pos>}{<vertical pos>}{<stuff>}
  \setbox0=\hbox{#3}% box
  \AddToShipoutPictureFG*{% Add <stuff> to current page foreground
    \put(\LenToUnit{#1\paperwidth},\LenToUnit{#2\paperheight}){\vtop{{\null}\makebox[0pt][c]{#3}}}%
  }%
}
\begin{document}
\placetextbox{0.5}{0.5}{\fbox{\Huge\textsf{This is my text.}}}
\placetextbox{0.5}{1}{\Huge\texttt{Here is another piece of text.}}
\placetextbox{0.1}{0.1}{\Large $\mathcal{A}_1$}
\placetextbox{.35}{,3}{%
  \fakefigure{%
    \includegraphics[height=.2\textheight]{tiger}%
    \caption{abc}%
    \label{fig:abc}%
  }%
}
\kant[1-3]
\end{document}

答案2

如果我理解你在寻找什么,你可能想采取以下方法:使用文本编辑器的功能,

  • 全局替换所有实例\begin{figure}

    \par\noindent\begin{minipage}{\textwidth}%
    
  • 全局替换所有实例\end{figure}

    \end{minipage}
    

  • \caption全局替换所有与图形相关的语句实例

    \captionof{figure}
    

    如果您的文档有任何table环境,请不要修改与表相关的\caption语句。

相对于(现在不再浮动的)figure环境,这仍然缺少的是 LaTeX 会根据需要在环境上方和下方插入的垂直间距。由于您似乎想将这些环境放置在页面上的任意位置,我相信这不会是一个缺点。

相关内容