我有以下宏:
\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 (或tabular
minipage
minipage
\parbox
es) 时保持恒定的基线跳过?](如何在使用 minipages (或 \parboxes) 时保持恒定的 baselineskip?)
请注意,上述构造不会跨越页面边界。您的构造也是如此minipage
,因此我怀疑这在您的用例中不会成为问题。