在普通文本中是否可以将一些单词重叠在一起?用例是,当一个句子讨论两个类似的选项时,应该使用它来代替斜线。
一个简短的例子:
\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