我(幸运地)收到了我之前的一个问题的几个答案,并且在测试每一个答案时,我注意到一个我找不到解决方案的行为。
这是我的 MWE:
\documentclass[10pt,english]{article}
\usepackage[english]{babel}
\usepackage[protrusion=true,expansion=true, tracking=true]{microtype}
\usepackage{mathptmx}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage[showframe, paperwidth=6in,paperheight=9in]{geometry}
\geometry{tmargin=1in,bmargin=1in,lmargin=1in,rmargin=1in}
\pagestyle{empty}
%Needed for bridge related tabular enviroments defined below
\usepackage{array}
\raggedbottom
%********************************************************************************
%Use MnSymbol suit symbols
\DeclareFontFamily{U}{MnSymbolCards}{}
\DeclareFontShape{U}{MnSymbolCards}{m}{n}{
<-6> s*[1.2] MnSymbolC5
<6-7> s*[1.2] MnSymbolC6
<7-8> s*[1.2] MnSymbolC7
<8-9> s*[1.2] MnSymbolC8
<9-10> s*[1.2] MnSymbolC9
<10-12> s*[1.2] MnSymbolC10
<12-> s*[1.2] MnSymbolC12}{}
\newcommand{\mndiamond}{{\usefont{U}{MnSymbolCards}{m}{n}\symbol{"A2}}}
\newcommand{\mnheart}{{\usefont{U}{MnSymbolCards}{m}{n}\symbol{"A3}}}
\newcommand{\mnspade}{{\usefont{U}{MnSymbolCards}{m}{n}\symbol{"A4}}}
\newcommand{\mnclub}{{\usefont{U}{MnSymbolCards}{m}{n}\symbol{"A5}}}
\renewcommand{\c}{\mnclub}
\renewcommand{\d}{\mndiamond}
\newcommand{\h}{\mnheart}
\newcommand{\s}{\mnspade}
%********************************************************************************
\def\hand#1#2#3#4#5{\vtop{
\hbox{\textls[100]{\textsc{#1}}}
\handA \s{#2}
\handA \h{#3}
\handA \d{#4}
\handA \c{#5}
}}
\def\handA#1#2{\hbox{\hbox to1em{\hss#1\hss}\handB#2\relax}}
\def\handB#1{\ifx#1\relax\else #1\if1#1\else\kern2pt \fi\expandafter\handB\fi}
\newcommand{\bd}[4]{
\begin{tabular}[b]{ m{6em} m{6em} m{6em}}
& #1 & \\
#2 & & #3\\
& #4 &
\end{tabular}
}
\makeatother
\begin{document}
\noindent $1$THEIR UNTO THEM PLACE CANNOT SIGNS DARKNESS.
\bd
{\hand{NORTH}{J652}{AQJ972}{J}{103}}
{\hand{WEST}{10}{K83}{Q973}{AQJ92}}
{\hand{EAST}{KQ974}{10543}{652}{5}}
{\hand{SOUTH}{A83}{\textemdash}{AK1084}{K8764}}
\noindent THEIR UNTO TAKQJAKQJAQKHJ AKQJAKQJAQKHJ ARKNESS.
\hand{NORTH}{J652}{AQJ972}{J}{103}
THEIR UNTO THEM AKQJAKQJAQKHJ DARKNESS.
\bd
{North}
{West}
{East}
{South}
THEIR UNTO THEM PLACE CANNOT SIGNS DARKNESS.
\end{document}
这是我的 pdfLaTeX 输出:
我主要关心的是区域 1 和下一段之间的垂直空间。垂直空间不是宏的副产品,
\def\hand#1#2#3#4#5{\vtop{
\hbox{\textls[100]{\textsc{#1}}}
\handA \s{#2}
\handA \h{#3}
\handA \d{#4}
\handA \c{#5}
}}
\def\handA#1#2{\hbox{\hbox to1em{\hss#1\hss}\handB#2\relax}}
\def\handB#1{\ifx#1\relax\else #1\if1#1\else\kern2pt \fi\expandafter\handB\fi}
因为在区域二中相同的宏不会产生顶部或底部的垂直空间。
此外,我认为它不是宏的副产品:
\newcommand{\bd}[4]{
\begin{tabular}[b]{ m{6em} m{6em} m{6em}}
& #1 & \\
#2 & & #3\\
& #4 &
\end{tabular}
}
因为相同的宏(本质上是表格环境)在区域3中没有产生相同的垂直空间。
我的问题:是什么产生了区域 1 中的垂直底部间距?
此外,输出中存在一些小的间距问题;是否可以询问 LaTeX 引擎不是尝试变得聪明并安排(添加或减去)任何类型的垂直间距?
答案1
答案2
当然,空格不是我的宏的副产品。但我的宏产生了框。表格项以垂直模式开始,放置此框,最后开始水平模式(我不知道为什么)。此水平模式在环境中的参数\hand
后放置空行。#4
tabular
您可以在环境 (宏)中输入,\noindent#4
当然还有 和。\noindent#3
\noindent#2
\noindent#1
tabular
\bd
编辑现在,我知道为什么水平模式在项目末尾启动tabular
。\@finalstrut
这里扩展了将支柱放在项目末尾的方法。我确实研究过,latex.ltx
但这不是个好主意。宏被编程为一些晦涩难懂的东西:
\def\@finalstrut#1{%
\unskip\ifhmode\nobreak\fi\vrule\@width\z@\@height\z@\@depth\dp#1}
\nobreak
为什么在 之前立即有\vrule
?这很奇怪。为什么只在水平模式下才会应用惩罚?如果当前没有水平模式,则由于 而启动\vrule
。最好不要查看latex.ltx
文件(以保持良好的心态)。
編輯2\bd
我建议将实现的宏替换tabular
为另一个仅使用框进行操作的宏。这样就不需要\leavevmode
nor了:\noindent
\def\bd#1#2#3#4{\vbox{
\bx{}{#1}{}
\bx{#2}{}{#3}
\bx{}{#4}{}
}}
\def\bx#1#2#3{\hbox{\rlap{#1}\kern8em\rlap{#2}\kern8em\rlap{#3}\kern6em}}