所以我想看看我是否可以将两个\vtop
盒子并排放置。下面是我得到的最接近的。这是一种“乳胶中的纯tex”示例。
\documentclass[fontsize=13pt,letterpaper,]{scrartcl}
\usepackage{geometry}
\usepackage{fontspec}
\setmainfont{Alegreya}[SmallCapsFont=Alegreya SC]
\setlength{\parindent}{0pt}
\long\def\Lcv#1#2{\hskip-1.3in \hbox to 2in{\hfil\itshape #1}%
\hskip.5in\hbox to 3in{#2\hfil}}
\def\Lup#1#2{\Lcv{\vtop{#1}}{\vtop{#2}}}
\begin{document}
\Lup{Hello this is your\\Crazy Uncle Harry}{Who joined the mob%
\\to feel good\\about himself}
Hello and \\ Welcome to {\itshape my} World!!
\end{document}
从代码中你可以看出,它们实际上并不像\vtop
盒子那样,需要用 a 来分隔段落\\
。
我意识到,使用各种表格环境和纯文本可以有多种方式完成相同的任务\halign
。而且这样做非常简单。
我正在寻找(如果存在的话)一种(希望是简单的)放置完整\vtop
框的方法,以便它们沿着单行的基线“并排”对齐。如果没有令人难以置信的代码争论就无法做到这一点,那么我将不胜感激。---谢谢大家。
答案1
做“盒子算术”需要知道的是
TeX 在某些地方将垂直模式变为水平模式,而在其他地方又恢复原状。
\vbox
或\vtop
的宽度等于其中最宽的元素。如果这是整个段落,则宽度为\hsize
。因此,通常将宽度设置为\vbox
或\vtop
\vtop{\hsize= something ...}
当 TeX 处于垂直模式时,\vbox{...}\vbox{...}
将框放置在第二个框上方。但是当 TeX 处于水平模式时,\vbox{...}\vbox{...}
将框放置在同一行。例如:
\leavevmode \vtop{...}\vtop{...} % they are at one line
% in the paragraph started by \leavevmode
\hbox{\vtop{...}\vtop{...}} % they are at one line in the \hbox.
我详细地写了 TeX 模式和盒子TeXbook 纳鲁比,第 3.4 和 3.5 节。
恕我直言,“盒子算术”原理和垂直/水平模式是每个 TeX 用户的基本知识。不幸的是,LaTeX 手册隐藏了它们。LaTeX 仅提供了一个复杂的构造,如\begin{minipage}...\end{minipage}
。
答案2
您可以使用标准\parbox
和\makebox
命令。
\vtop
您似乎忽略了一个微妙的点:baselineskip 可能与 a (或\parbox[t]
,相同)方法不一致。
\documentclass[fontsize=13pt,letterpaper]{scrartcl}
\usepackage[textwidth=5in,showframe]{geometry}
\usepackage{fontspec}
\setmainfont{Alegreya}[SmallCapsFont=Alegreya SC]
\setlength{\parindent}{0pt}
\newsavebox{\feldA}\newsavebox{\feldB}
\newcommand{\Lcv}[2]{%
\par
\hspace*{-1.3in}%
\makebox[2in][r]{\itshape #1}%
\hspace*{0.5in}%
\makebox[3in][l]{#2}%
\par
}
\newcommand{\Lup}[2]{%
\sbox\feldA{\parbox[t]{2in}{\itshape#1\par\xdef\tpdA{\the\prevdepth}}}%
\sbox\feldB{\parbox[t]{3in}{#2\par\xdef\tpdB{\the\prevdepth}}}%
\ifdim\dp\feldA=\dp\feldB
\ifdim\tpdA>\tpdB\let\tpdF\tpdA\else\let\tpdF\tpdB\fi
\else
\ifdim\dp\feldA>\dp\feldB
\let\tpdF\tpdA
\else
\let\tpdF\tpdB
\fi
\fi
\Lcv{\usebox{\feldA}}{\usebox{\feldB}}\par
\prevdepth\tpdF
}
\begin{document}
\Lup{Hello this is your Crazy Uncle Unnamed ddd ddd ddd}
{Who joined the mob to feel good about himself}
Hello and \\ Welcome to {\itshape my} World!!
\Lup{Hello this is your Crazy Uncle Harry yyy yyy yyy yyy}
{Who joined the mob to feel good about himself}
Hello and \\ Welcome to {\itshape my} World!!
\end{document}
很容易看出哪里出了问题,而不必大惊小怪\prevdepth
:只需注释掉这一行\prevdepth=\tpdF
,你就会得到