我有一个问题,我对 LaTeX 还很陌生,但我认为我掌握了基础知识。
我的问题是想要创建一个环境,可以创建具有背景颜色和一些文本的小页面。
我可以手工完成这个,但是我有很多盒子,而且一遍又一遍地写相同的内容对我来说有点多余。
\documentclass[12pt,a4paper]{book} % Book settings + layout
\usepackage{xcolor} % Extended colors
\usepackage{color} % Color extended names
%DEFINE ENVIRONMENT BLOCK
% Riddle
\newenvironment{colbox}[3]{ % Riddle environment
\begin{center} % Centering minipage
\colorbox[HTML]{#1} { % Set's the color of minipage
\begin{minipage}[b]{380px} % Starts minipage
\textbf{#2}\\ \textit{#3} % Set's title and starts italic for text
\end{minipage}} % End minipage
}{\end{center}} % End Riddle environment
\begin{document}
\begin{center}
\colorbox[HTML]{F8E0E0}{
\begin{minipage}[c]{380px}
\textbf{Riddle: }\\ \textit{some text here}
\end{minipage}}
\end{center}
Some other text
\begin{colbox}{F8E0E0}{Riddle:}
some text here
\end{colbox}
Some more text
\begin{colbox}{F8E0E0}{Riddle:}
{some text here}
\end{colbox}
\end{document}
如我所见,问题在于我的环境中colorbox
没有以结束参数结束,而我需要移动\end{minipage}
相同的位置,但是在移动之前我无法移动它\end{colorbox}
,有没有办法正确做到这一点?
%DEFINE ENVIRONMENT BLOCK
% Riddle
\newenvironment{colbox}[3]{ % Riddle environment
\begin{center} % Centering minipage
\colorbox[HTML]{#1} { % Set's the color of minipage
\begin{minipage}[b]{380px} % Starts minipage
\textbf{#2}\\ \textit{#3} % Set's title and starts italic for text
\end{minipage} } % End minipage
}{\end{center}}
{}
我可以通过添加这样的文本来“修复”开箱即用的问题
\begin{colbox}{F8E0E0}{Riddle:}
{some text here}
\end{colbox}
但这不是我真正想要的。
如果可能的话,我希望保留 LaTeX 中的默认设置,因为我不是唯一维护此文档的人,而且特殊软件包不太受欢迎,
答案1
在使用彩色背景排版之前必须先收集该框:
\newsavebox{\selvestebox}
\newenvironment{colbox}[1]
{\newcommand\colboxcolor{#1}%
\begin{lrbox}{\selvestebox}%
\begin{minipage}{\dimexpr\columnwidth-2\fboxsep\relax}}
{\end{minipage}\end{lrbox}%
\begin{center}
\colorbox[HTML]{\colboxcolor}{\usebox{\selvestebox}}
\end{center}}
这种lrbox
环境对于这种业务非常有用。
您不必猜测宽度(这也不是我使用的单位);只需记住在的内容中添加了px
填充。\fboxsep
\colorbox
现在
\begin{colbox}{F8E0E0}
\textbf{Riddle: }\\ \textit{some text here}
\end{colbox}
会起作用。注意如何将参数传递到环境的“末尾部分”,这是一种标准技术。
答案2
为了简化此类环境的创建,您可以使用类似的包framed
或者environ
。
示例framed
(允许分页):
\newenvironment{colbox}{%
\def\FrameCommand{\colorbox{colboxcolor}}%
\MakeFramed{\advance\hsize-\width \FrameRestore}}
{\endMakeFramed}
例如
\definecolor{colboxcolor}{HTML}{F8E0E0}
然后使用:
\begin{colbox}
Text
\end{colbox}
带包的示例environ
(无分页符):
\NewEnviron{colbox}[1][\linewidth]{%
\colorbox{\colboxcolor}{%
\begin{minipage}{#1}
\BODY
\end{minipage}%
}
}
答案3
谢谢大家的回答……
我查看了所有解决方案并决定第一个解决方案对我来说是正确的。
这样做的原因是:这是一个非常简单的解决方案,它可以完成工作,并且正如第一篇文章所述,我不是唯一维护此文档的人,所以简单是一件好事......
再次感谢您的帮助,祝大家有愉快的一天
我的最终解决方案
如果将来有人想看到我最终得到的答案,我是否提供了我的最终代码:
\documentclass[12pt,a4paper]{book} % Book settings + layout
\usepackage{xcolor} % Extended colors
\usepackage{color} % Color extended names
%DEFINE ENVIRONMENT BLOCK
% Riddle
\newsavebox{\riddlebox}
\newenvironment{colboxTre}[1]
{\newcommand\colboxcolor{#1}%
\begin{lrbox}{\riddlebox}%
\begin{minipage}{\dimexpr\columnwidth-2\fboxsep\relax} \textbf{Riddle:} \\ \itshape }
{\end{minipage}\end{lrbox}%
\begin{center}
\colorbox[HTML]{\colboxcolor}{\usebox{\riddlebox}}
\end{center}}
\begin{document}
\begin{colboxTre}{F8E0E0}
some text here
\end{colboxTre}
Some more text
\end{document}
答案4
正如非常相关的问题所述\newenvironment 环境评论问题用这个包可以很容易地实现这样的框adjustbox
。技术解决方案与 egreg 的答案基本相同,但用户界面更漂亮、更灵活。您可以使用键调整边距,并使用类似代码margin
设置背景颜色。您需要自己加载。bgcolor
\colorbox
xcolor
\documentclass{article}
\usepackage{xcolor}
\usepackage{adjustbox}
\newenvironment{colbox}[2]{%
\begin{adjustbox}{minipage=[b]{380px},margin=1ex,bgcolor=#1,env=center}% or use `bgcolor={HTML}{#1}` if you want to force HTML colors
\textbf{#2}\\
}{%
\end{adjustbox}%
}
\begin{document}
\begin{colbox}{green}{Riddle me this, Batman:}
What is ....
\end{colbox}
\begin{colbox}{{HTML}{F8E0E0}}{Riddle 2:}
What is ....
\end{colbox}
\end{document}