如果想要提出一些文本,可以使用类似
\raisebox{0.5 em}{some text}
但是,这不尊重换行符并且可能会导致一些严重的溢出。
有没有办法\raisebox
尊重换行符?或者有提供相同功能的替代方案?
编辑:这里有一个澄清的例子:
\documentclass{article}
\begin{document}
Lorem ipsum dolor sit amet,
\raisebox{0.5 em}{consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.}
\end{document}
我需要凸起的文本进行换行,就像它没有凸起时一样。
编辑2:显然我的解释没什么帮助。我想提升整个句子,如果我使用,\raisebox
句子会溢出到右边(如示例中所示)。
如果这是 HTML,我会使用<sup>some text</sup>
能够处理换行符的功能。
答案1
正如 @egreg 所说,这在 TeX 中无法完全自动实现,原因很简单:TeX 无法自动确定单词中的连字符点并以默认方式以外的方式使用它们。
但是如果你准备自己标记连字符,那么有办法自动完成其余部分。下面是一个简单的实现:
\documentclass{article}
\setlength\textwidth{8cm}
\def\X#1{\raisebox{0.5em}{#1}}
\def\Y#1#2#3{\discretionary{\X{#1}}{\X{#2}}{\X{#3}}}
\begin{document}
Lorem ipsum dolor sit amet, consectetur
\Y{adipisic-}{ing}{adipisicing} \X{elit,} \X{sed} do eiusmod tempor incididunt ut
labore et dolore magna aliqua.
\end{document}
这导致
我认为这就是您想要的输出。当然,这不是您想要的编码方式。通过一些小的编码改进,您可以使用类似
Lorem ipsum dolor sit amet, consectetur
\begin{raisedtext}{0.5em}
adipisic\-ing elit, sed
\end{raisedtext}
do eiusmod tempor incididunt ut labore et dolore magna aliqua.
在哪里
- 可能的连字点由
\-
- 将
-
自动允许作为连字符点
基本上,您需要解析文本直到环境结束以寻找-
或\-
或“空格”,并相应地从上面构建类似\Y
和的东西(今晚不这样做:-)\X
更新:一个简单的解析器
好的,这里有一个简单的解析器,它处理\-
和显式-
。写得不是很干净,抱歉。
\documentclass{article}
\setlength\textwidth{8cm}
% we need space, -, and newline active and set to some commands
{\obeyspaces
\catcode`\^^M\active%
\catcode`\-\active%
\gdef\setraisedtextactivedef#1#2{\let =#1\let^^M=#1\let-=#2}}
\newbox\raisedtextbox
% main action is to collect material into a box
\def\collectraisedtext{\setbox\raisedtextbox\hbox\bgroup\raisedtextstyle
\gobbleactivespaces}
% and if we want we can use a special style
\def\raisedtextstyle{\small\itshape}
% at a space end collection, typeset and restart
\def\raisedtextspace{\egroup
\X{\box\raisedtextbox}%
\space
\collectraisedtext
}
% at \- end colloection, typeset, add discretionary and restart
\def\raisedtextbreak{\egroup\X{\box\raisedtextbox}\discretionary{\X-}{}{}\collectraisedtext}
% at - (explicit hyphen) more or less the same
\def\raisedtexthyphen{\egroup\X{\box\raisedtextbox}\discretionary{\X-}{}{\X-}\collectraisedtext}
% several active spaces (or newlines) would do harm ...
\def\gobbleactivespaces{\futurelet\next\gobbleactivespacesX}
\def\gobbleactivespacesX{%
\ifx\next\raisedtextspace
\expandafter\gobbleactivespacesXX
\fi
}
\def\gobbleactivespacesXX#1{\gobbleactivespaces}
% putting all together
\newenvironment{raisedtext}[1][0.5ex]
{%
\def\X##1{\raisebox{#1}{##1}}%
\obeyspaces
\catcode`\^^M\active
\catcode`\-\active
\setraisedtextactivedef\raisedtextspace\raisedtexthyphen
\let\-\raisedtextbreak
\collectraisedtext
}{%
% at end environment, end collection and typeset (if not empty).
% Otherwise remove space already inserted before that collection
\egroup
\ifdim\wd\raisedtextbox>0pt % weak prove that this is not empty
\X{\box\raisedtextbox}%
\else
\unskip
\fi
}
\begin{document}
Lorem ipsum dolor sit amet, consectetur
\begin{raisedtext}
adipisic-ing elit, sed
\end{raisedtext}
do eiusmod tempor incididunt ut
\begin{raisedtext}[1.5ex] la-bore-et do-lore
\end{raisedtext} magna aliqua.
\end{document}
这样做会给我们(带有样式定义的\small\itshape
)
答案2
您需要首先使用允许构建段落的框,例如\parbox
或minipage
环境。两者都需要使用线宽作为参数,这可能是一个问题。还有varwidth
基于包的环境minipage
,varwidth
它仅将宽度参数作为最大宽度。
你可以试试:
\usepackage{varwidth}
% ..
\raisebox{<amount>}{\begin{varwidth}{<max width>} multi \\ line \\ text\end{varwidth}}
另一种选择是我的adjustbox
包,它提供了raise
和minipage
键varwidth
。它与上面的基本相同,但界面更漂亮:
\usepackage{adjustbox}
% ..
\adjustbox{varwidth=<max width>,raise=<amount>}{ multi \\ line \\ text }
% or:
\adjustbox{varwidth=<max width>,raise=<amount>}\bgroup multi \\ line \\ text \egroup
% or:
\begin{adjustbox}{varwidth=<max width>,raise=<amount>}
multi \\ line \\ text
\end{adjustbox}
请注意\parbox
,minipage
和varwidth
具有可选参数,它们决定了所生成框的基线。这些参数会影响文本相对于框外但仍在同一行上的其他文本的位置。
答案3
你可以简单地通过以下方式提出一个文本块:
\vspace*{<-dimension>}
调整 MWE 示例中的 (-5pt) 来查看其如何工作。
\documentclass[11pt]{article}
\usepackage{lipsum}
\parskip10pt
\parindent0pt
\begin{document}
First paragraph
\hrule
\vspace*{-5pt}
\lipsum[1]
\end{document}
答案4
类似于\raise
(水平模式) 带有\vbox
? (plain-tex)
\hsize=24pc % just to make it break into lines
Lorem ipsum dolor sit amet,
\noindent\raise.5em\vbox{\noindent
consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua.}
Lorem ipsum dolor sit amet.
\bye