![将 \shadowbox 的默认宽度设置为行宽,而不是列宽](https://linux22.com/image/288590/%E5%B0%86%20%5Cshadowbox%20%E7%9A%84%E9%BB%98%E8%AE%A4%E5%AE%BD%E5%BA%A6%E8%AE%BE%E7%BD%AE%E4%B8%BA%E8%A1%8C%E5%AE%BD%EF%BC%8C%E8%80%8C%E4%B8%8D%E6%98%AF%E5%88%97%E5%AE%BD.png)
当我使用 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}
它没有产生我预期的结果(如下)。有没有一种直接的方法来指定阴影框默认使用线宽而不是列宽?
脚注
* 在我的序言中重新定义了 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 插入\shadowbox
s 的方式,而只影响它们在输出中的呈现方式。因此,使用这种方法的用户不再能针对个别情况设置宽度。(这是 Lyx 本身的问题,而不是 LaTeX 的问题。)由于带有阴影框的 minipage 将在宽度为 的 minipage 中重新换行,因此1\linewidth
框内文本的宽度会受到影响,但框宽度不会受到影响。