tcolorbox: parbox=false 并且 hyphenationfix=true

tcolorbox: parbox=false 并且 hyphenationfix=true
  1. 我希望 a 中的文本{tcolorbox}具有与正文相同的段落样式。据我所知(根据第一个参考),这需要使用\RestoreParskip

    \newcommand*{\RestoreParskip}{%
      \setlength{\parskip}{\currentparskip}%
      \setlength{\parindent}{\currentparindent}%
    }%
    

    其中\currentparskip\currentparindent需要初始化{tcolorbox}

    从文档来看,这似乎正是parbox=false想要做的事情:

    如果将键值设置为false,则恢复正常的主文本行为。

    然而,此功能自 2015-10-14 起被标记为实验性功能,但有以下警告:

    在某些情况下,这会产生一些不良的副作用。建议仅在真正需要此功能时才使用此实验性设置。

    由于我确实希望内部有相同的段落间距{tcolorbox},所以似乎我应该使用这个。

  2. 其次,使用hyphenationfix=true似乎很有用:

    段落开头非常窄的框中的长单词不会使用 pdflatex 进行连字符处理。通过应用 hyphenationfix 选项可以避免此问题。

    但是,有一个警告:

    在此处输入图片描述


使用文档中给出的示例文本,可以看出,parbox=false, hyphenationfix=truetogether 似乎不起作用(参见 MWE 输出中的 3.)。我可以通过手动parbox=true使用来解决这个问题\RestoreParskip(参见 4)。

{parskip}有和没有的结果{parskip}

在此处输入图片描述 在此处输入图片描述

问题:

  1. parbox=false除了功能之外,还有什么其他原因\RestoreParskip导致其失败hyphenationfix=true
  2. 手动使用会失去哪些功能\RestoreParskip
  3. 什么时候功能会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%
  1. 对于您的第一个问题来说,重要的是另外\noindent:它应该抑制第一行的缩进,但这意味着段落hyphenationfix在开始之前已经开始了(这使用了一个技巧)。因此,请为第一段\everypar添加一个你自己的。\hspace{0pt}

  2. 主要区别在于,当您的 处于活动状态时\RestoreParskip\sloppy标准中的其他设置\@parboxrestore在某些情况下可能相关,但我没有分析它们。

相关内容