出现这种现象的原因是float
宏包的H
参数
由于H
参数让LaTeX
在排版浮动体时直接Let it Here!,因此可能导致出现破坏当前版面样式(layout)的情况出现。 这种情况在LaTeX
看来是很丑(high badness)的,设想连续的三个页面,第一面正常版面,第二面版面被破坏,第三面版面恢正常,这对连续的读者来说会由于视觉冲击带来不适。
来自@u40 啸行老师:
作为论文的写作者应该更关注内容,这里最简单的方式是将内容缩短,例如“把浮动体里面的算法精炼,用多个算法嵌套来描述”,“算法里关于 encoder 的定义就应该是正文里该给的,放正文也许会更好” 只要缩短一行,就可以把section
和algorithm
缩在同一页内
来自Srik 老师:
从行文来讲,在section
后应该至少有一段文本。
换言之,你需要在这两种情况中做出取舍。
强制使用H
让浮动体排版影响layout(出现空白页):
而如果使用htbp
,LaTeX
可以通过动态规划给浮动体确定这样的排版:
但实际的排版中,有的观点认为:如果一个结构需要caption
,那么他就应该是浮动的,应该让TeX
决定其位置。这无伤大雅,因为我们总可以通过\ref{<label>}
来找到和跳转到他,而不用关心它是不是在你行文所需的位置。
因此如果你这一章节的语义上如下所示,我个人觉得不要使用H
指定是更好的选择,如下完全可以通过algorithm 1来指代浮动体,也许可以改一下观念(?)。对于我个人来说,如非必要,我不会强迫使用float
的H
参数。
\documentclass{mcmthesis}
\geometry{showframe}
\usepackage{times}
\usepackage{algorithm}
\usepackage{algorithmic}
\usepackage{float}
\usepackage{lastpage}
\usepackage{lipsum}
\begin{document}
\section{Model I: Comprehensive Filtering Algorithm Based on ResNet-Autoencoder Convolutional Network and W-SG}
This a paragraph of text.
\lipsum[1]
Then we will use the cite the algorithm \ref{alg:an alggggg} float here.
\begin{algorithm}[htbp]
\caption{Signal Preprocessing and Autoencoder Processing}\label{alg:an alggggg}
\textbf{Input:}\\
\setlength{\parindent}{1em}
\indent Raw signal $X \in \mathbb{R}^{N \times M}$ \\
\indent Savitzky-Golay filter parameters $(\text{window\_length}, \text{polyorder})$ \\
\indent Wavelet decomposition parameters $(\text{wavelet}, \text{level})$ \\
\textbf{Output:}\\
\indent Filtered signal $X_{\text{filtered}} \in \mathbb{R}^{N \times M}$ \\
\indent Latent representation $Z \in \mathbb{R}^{N \times K}$ \\
\indent Reconstructed signal $X_{\text{reconstructed}} \in \mathbb{R}^{N \times M}$
\begin{algorithmic}[1]
\STATE \textbf{Step 1: Encoder Module.}
$$
\text{Encoder}(X) =
\begin{cases}
\text{Conv1D}(X, 64, \text{kernel\_size}=3, \text{padding}=1) \rightarrow \text{ReLU} \\
\text{Conv1D}(64, 32, \text{kernel\_size}=3, \text{padding}=1) \rightarrow \text{ReLU} \\
\text{Conv1D}(32, 16, \text{kernel\_size}=3, \text{padding}=1)
\end{cases}
$$
\STATE \textbf{Step 2: Decoder Module.}
$$
\text{Decoder}(Z) =
\begin{cases}
\text{Conv1D}(Z, 32, \text{kernel\_size}=3, \text{padding}=1) \rightarrow \text{ReLU} \\
\text{Conv1D}(32, 64, \text{kernel\_size}=3, \text{padding}=1) \rightarrow \text{ReLU} \\
\text{Conv1D}(64, M, \text{kernel\_size}=3, \text{padding}=1)
\end{cases}
$$
\STATE \textbf{Step 3: Smooth Signal Using Savitzky-Golay Filter.}
$$
X_{\text{smooth}}[i] = \text{Savgol}(X[i], \text{window\_length}, \text{polyorder}), \; \forall i \in \{1, \dots, N\}
$$
\STATE \textbf{Step 4: Perform Wavelet Decomposition and Thresholding.}
$$
\text{coeffs} = \text{wavedec}(X_{\text{smooth}}, \text{wavelet}, \text{level})
$$
$$
\text{threshold} = \sqrt{2 \ln(N)} \cdot \frac{\text{median}(|\text{coeffs}[-1]|)}{0.6745}
$$
$$
\text{denoised\_coeffs}[k] = \text{threshold}(\text{coeffs}[k], \text{threshold}, \text{mode}=\text{soft}), \; \forall k
$$
\STATE \textbf{Step 5: Reconstruct Signal After Filtering.}
$$
X_{\text{filtered}} = \text{waverec}(\text{denoised\_coeffs}, \text{wavelet})
$$
\STATE \textbf{Step 6: Encode and Reconstruct.}
$$
Z = \text{Encoder}(X_{\text{filtered}})
$$
$$
X_{\text{reconstructed}} = \text{Decoder}(Z) + X_{\text{filtered}}
$$
\STATE \textbf{Output:} Return $X_{\text{filtered}}$, $Z$, and $X_{\text{reconstructed}}$.
\end{algorithmic}
\end{algorithm}
Then Followed the text after the algorithm...
\lipsum[1-8]
\end{document}
以上仅仅是个人看法和一些搬运,如有错漏欢迎指出以及讨论。
问 为什么插入算法前边出现一页空白?