新宏中的垂直对齐

新宏中的垂直对齐

我有以下宏:

\newcommand{\mycommand}[4]{
\begin{tabbing}
    \hspace{2cm} \= \kill
    \textbf{#1} \>  {#3} \\
    \textbf{#2} \>      
            \begin{minipage}{\smallertextwidth}
                \vspace{1mm}
                \textbf{label:} #4
            \end{minipage}
        \end{tabbing}

}

实际情况是,给出的字符串\textbf{#2}垂直对齐到minipage其侧面的中间,而我希望它对齐到的顶部minipage。如何实现这样的对齐?

答案1

虽然tabbing有时可以显示出有用,但它不适用于此应用程序,因为更简单的tabular环境就足够了:

\documentclass{article}

\usepackage{lipsum} % just for the example

\newlength{\mycommandwidth}
\setlength{\mycommandwidth}{2cm}% or what you prefer as default

\newcommand{\mycommand}[5][\mycommandwidth]{% <--- don't forget it
  \par\noindent
  \begin{tabular}{@{} l p{\dimexpr\columnwidth-2\tabcolsep-#1} @{}}
    \makebox[#1][l]{\bfseries #2} & #4 \\
    \makebox[#1][l]{\bfseries #3} & \textbf{label:} #5
  \end{tabular}%
  \par
}

\begin{document}

\mycommand{One}{Two}{Three}{Four}

\mycommand[1cm]{One}{Two}{Three}{Four}

\mycommand{One}{Two}{\lipsum[2]}{\lipsum[2]}

\mycommand[1cm]{One}{Two}{\lipsum[2]}{\lipsum[2]}

\end{document}

在此处输入图片描述

答案2

我的建议是使用tabular-like 结构。并且,为了避免使用任意长度,您可以在使用时将长度计算留给 LaTeXtabularx

在此处输入图片描述

\documentclass{article}

\usepackage[nopar]{lipsum}
\usepackage{tabularx}

\newcommand{\mycommand}[4]{%
  \begin{tabularx}{\textwidth}{@{}>{\bfseries\arraybackslash}p{2cm} X @{}}
    #1 & #3 \\
    #2 & \textbf{label:} #4
  \end{tabularx}}

\begin{document}

\noindent
\mycommand{One}{Two}{Three}{Four}

\noindent
\mycommand{One}{Two}{\lipsum[3]}{\lipsum[4]}

\end{document}

p- 和-列与周围的行条目X具有默认的操作对齐。t

选择在 a 上方使用tabularx(或其他)源于典型的基线对齐问题。使用表格时更容易/更方便。请参阅如何在使用s (或tabularminipageminipage\parboxes) 时保持恒定的基线跳过?](如何在使用 minipages (或 \parboxes) 时保持恒定的 baselineskip?

请注意,上述构造不会跨越页面边界。您的构造也是如此minipage,因此我怀疑这在您的用例中不会成为问题。

相关内容