有太多帖子抱怨 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
以允许直接输入浮点环境。
然而,鉴于这些注意事项,我不确定这种方法是否有用。但我想你可以自己决定。