我希望 a 中的文本
{tcolorbox}
具有与正文相同的段落样式。据我所知(根据第一个参考),这需要使用\RestoreParskip
:\newcommand*{\RestoreParskip}{% \setlength{\parskip}{\currentparskip}% \setlength{\parindent}{\currentparindent}% }%
其中
\currentparskip
和\currentparindent
需要初始化前这{tcolorbox}
。从文档来看,这似乎正是
parbox=false
想要做的事情:如果将键值设置为false,则恢复正常的主文本行为。
然而,此功能自 2015-10-14 起被标记为实验性功能,但有以下警告:
在某些情况下,这会产生一些不良的副作用。建议仅在真正需要此功能时才使用此实验性设置。
由于我确实希望内部有相同的段落间距
{tcolorbox}
,所以似乎我应该使用这个。其次,使用
hyphenationfix=true
似乎很有用:段落开头非常窄的框中的长单词不会使用 pdflatex 进行连字符处理。通过应用 hyphenationfix 选项可以避免此问题。
但是,有一个警告:
使用文档中给出的示例文本,可以看出,parbox=false, hyphenationfix=true
together 似乎不起作用(参见 MWE 输出中的 3.)。我可以通过手动parbox=true
使用来解决这个问题\RestoreParskip
(参见 4)。
{parskip}
有和没有的结果{parskip}
:
问题:
parbox=false
除了功能之外,还有什么其他原因\RestoreParskip
导致其失败hyphenationfix=true
?- 手动使用会失去哪些功能
\RestoreParskip
? - 什么时候功能会
parbox=false
脱离实验性?我知道这个特殊问题只有软件包作者才能回答,但因为我经历过实验性功能被删除的痛苦,所以知道这是否仍然是实验性的还是只是文档尚未更新会很好。
笔记:
- 现在,我不是需要
breakable=true
,但将来可能需要。如果相关,分别针对这些情况的评论将很有用。
参考:
代码:
\documentclass{article}
\usepackage{tcolorbox}
\usepackage[textwidth=4cm]{geometry}
%\usepackage{parskip}% Needs to also work with parskip
\newlength{\currentparskip}
\newlength{\currentparindent}
\setlength{\currentparskip}{\parskip}
\setlength{\currentparindent}{\parindent}
\newcommand*{\RestoreParskip}{%
\setlength{\parskip}{\currentparskip}%
\setlength{\parindent}{\currentparindent}%
}%
\newcommand*{\Mytext}{%
Rechnungsadjunktentochter.\par
Statthaltereikonzipist.
}
\begin{document}
\begin{tcolorbox}[title={1. Default}]
\Mytext
\end{tcolorbox}
\begin{tcolorbox}[hyphenationfix, title={2. hyphenationfix}]
\Mytext
\end{tcolorbox}
\begin{tcolorbox}[hyphenationfix, parbox=false, title={3. hyphenationfix, parbox=false}]
\Mytext
\end{tcolorbox}
\setlength{\currentparskip}{\parskip}
\begin{tcolorbox}[
hyphenationfix,
before upper=\RestoreParskip\noindent,
title={4. hyphenationfix, \texttt{\string\RestoreParskip}},
]
\Mytext
\end{tcolorbox}
\end{document}
答案1
parbox=false
工作原理完全不同\RestoreParskip
:它不会重置两个长度,但会替换\@parboxrestore
执行此操作的调用
\let\if@nobreak\iffalse
\let\if@noskipsec\iffalse
\let\par\@@par
\let\-\@dischyph
\let\'\@acci\let\`\@accii\let\=\@acciii
\parindent\z@ \parskip\z@skip
\everypar{}%
\linewidth\hsize
\@totalleftmargin\z@
\leftskip\z@skip \rightskip\z@skip \@rightskip\z@skip
\parfillskip\@flushglue
\lineskip\normallineskip
\lineskiplimit\normallineskiplimit
\baselineskip\normalbaselineskip
\sloppy
\let\\\@normalcr
这样
\noindent%
\linewidth\hsize%
\@totalleftmargin\z@%
\leftskip\z@skip%
\rightskip\z@skip%
\@rightskip\z@skip%
对于您的第一个问题来说,重要的是另外
\noindent
:它应该抑制第一行的缩进,但这意味着段落hyphenationfix
在开始之前已经开始了(这使用了一个技巧)。因此,请为第一段\everypar
添加一个你自己的。\hspace{0pt}
主要区别在于,当您的 处于活动状态时
\RestoreParskip
。\sloppy
标准中的其他设置\@parboxrestore
在某些情况下可能相关,但我没有分析它们。