LaTeX 环境内部、之前和之后的垂直空间

LaTeX 环境内部、之前和之后的垂直空间

背景

类似的问题之前在这个论坛上也出现过,但我的问题更广泛一些。最终目标是定义一个环境,用于自动记录数学模型和计算机代码,结合文本以及可能大量的图片和表格数据。经常会遇到重复的内容,这需要精确控制环境的间距,以避免似乎排版材料中的随机垂直偏移。特别是在这些环境中:、、、、、、、、和。equation通过精确控制间距align,我的意思是例如能够关闭所有间距gathertablefigureverbatimenumerateitemizedescription(lst)listing

理想情况下,我想要一个 LaTeX 环境,它可用于包装上述环境、为内容添加标题并将信息写入 TOC 文件。此外,包装器还应有两个版本:一个允许分页,另一个将内容视为 LaTeX 浮动对象。所以,我可能需要两个包装器...

有可能以这种精度控制 LaTeX 吗?我是说实际上,而不是理论上?我知道 LaTeX 不是为网格排版而设计的,但我用 LaTeX 进行了很多不同的写作,我想尝试一下。

例子

为了明确我的问题,我制作了几个工作示例,分别使用align*包装内部\begingroup...\endgroup和用户定义的环境来说明情况myfloat。 我已尽力消除输出中的所有垂直间距,但标题和align*环境之间有一个我无法解释的空格:

在 <code>myfloat</code> 内外放置 <code>equation</code> 标题的效果

在代码底部注释掉两行,该示例也适用于itemize。在这种情况下,环境末尾有一个空格itemize,我无法解释:

在 <code>myfloat</code> 内外放置 <code>itemize</code> 列表标题的效果

注意:示例对于两种不同的页面几何图形有意义。一种几何图形在同一页面上并排排版环境(如上所示),另一种几何图形在两个单独的页面上排版环境(带有分栏符)。要查看效果,您必须在序言中注释掉两行代码。

代码

  \documentclass[10pt,english]{article}

  \usepackage[utf8]{inputenc}
  \usepackage{multicol}
  \usepackage{caption}
  \usepackage{amsmath}
  \usepackage{float}
  \usepackage{enumitem}

% Page Layout
  \setlength{\topmargin}{0pt}
  \setlength{\topskip}{0pt}

% Paragraphs
  \setlength{\parindent}{0pt}
  \setlength{\parskip}{0pt}
  \setlength{\parsep}{0pt}
%
% https://tex.stackexchange.com/questions/188568/
% what-does-normallineskiplimit-do
%
% https://tex.stackexchange.com/questions/21676/
% an-equation-skip-problem-amsmath-package-and-above-belowdisplayskip/21694
%
% https://tex.stackexchange.com/questions/49072/
% is-changing-lineskiplimit-to-some-negative-value-a-good-idea-and-what-the-valu
%
  \setlength{\normallineskiplimit}{0pt}
  \setlength{\lineskiplimit}{0pt} 
  \setlength{\normalbaselineskip}{0pt}
  \setlength{\baselineskip}{0pt}
  \setlength{\normallineskip}{0pt}
  \setlength{\lineskip}{0pt}

% Floats
  \floatstyle{plaintop}
  \newfloat{myfloat}{H}{loe}
  \floatname{myfloat}{}
%
  \setlength{\floatsep}{0pt}
  \setlength{\textfloatsep}{0pt}
  \setlength{\intextsep}{0pt}
  \setlength{\dbltextfloatsep}{0pt}
  \setlength{\dblfloatsep}{0pt}
  \setlength{\abovecaptionskip}{0pt}
  \setlength{\belowcaptionskip}{0pt}

% Math
  \setlength{\abovedisplayskip}{0pt}
  \setlength{\belowdisplayskip}{0pt}
  \setlength{\abovedisplayshortskip}{0pt}
  \setlength{\abovedisplayskip}{0pt}
%
% https://tex.stackexchange.com/questions/69662/
% how-to-globally-change-the-spacing-around-equations
%
  \expandafter\def\expandafter\normalsize\expandafter{%
    \normalsize%
    \setlength{\abovedisplayshortskip}{0pt}%
    \setlength{\abovedisplayskip}{0pt}%
    \setlength{\belowdisplayshortskip}{0pt}%
    \setlength{\belowdisplayskip}{0pt}%
  }

% Lists
  \setlist{nolistsep}
%
  \setlength{\topsep}{0pt}
  \setlength{\partopsep}{0pt}
  \setlength{\itemsep}{0pt}

% ----------------------------------------------
% Environments typeset on separate pages
% ----------------------------------------------
% \usepackage[width=100mm,height=30mm]{geometry}

% ----------------------------------------------
% Environments typeset side-by-side on same page
% ----------------------------------------------
  \usepackage[width=100mm,height=60mm]{geometry}

% ----------------------------------------------
% Example table
% ----------------------------------------------
  \def\EQN{%
  \begin{align*}
    \allowdisplaybreaks
    f(x) & = e^{ix} \\
    f(x) & = e^{ix} \\
    f(x) & = e^{ix} \\
    f(x) & = e^{ix} \\
    f(x) & = e^{ix} \\
    f(x) & = e^{ix}
  \end{align*}
  }

% ----------------------------------------------
% Example list
% ----------------------------------------------
  \def\LST{%
  \begin{itemize}
    \item $ f(x) = e^{ix} $
    \item $ f(x) = e^{ix} $
    \item $ f(x) = e^{ix} $
    \item $ f(x) = e^{ix} $
    \item $ f(x) = e^{ix} $
    \item $ f(x) = e^{ix} $
    \item $ f(x) = e^{ix} $
    \item $ f(x) = e^{ix} $
  \end{itemize}
  }

% ----------------------------------------------
% Some text
% ----------------------------------------------
  \def\TXT{%
  Lorem ipsum dolor sit amet, 
  consectetur adipisicing elit, 
  sed do eiusmod tempor incididunt 
  ut labore et dolore magna aliqua. 
  }

\begin{document}
\begin{multicols}{2}
\raggedcolumns%
%
\begingroup
  \captionof*{myfloat}{Caption outside myfloat}%
  \allowdisplaybreaks%
  \EQN%
% \LST%
\endgroup
%
\TXT%
\vfill%
%
\begin{myfloat}[H]
  \caption*{Caption inside myfloat}%
  \EQN%
% \LST%
\end{myfloat}
%
\TXT%
\vfill%
%
\end{multicols}
\end{document}

相关内容