背景
类似的问题之前在这个论坛上也出现过,但我的问题更广泛一些。最终目标是定义一个环境,用于自动记录数学模型和计算机代码,结合文本以及可能大量的图片和表格数据。经常会遇到重复的内容,这需要精确控制环境的间距,以避免似乎排版材料中的随机垂直偏移。特别是在这些环境中:、、、、、、、、和。equation
通过精确控制间距align
,我的意思是例如能够关闭所有间距gather
。table
figure
verbatim
enumerate
itemize
description
(lst)listing
理想情况下,我想要一个 LaTeX 环境,它可用于包装上述环境、为内容添加标题并将信息写入 TOC 文件。此外,包装器还应有两个版本:一个允许分页,另一个将内容视为 LaTeX 浮动对象。所以,我可能需要两个包装器...
有可能以这种精度控制 LaTeX 吗?我是说实际上,而不是理论上?我知道 LaTeX 不是为网格排版而设计的,但我用 LaTeX 进行了很多不同的写作,我想尝试一下。
例子
为了明确我的问题,我制作了几个工作示例,分别使用align*
包装内部\begingroup...\endgroup
和用户定义的环境来说明情况myfloat
。 我已尽力消除输出中的所有垂直间距,但标题和align*
环境之间有一个我无法解释的空格:
在代码底部注释掉两行,该示例也适用于itemize
。在这种情况下,环境末尾有一个空格itemize
,我无法解释:
注意:示例对于两种不同的页面几何图形有意义。一种几何图形在同一页面上并排排版环境(如上所示),另一种几何图形在两个单独的页面上排版环境(带有分栏符)。要查看效果,您必须在序言中注释掉两行代码。
代码
\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}