两个 \vtop 框可以并排存在吗?

两个 \vtop 框可以并排存在吗?

所以我想看看我是否可以将两个\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,你就会得到

在此处输入图片描述

相关内容