如何\parbox
“继承”调用它的环境中使用的“对齐模式”?换句话说,如何将文本对齐设置自动化\parbox
,以便采用与主段落相同的文本对齐方式?
我正在考虑用三if/then
句话来表示左、右或中间的“模式”,但我不知道如何“获取” latex 当时使用的“当前”值。我的意思是,像这样:
\begin{center}
Some text here
\if@... \parbox{0.5\textwidth}{\centering Some text here}
\if@... \parbox{0.5\textwidth}{\raggedright ...}
\if@... \parbox{0.5\textwidth}{\raggedleft ...}
Some text here
\end{center}
我希望它在两种环境(\begin{center}
...)和声明(\centering
)下都能工作
答案1
查看\meaning
各种 (4) 种模式的 ,可以看到 2 个长度 \parfillskip
和\rightskip
组合起来构成了每种模式的唯一标识符。因此,只需使用保存在字符串中的这两个长度的表达式,通过\ifx
比较进行识别即可。
然后,我介绍了\justparbox
一种用于检查和设置周围环境理由的工具\parbox
。
其限制在于它不能在\rightskip
被改变的地方使用,例如在某些列表环境中。
\documentclass{article}
\usepackage[margin=1in]{geometry}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\xdef\justcase{\the\parfillskip,\the\rightskip}
{\raggedright\xdef\ragrcase{\the\parfillskip,\the\rightskip}}
{\raggedleft\xdef\raglcase{\the\parfillskip,\the\rightskip}}
{\centering\xdef\cencase{\the\parfillskip,\the\rightskip}}
\newcommand\justparbox[3][c]{\xdef\tmp{\the\parfillskip,\the\rightskip}%
\ifx\tmp\ragrcase\parbox[#1]{#2}{\raggedright#3}\else
\ifx\tmp\raglcase\parbox[#1]{#2}{\raggedleft#3}\else
\ifx\tmp\cencase\parbox[#1]{#2}{\centering#3}\else
\parbox[#1]{#2}{#3}\fi\fi\fi}
\begin{document}
\meaning\centering
\meaning\raggedright
\meaning\raggedleft
\hrulefill
\newcommand\mydata{\lipsum[4]\par\justparbox[t]{5in}{\lipsum[4]}%
\par\noindent\hrulefill\par}
\mydata
{\raggedright\mydata}
{\raggedleft\mydata}
{\centering\mydata}
\end{document}
答案2
TeX 没有\ifskip
比较器,但我们可以模拟它。
\documentclass{article}
\usepackage{pdftexcmds}
\usepackage{lipsum}
\makeatletter
\newcommand{\equalskipTF}[2]{%
\ifnum\pdf@strcmp{\the\glueexpr#1\relax}{\the\glueexpr#2}=\z@
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}
\newcommand{\testrlcenrr}{%
\equalskipTF{\rightskip}{\@flushglue}%
{% either center or raggedright
\equalskipTF{\leftskip}{\@flushglue}%
{% center
\let\rl@cen@rr\centering
}%
{% raggedright
\let\rl@cen@rr\raggedright
}%
}%
{% either raggedleft or justified
\equalskipTF{\leftskip}{\@flushglue}
{% raggedleft
\let\rl@cen@rr\raggedleft
}
{% justified
\let\rl@cen@rr\relax
}%
}%
}
\newcommand{\pparbox}[3][c]{%
\testrlcenrr
\parbox[#1]{#2}{\rl@cen@rr#3}%
}
\begin{document}
\section{Normal text}
\lipsum[2][1-3]
\bigskip
\noindent
\pparbox{10cm}{\lipsum[1][1-3]}
\section{Ragged right}
\begin{flushleft}
\lipsum[2][1-3]
\bigskip
\pparbox{10cm}{\lipsum[1][1-3]}
\end{flushleft}
\section{Center}
\begin{center}
\lipsum[2][1-3]
\bigskip
\pparbox{10cm}{\lipsum[1][1-3]}
\end{center}
\section{Ragged left}
\begin{flushright}
\lipsum[2][1-3]
\bigskip
\pparbox{10cm}{\lipsum[1][1-3]}
\end{flushright}
\end{document}
解释。
\centering
具有两者\leftskip
并\rightskip
设置为\@flushglue
\raggedright
左跳跃为零,并且\rightskip=\@flushglue
\raggedleft
右跳跃为零,并且\leftskip=\@flushglue