双行文本(文本上方为文本)

双行文本(文本上方为文本)

在普通文本中是否可以将一些单词重叠在一起?用例是,当一个句子讨论两个类似的选项时,应该使用它来代替斜线。

一个简短的例子:

\documentclass{article}
\begin{document}
If you walk left/right, you will see a house/boat with an old man/a cat.
\end{document}

我希望得到一个看起来有点像这个模型的结果(这里用和以丑陋且非常手动的方式完成\raisebox\hspace

示例文本的模型

答案1

这是\stackanchor宏在stackengine包中执行的操作。我展示了三个实例,居中、左对齐和右对齐。在最后一个实例中,我将项目之间的 stackgap 设置为 8pt,而不是默认值 (3pt)。请注意,可以通过交替实现间隙\stackanchor[8pt]{top item}{bottom item}

默认堆栈设置顶部项目底部与底部项目顶部之间的间隙(我称之为短堆栈)。或者,您可以使用基线间隙设置两个堆叠项目基线之间的间隙(我称之为长\def\stacktype{L}堆栈\setstackgap{L}{}

\documentclass{article}
\usepackage{stackengine}
\parskip 1em
\begin{document}
\def\mytext{If you walk \stackanchor{left}{right}, you will see a
\stackanchor{house}{boat} with \stackanchor{an old man}{a cat}.}

\mytext

\def\stackalignment{l}\mytext

\setstackgap{S}{8pt}
\def\stackalignment{r}\mytext
\end{document}

在此处输入图片描述

或者,\stackon\stackunder将产生基线未分割的堆栈,而是分别与下部项(\stackon)或上部项(\stackunder)对齐。

答案2

如果您对该特定语法感兴趣,则以下内容可能会引起您的兴趣:

在此处输入图片描述

\documentclass{article}
\makeatletter
\def\dual#1{\expandafter\dual@aux#1\@nil}
\def\dual@aux#1/#2\@nil{\begin{tabular}{@{}c@{}}#1\\#2\end{tabular}}
\makeatother
\begin{document}
If you walk \dual{left/right}, you will see a \dual{house/boat} with \dual{an old man/a cat}.
\end{document}

它使用初始化的参数文本\def来指定所需的输入:\dual{<top>/<bottom>}。如果您希望有不同的布局(不是垂直居中),请尝试使用\begin{tabular}[t]

在此处输入图片描述

或者\begin{tabular}[b]

在此处输入图片描述


以下是上述解决方案的扩展,提供了一些键值选项:

在此处输入图片描述

\documentclass{article}
\usepackage{xkeyval}% http://ctan.org/pkg/xkeyval
\makeatletter
\newlength{\dk@toplen}\newlength{\dk@botlen}
\define@cmdkey{dualkey}[dk@]{halign}[c]{}%
\define@cmdkey{dualkey}[dk@]{valign}[c]{}%
\define@key{dualkey}{topwidth}{\setlength{\dk@toplen}{#1}}
\define@key{dualkey}{botwidth}{\setlength{\dk@botlen}{#1}}
\newcommand{\dual}[2][,]{% \dual[<opts>]{<top>/<bot>}
  \setkeys{dualkey}{valign=c,halign=c,topwidth=\m@ne\p@,botwidth=\m@ne\p@,#1}% Set (default) keys
  \expandafter\dual@aux#2\@nil}% Print dual
\def\dual@aux#1/#2\@nil{%
  \begin{tabular}[\dk@valign]{@{}\dk@halign @{}}
    \ifdim\dk@toplen<\z@ #1\else\makebox[\dk@toplen]{#1}\fi\\
    \ifdim\dk@botlen<\z@ #2\else\makebox[\dk@botlen]{#2}\fi
  \end{tabular}}
\makeatother
\begin{document}
If you walk \dual[valign=b]{left/right}, you will see a \dual[valign=b,topwidth=0pt]{house/boat} with 
\dual[valign=t,halign=r]{an old man/a cat}.
\end{document}

您现在可以设置垂直和水平对齐方式\dual(默认为c输入),以及相应项目的宽度。如果需要,这可以使句子结构更流畅。但是,由于 的装箱性质,文本块末尾的换行仍然会存在问题\dual

答案3

最终,它是一个垂直框,里面有水平框,因此(以纯文本形式;使用tex/ pdftex/ xetex/进行编译luatex):

\catcode`/=13
\def/#1/#2/{\leavevmode$\vcenter{\hbox{#1}\hbox{#2}}$}
If you walk , you will see a /left/right/, you will see a /house/boat/ with an
old /man/a cat/.
\bye

在此处输入图片描述

相关内容