对于我的投影仪幻灯片,我喜欢有一个命令,将一个文本块居中并用括号将其包围,括号的垂直尺寸随着文本行数的增加而增加。
我目前有以下情况:
\NewEnviron{remarkblock}[1][]{%
\scalebox{1}{%
$\scaleleftright{(}{\parbox{0.95\linewidth}{\centering \small\BODY}}{)}$
}
}
(不要问我解释,这是我从 stackexchange 位中整理出来的)
这几乎没问题。我唯一想改进的是,当文本少于一行时,我希望括号实际上不是相隔 0.95 个行宽,而是像居中文本周围的普通括号一样(可能稍大一点)。
在https://en.wikibooks.org/wiki/LaTeX/Boxes我读到\parbox
用替换\pbox
应该可以实现我想要的效果。但是,我遇到了两个问题:
如果文本包含手动换行符,则会收到错误:
Somthings's broken -- Perhaps a missing \item
如果我没有手动换行,它可以工作,但 pbox 会左对齐,即使我把
\centering
前面的\scaleleftright
和前面的放在一起\pbox
编辑:根据要求,这是一个最小工作示例。在这个版本中,我得到了错误;如果我删除,\\
我得到左对齐,如果我在 的位置放置一个长文本test
并删除 ,则\\
一切都如预期。
\documentclass{article}
\usepackage{pbox}
\usepackage{scalerel}
\begin{document}
\scalebox{1}{$\centering\scaleleftright{(}{\centering\pbox{0.95\linewidth}{\centering \small test \\ test}}{)}$}
\end{document}
答案1
根据 jbfu 的评论进行编辑,以修复列表中的结果。
\documentclass{article}
\usepackage[pass,showframe]{geometry}
\usepackage{pbox,scalerel,stackengine}
\usepackage[nopar]{lipsum}
\newcommand\myblock[1]{\noindent\hfill\belowbaseline[-\ht\strutbox]{{%
\scaleleftright[.025\linewidth]{(}{%
\pbox{\dimexpr0.95\linewidth}{\small\strut #1\strut}}{)}}}\hfill\mbox{}}
\begin{document}
\myblock{test}
\myblock{test\\test}
\myblock{test\\test\\test}
\myblock{\lipsum[1]}
\begin{enumerate}
\item \myblock{test\\test\\test}
\item \myblock{\lipsum[4]}
\item \lipsum[3]
\end{enumerate}
\end{document}
答案2
该varwidth
包可能会有帮助:
\documentclass{article}
\usepackage{pbox}
\usepackage{scalerel}
\usepackage{varwidth}
\begin{document}
\centering
$\scaleleftright{(}{
\begin{varwidth}{0.95\linewidth}
\small test
\end{varwidth}
}{)}$
$\scaleleftright{(}{
\begin{varwidth}{0.95\linewidth}
\small test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test
\end{varwidth}
}{)}$
\end{document}