让 LaTeX 决定图形的放置位置

让 LaTeX 决定图形的放置位置

有太多帖子抱怨 LaTeX 在放置数字等浮动元素方面做得不够好,以及如何解决它们([!htbp]\usepackage{float}等)。出于好奇,我不禁反过来想。如果我很满意由于 LaTeX 有定位浮动的机制,我确切地知道哪些图形我想出现在“这里”(第一次引用它们时),哪些图形我乐意放在页面顶部,哪些图形即使出现在单独的页面上我也乐意,而且我很懒惰(因为我想让 LaTeX 为我做决定),

有没有办法将所有浮点数的源代码(如果愿意,您可以将讨论限制在图形上)放在要编辑的 tex 文件中\input\include并给出所有必要的位置说明符,然后让 LaTeX 通过引用它们自动将它们插入到适当的位置?

[H]附带问题:我不明白如果人们使用包的说明符,为什么还要使用浮点数float

编辑:我更喜欢纯 LaTeX 解决方案,但如果给出 LuaLaTeX 或类似解决方案,我也不介意学习一些新东西。

编辑2:我目前考虑的实施与以下方面密切相关:将命令移动到段落开头或结尾

答案1

如果我理解正确的话,这可以很容易地实现。

\documentclass{article}

% for example images
\usepackage{mwe}

% xparse is no necessary but allows a more flexible interface design
\usepackage{xparse}
\usepackage{graphics}

\makeatletter
\NewDocumentCommand\placefig{m O{} m m}{%
    \begin{figure}%
        \centering
        \includegraphics[#2]{#3}%
        \caption{#4}%
        \label{#1}%
    \end{figure}%
}
\NewDocumentCommand\deffig{m O{} m m}{
    \expandafter\gdef\csname fig@r@#1\endcsname{%
        \placefig{#1}[#2]{#3}{#4}%
        \expandafter\global\expandafter\let\csname fig@r@#1\endcsname\relax
    }%
}
\let\old@ref\ref
\renewcommand*\ref[1]{%
    \old@ref{#1}%
    \ifcsname fig@r@#1\endcsname\csname fig@r@#1\endcsname\fi
}
\makeatother

% define the (possible) figures
\deffig{fig:ex-a}[width=.5\textwidth]{example-image-a}{This is an example image.}
\deffig{fig:ex-b}{example-image-b}{This is another example image.}

\begin{document}

This is the first reference to fig.~\ref{fig:ex-a} in the document.

Here, we reference fig.~\ref{fig:ex-a} again.

\end{document}

示例的输出。

如果您使用修改引用机制的包(如hyperref),则必须\ref相应地调整的修改。

请注意,在不允许浮动的位置(例如表格内)允许引用。您可以添加更多命令以允许放置定义的浮动而不引用它,从而规避此问题。

如果您不希望所有浮点数都遵循一种模式(由给出\placefig),您可以进行修改\deffig以允许直接输入浮点环境。

然而,鉴于这些注意事项,我不确定这种方法是否有用。但我想你可以自己决定。

相关内容