问题

问题

问题

因此,我正在完成我tcolorbox的作品的样式,但如果文本比 短,我就无法正确地将文本居中\linewidth。一种解决方案是\centering每次都添加,但它不是自动的,我相信有更好的解决方案。

我还希望,如果文本比 短\linewidth(例如 3),则将框居中,并根据文本的宽度调整框的宽度。否则,保留max width\linewidth跳转到新行(使用\centering)。

在示例 1 中,居中设置不正确,应该使用halgin=center类似 的格式,而text=centered不是\centering。此外,由于它比 短\linewidth,因此应该调整框的宽度。

在示例 3 中,框应该居中,对于这个示例我使用了hbox,如果文本大于,则该方法不起作用\linewidth

那么有没有办法将文本较短时的示例 3(框居中)和文本较大时的示例 1(正确居中)结合起来?

平均能量损失

overlay=是为了防止万一框太大,需要跳转到另一个页面,边框不是圆的(要知道框还没有完成)。

\documentclass[12pt]{report}

\usepackage{amsmath, amssymb}
\usepackage{tcolorbox}
\tcbuselibrary{skins, breakable}


\newtcolorbox{box1}[1]{title={\centering\large#1}, fonttitle=\bfseries, toptitle=1.5mm, bottomtitle=1.5mm, enhanced, breakable, colback=gray, colframe=black, boxrule=1pt, arc=2mm, rounded corners, coltitle=white, coltext=white, halign=center,
    overlay first={
        \draw[line width=1pt, black] (frame.south west)--(frame.south east);},
    overlay middle={
        \draw[line width=1pt, black] (frame.south west)--(frame.south east);
        \draw[line width=1pt, black] (frame.north west)--(frame.north east);},
    overlay last={
        \draw[line width=1pt, black] (frame.north west)--(frame.north east);;}
}
\newtcolorbox{box2}[1]{title={\centering\large#1}, fonttitle=\bfseries, toptitle=1.5mm, bottomtitle=1.5mm, enhanced, breakable, colback=gray, colframe=black, boxrule=1pt, arc=2mm, rounded corners, coltitle=white, coltext=white,
    overlay first={
        \draw[line width=1pt, black] (frame.south west)--(frame.south east);},
    overlay middle={
        \draw[line width=1pt, black] (frame.south west)--(frame.south east);
        \draw[line width=1pt, black] (frame.north west)--(frame.north east);},
    overlay last={
        \draw[line width=1pt, black] (frame.north west)--(frame.north east);;}
}
\newtcolorbox{box3}[1]{title={\centering\large#1}, fonttitle=\bfseries, toptitle=1.5mm, bottomtitle=1.5mm, enhanced, breakable, colback=gray, colframe=black, boxrule=1pt, arc=2mm, rounded corners, coltitle=white, coltext=white, hbox,
    overlay first={
        \draw[line width=1pt, black] (frame.south west)--(frame.south east);},
    overlay middle={
        \draw[line width=1pt, black] (frame.south west)--(frame.south east);
        \draw[line width=1pt, black] (frame.north west)--(frame.north east);},
    overlay last={
        \draw[line width=1pt, black] (frame.north west)--(frame.north east);;}
}



\begin{document}

\begin{box1}{Formula of $\sin(\theta)$}
$\forall\theta\in\mathbb{R}, \forall k\in\mathbb{Z},\sin(\theta+2\pi k)=\sin(\theta)$
\end{box1}

\begin{box2}{Formula of $\sin(\theta)$}
$\forall\theta\in\mathbb{R}, \forall k\in\mathbb{Z},\sin(\theta+2\pi k)=\sin(\theta)$
\end{box2}

\begin{box3}{Formula of $\sin(\theta)$}
$\forall\theta\in\mathbb{R}, \forall k\in\mathbb{Z},\sin(\theta+2\pi k)=\sin(\theta)$
\end{box3}

\end{document}

在此处输入图片描述

答案1

下面的示例基于 OP 的box3环境,并进行了一些更改:

  • 由于使用breakable时不支持该选项,因此该选项已被注释掉。hbox
  • 选项varwidth upper设置框的最大宽度hbox。它需要varwidth包装。
  • 选项halign title=flush center使标题居中,before upper app=\centering(需要 tcolorbox 库hooks)使文本(上部)居中,并使center框居中。
    • 这里halign=flush center没有效果,因为对齐方式被选项varwidth添加的环境重置了varwidth upper
    • halign的可行值和不同。前者使用 LaTeX ,它设置(和更多),而后者(对齐)设置加。当标题文本以多行排版时,差异会很明显。 由于以相对单位设置段落形状和单词间距尺寸,因此居中效果受当前字体大小的影响,这使得 和略有不同。 请参阅相关源代码行halign titleflush centercenter\centering\rightskip0pt plus 1fil\leftskip0pt plus 1filcenter\centering\leftskip0pt plus2em\rightskip0pt plus2em\spaceskip.3333em \xspaceskip.5em \hbadness=10000\relax
      halign=centeremtitle={\large#1}, fonttitle=\large\bfseries,title={#1}, fonttitle=\bfseries
      [1][2]tcolorbox.styv6.0.4 中。
\documentclass{article}

\usepackage{amsmath, amssymb}
\usepackage{tcolorbox}
\usepackage{varwidth}
\tcbuselibrary{breakable, hooks, skins}

\usepackage{lipsum}

\newtcolorbox{box3}[1]{
  % hbox mode boxes are not breakable
  enhanced, % breakable,
  hbox, 
%  tcbox width=auto limited,
  center,
  varwidth upper,
  before upper app=\centering,
  halign title=flush center,
  title={#1}, fonttitle=\large\bfseries,
  toptitle=1.5mm, bottomtitle=1.5mm,
  boxrule=1pt,
  arc=2mm, rounded corners,
  colback=gray, colframe=black,
  coltitle=white, coltext=white,
  overlay first={
    \draw[line width=1pt, black] (frame.south west)--(frame.south east);},
  overlay middle={
    \draw[line width=1pt, black] (frame.south west)--(frame.south east);
    \draw[line width=1pt, black] (frame.north west)--(frame.north east);},
  overlay last={
    \draw[line width=1pt, black] (frame.north west)--(frame.north east);}
}

\begin{document}

\begin{box3}{Formula of $\sin(\theta)$}
  $\forall\theta\in\mathbb{R}, \forall k\in\mathbb{Z},\sin(\theta+2\pi k)=\sin(\theta)$
\end{box3}

\begin{box3}{Formula of $\sin(\theta)$}
  \lipsum[1][1-3]
\end{box3}

\begin{box3}{\lipsum[2][1-2]}
  $\forall\theta\in\mathbb{R}, \forall k\in\mathbb{Z},\sin(\theta+2\pi k)=\sin(\theta)$
\end{box3}

\begin{box3}{\lipsum[2][1-2]}
  \lipsum[1][1-3]
\end{box3}

\newpage
\subsection*{\textsf{halign=center} vs \textsf{halign=flush center}}

\begin{tcolorbox}[
  center, halign=center, fontupper=\Huge,
  title={\texttt{halign=center, fontupper=\string\Huge}}
]
  \leavevmode\llap{\smash{\rule{.4pt}{1em}}}Text Text
\end{tcolorbox}

\begin{tcolorbox}[
  center, halign=center, before upper=\Huge,
  title={\texttt{halign=center, before upper=\string\Huge}}
]
  \leavevmode\llap{\smash{\rule{.4pt}{4em}}}Text Text
\end{tcolorbox}

\begin{tcolorbox}[center, halign=center, title={\texttt{halign=center}}]
  \lipsum[1][1-3]
\end{tcolorbox}

\begin{tcolorbox}[center, halign=flush center, title={\texttt{halign=flush center}}]
  \lipsum[1][1-3]
\end{tcolorbox}

\end{document}

主输出 “halign=center” 与 “halign=flush center”

相关内容