在同一行中实现左对齐、右对齐和居中的最简单方法是什么(最好不使用表格或数组等特殊环境)。基于问题,我尝试了以下操作。
但问题是,我希望的位置blablablablablablablablabla
正好位于页面的中间,而下面的解决方案无法满足这一要求。
\documentclass{article}
\title{T} \date{}
\begin{document}
\maketitle
\noindent
ABC \hfill blablablablablablablablabla \hfill Spring 1985-86\\
\end{document}
答案1
使用\rlap
和\llap
(或\mathrlap
和\mathllap
来自mathtools
)(如果您有数学公式)。两种可能的代码:
\documentclass{article}
\usepackage[showframe]{geometry}
\title{T} \date{}
\begin{document}
\maketitle
\noindent
\rlap{ABC} \hfill blablablablablablablablabla \hfill \llap{Spring 1985-86}
\bigskip
\noindent
\makebox[\linewidth][s]{\rlap{ABC} blablablablablablablablabla \llap{Spring 1985-86}}
\end{document}
答案2
如果您知道没有重叠的可能性,则使用\makebox
或很简单,但是对于较长的文本,适当大小的 parbox 可以很好地工作:\rlap
\documentclass{article}
\begin{document}
\noindent
\parbox[t]{.2\textwidth}{\raggedright
some text some text some text}\hfill
\parbox[t]{.55\textwidth}{\centering
some text some text some text
some text some text some text
}\hfill
\parbox[t]{.2\textwidth}{\raggedleft
some text some text some text}%
\end{document}
答案3
\documentclass{article}
\title{T} \date{}
\begin{document}
\maketitle
\noindent
\makebox[0pt][l]{ABC}\hfill\makebox[0pt]{blablablablablablablablabla}\hfill%
\makebox[0pt][r]{Spring 1985-86}\\
\end{document}
正如 frogon 所指出的,\makebox
中心文本是不需要的(尽管请参见 David 的评论,了解在中心内容太长的“错误”情况下它有何不同):
\noindent
\makebox[0pt][l]{ABC}\hfill blablablablablablablablabla\hfill%
\makebox[0pt][r]{Spring 1985-86}\\
也可以使用\centerline
:
\noindent
\makebox[0pt][l]{ABC}%
\centerline{blablablablablablablablabla}%
\makebox[0pt][r]{Spring 1985-86}\\
为了完整性,我在这里展示并\usepackage[pass,showframe]{geometry}
添加了它。
答案4
我在许多地方都使用过这个功能,因为中间的项目可能太长,所以会盖印左侧和/或右侧的文本。这个功能并不“简单”,但很有用。
\documentclass{article}
\usepackage{calc}
\usepackage{ifthen}
\newsavebox{\leftbox}
\newsavebox{\centerbox}
\newsavebox{\rightbox}
\newlength{\testln}
\newlength{\testwd}
\newcommand{\entry}[3]{%
\sbox{\leftbox}{#1}
\sbox{\centerbox}{#2}
\sbox{\rightbox}{#3}
\def\tmp{0pt}%
\ifthenelse{\lengthtest{\wd\leftbox>\wd\rightbox}}% Which is longer, left or right?
{\setlength{\testln}{\widthof{\usebox{\leftbox}}}}
{\setlength{\testln}{\widthof{\usebox{\rightbox}}}}
\setlength{\testwd}{(\textwidth - \wd\centerbox)/2-\testln}%
\ifdim\testwd<1em\def\tmp{\baselineskip}\fi %% 1 em is the minimum separation from right/left text; change to suit.
\noindent
\makebox[\textwidth]{%
\makebox[0pt][l]{\usebox{\leftbox}}%
\hfill
\raisebox{-\tmp}{\usebox{\centerbox}}%
\hfill
\makebox[0pt][r]{\usebox{\rightbox}}%
}%
}
\begin{document}
\entry{Left}{Center is actually quite long and would overprint}{Right xx xx xx xx yyy yy}
\bigskip
\entry{Left}{$x^2+y^2=z^2$}{Right xx xx xx xx yyy yy}
\end{document}
更新:我简化了一些数学运算\setlength{\testwd}...
,并删除了\makebox[0pt]...
放置居中的文本(不需要)。