将 \shadowbox 的默认宽度设置为行宽,而不是列宽

将 \shadowbox 的默认宽度设置为行宽,而不是列宽

当我使用 Lyx (插入>框>阴影) 插入阴影框时,宽度指定为列宽的 100% ( 1\columnwidth)。这是它生成的源代码:

\shadowbox{\begin{minipage}[t]{1\columnwidth}%
My shadowbox content goes here.%
\end{minipage}}

列宽似乎是一个糟糕的默认选择,因为任何缩进都会将阴影框移动到右边距。*我想将线宽(1\linewidth)设为默认宽度,以便框仅延伸到右边距。

我尝试\shadowbox在序言中重新定义命令,但我尝试更改的参数实际上是\minipage阴影盒内部的一部分,而我还没有弄清楚如何访问它。

我也尝试根据以下摘录重新定义框架的宽度文档

\暗箱

框架的宽度为 \fboxrule(与 \fbox 相同)。阴影的宽度为 \shadowsize(默认值:4pt)。

在我的序言中添加这一行:

\setlength{\fboxrule}{\linewidth}

它没有产生我预期的结果(如下)。有没有一种直接的方法来指定阴影框默认使用线宽而不是列宽?

将 \fboxrule 设置为 \linewidth 的结果


脚注

* 在我的序言中重新定义了 shadowbox 命令以忽略段落缩进

\let\oldshadowbox\shadowbox
\renewcommand{\shadowbox}[1]{%
  \noindent \oldshadowbox{#1}}

但有时缩进是更好的选择,例如将阴影框放在列表项下时

答案1

我建议你\linegoal使用linegoal包(需要两次编译)。当然,你还需要考虑盒子的填充和阴影的宽度,所以宽度将是

-\fboxsep-\shadowsize+\linegoal

完整示例:

\documentclass{article}
\usepackage{fancybox}
\usepackage{linegoal}
\usepackage{showframe}

\begin{document}

\noindent\shadowbox{\begin{minipage}[t]{\dimexpr-\fboxsep-\shadowsize+\linegoal\relax}%
My shadowbox content goes here.%
\end{minipage}}

some test text\shadowbox{\begin{minipage}[t]{\dimexpr-\fboxsep-\shadowsize+\linegoal\relax}%
My shadowbox content goes here.%
\end{minipage}}

some longer test text for the example\shadowbox{\begin{minipage}[t]{\dimexpr-\fboxsep-\shadowsize+\linegoal\relax}%
My shadowbox content goes here.%
\end{minipage}}

\end{document}

在此处输入图片描述

您可以使用命令将其设为默认行为:

\documentclass{article}
\usepackage{fancybox}
\usepackage{linegoal}

\let\Oldshadowbox\shadowbox

\renewcommand\shadowbox[1]{%
  \Oldshadowbox{%
  \begin{minipage}[t]{\dimexpr-\fboxsep-\shadowsize+\linegoal\relax}
  #1
  \end{minipage}}%
}  

\begin{document}

\noindent\shadowbox{My shadowbox content goes here.}

some test text\shadowbox{My shadowbox content goes here.}

some longer test text for the example\shadowbox{My shadowbox content goes here My shadowbox content goes here My shadowbox content goes here My shadowbox content goes here My shadowbox content goes here.}

\end{document}

在此处输入图片描述

答案2

在 LyX 中,按照菜单编辑 > 框设置...在这里您可以更改要测量的框宽度\linewidth

在此处输入图片描述

这应该会相应地更新你的 LaTeX 代码:

在此处输入图片描述

答案3

@GonzaloMedina 提供了一个有效且有用的答案。我根据他的第二个示例代码块找到了一个更简单的解决方案。它并非在所有情况下都有效,但可以处理我的情况:

% in the preamble:
\let\oldshadowbox\shadowbox
\renewcommand{\shadowbox}[1]{%
  \noindent \oldshadowbox{%
    \begin{minipage}[t]{1\linewidth}
    #1
    \end{minipage}}%
}

意识到这一点才不是影响 Lyx 插入\shadowboxs 的方式,而只影响它们在输出中的呈现方式。因此,使用这种方法的用户不再能针对个别情况设置宽度。(这是 Lyx 本身的问题,而不是 LaTeX 的问题。)由于带有阴影框的 minipage 将在宽度为 的 minipage 中重新换行,因此1\linewidth框内文本的宽度会受到影响,但框宽度不会受到影响。

相关内容