我创建了几个小宏,使我能够将单词堆叠在一起。这很粗糙,但效果很好。但是单词之间的间距因单词而异。我希望能够控制两行之间的间隙,以便它们都相同。
我的宏是
\def\lksStack#1#2#3{\ensuremath{\mathop{\empty}_{\text{#3#2}}^{\text{#3 #1}}} }
\def\rsmlStack#1#2{\lksStack{#1}{#2}{\rm \small}}
本文
there is in a $\rsmlStack{{\sf con}}{{\sf pro}}$ game,
an $\rsmlStack{upper}{lower}$
but no $\rsmlStack{lower}{upper}$ bound on the right-hand side of
产生这种丑陋的不均匀输出
有人能建议一种获得一致间距的方法吗?谢谢
答案1
您可以使用包增加默认行距setspace
,这样不包含堆叠的行与包含堆叠单词的行的间距相同。此外,我还展示了如何使用包stackengine
来实现堆叠。为了确保堆叠内的间距一致(无论字母降部等如何),必须使用所谓的长堆叠来调节堆叠的基线跳跃,而不是调节单词之间的垂直间隙。
\documentclass{article}
\usepackage{stackengine,setspace}
\usepackage[nopar]{lipsum}
\parskip 1em
\spacing{1.5}
\def\stackalignment{l}
\renewcommand\stacktype{L}
\setstackgap{L}{10pt}
\begin{document}
\def\mytext{If you walk \stackanchor{left}{right}, you will see a
\stackanchor{house}{boat} with \stackanchor{an old man}{a cat}.}
\lipsum[1]\mytext\lipsum[2]\mytext\lipsum[3]
\end{document}
附录
可以通过制作宏来缩小行距,此处\mystack
,将文本设置为较小的尺寸,并使用更紧密的基线跳跃:
\documentclass{article}
\usepackage{stackengine,setspace}
\usepackage[nopar]{lipsum}
\parskip 1em
\spacing{1.3}
\def\stackalignment{l}
\renewcommand\stacktype{L}
\setstackgap{L}{7pt}
\newcommand\mystack[2]{\stackanchor{\footnotesize#1}{\footnotesize#2}}
\begin{document}
\def\mytext{If you walk \mystack{left}{right}, you will see a
\mystack{house}{boat} with \mystack{an old man}{a cat}.}
\lipsum[1]\mytext\lipsum[2]\mytext\lipsum[3]
\end{document}
答案2
您可以\mathstrut
向两个参数添加指令\rsmlStack
:
\def\rsmlStack#1#2{\lksStack{#1\mathstrut}{#2\mathstrut}{\rmfamily\small}}
请注意,\rm
和\sf
在 LaTeX2e 下被视为已弃用;事实上,它们在几个重要的文档类中根本不起作用。请改用\rmfamily
和\sffamily
。在下面显示的代码中,我还建议使用\footnotesize
而不是\small
堆叠材料。要更小,请使用\scriptsize
。
完整的 MWE:
\documentclass{article}
\usepackage{amsmath} % for '\text' and '\ensuremath' macros
\def\lksStack#1#2#3{\ensuremath{{}_{\text{#3#2}}^{\text{#3#1}}} }
\def\rsmlStack#1#2{\lksStack{#1\mathstrut}{#2\mathstrut}{\rmfamily\footnotesize}}
\begin{document}
\noindent
there is in a
$\rsmlStack{\textsf{con}}{\textsf{pro}}$ game,
an $\rsmlStack{upper}{lower}$
but no $\rsmlStack{lower}{upper}$ bound on the right-hand side of
\end{document}