我想定义一个类似样式的环境。也就是说,当将任何段落放入该环境中时,它会应用各种格式。
例如:
- 我希望文本以某种字体显示
- 它具有特定的颜色,在环境中定义,如果可能的话,使用我定义颜色的命令
- 以大尺寸显示
- 以粗体显示
- 没有缩进
- 在下一段中添加一个空格
- ETC。
我在这里看到了一些答案,并且写了这段代码:
\newenvironment{redtitle}{%
%\bgroup
\par
\fontfamily{ptm}\selectfont \noindent \textcolor{red} \textbf
}
{%
\par %\egroup
}
这是我尝试应用它的片段:
\begin{redtitle}
Some nifty code and stuffz
\end{redtitle}
我收到此错误:
!\textbf 的参数有一个额外的 }。\par l.230 \begin{redtitle} 我遇到了刚刚插入的
}' that doesn't seem to match anything. For example,
\def\a#1{...}' 和\a}' would produce this error. If you simply proceed now, the
\par',这将导致我报告失控参数,这可能是问题的根源。但是如果你的}' was spurious, just type
2' 它会消失。参数失控?!段落在 \textbf 完成之前结束。\par l.230 \begin{redtitle} 我怀疑您忘记了一个 `}',导致我将这个控制序列应用于太多文本。我们该如何恢复?我的计划是忘记整件事并希望一切顺利。
那么,我该如何实现这个目标呢?
我是 LaTeX 的新手,因此如果您发现任何不好的做法或者有更好的方法,我将非常感谢您的反馈。
答案1
您犯了几个错误。主要是您混淆了接受参数的宏(例如\textcolor
和\textbf
)和不接受参数的宏(在本例中为开关\color
和\bfseries
)。
\textcolor
需要两个参数(好吧,这比这更复杂一点,但我们先回避这个问题):颜色和要设置为该颜色的文本,因此通常你有例如
\textcolor{red}{text which will be printed in red}
当你写作时
\textcolor{red} \textbf
在 TeX 看来,这和你写的差不多
\textcolor{red}{\textbf}
但\textbf
它本身是一个需要参数的宏,所以事情会变得非常错误(正如您所经历的)。
长话短说:使用开关:\bfseries
是一个宏,告诉“从这里开始将文本变为粗体”。您不需要括号:\bfseries{...}
是无用的。由于环境总是形成一个组,因此您不需要在环境代码中显式地\bgroup
使用 and 。\egroup
\newenvironment{redtitle}{%
\par
\fontfamily{ptm}\selectfont
\noindent
\color{red}%
\bfseries
\ignorespaces
}
{%
\par
}
答案2
下面是一个您可以自定义的示例。我定义了两个环境。第一个与您的类似;第二个是列表环境,可能更适合您的需求。段落的样式在宏中定义\myenvstyle
:
\newcommand{\myenvstyle}{%
\fontfamily{Cochineal-LF}\selectfont\color{mycolor}\Large}
而颜色是通过以下方式定义的\definecolor
(这只是使用该包定义新颜色的众多方法之一xcolor
):
\definecolor{mycolor}{rgb}{1,0,1}
这是一个最小的工作示例:
\documentclass{article}
\usepackage{lipsum}
\usepackage{xcolor}
\definecolor{mycolor}{rgb}{1,0,1}
\newcommand{\myenvstyle}{%
\fontfamily{Cochineal-LF}\selectfont\color{mycolor}\Large}
\newenvironment{myenv}
{\par\vspace{\baselineskip}%
\myenvstyle\noindent\ignorespaces}
{\par\vspace{\baselineskip}}
\newenvironment{mylistenv}
{\list{}{\listparindent 0em%
\itemindent \listparindent
\leftmargin 0pt
\rightmargin \leftmargin
\parsep 0pt}%
\item\relax\myenvstyle}
{\endlist}
\begin{document}
\lipsum[11]
\begin{myenv}
\lipsum[7]
\end{myenv}
\lipsum[11]
\begin{mylistenv}
\lipsum[7]
\end{mylistenv}
\lipsum[11]
\end{document}
答案3
使用 XeTeX 或 LuaLaTeX 的解决方案:
\documentclass{article}
\usepackage{fontspec}
\usepackage{unicode-math}
\usepackage{xcolor}
\usepackage{lipsum}
%text fonts
\setmainfont{STIX Two Text}
\setsansfont{GFS Neohellenic}
%math fonts
\setmathfont{STIX Two Math}
\setmathfont{GFS Neohellenic Math}[version=sansmath]
\newcounter{myenv}
\newenvironment{myenv}[1][]% environment name
{% begin code
\par\vspace{\baselineskip}\color{blue}%color of body
\sffamily\mathversion{sansmath}\noindent
\refstepcounter{myenv}%
\textcolor{red}{\textbf{My Enviroment \themyenv\ #1}}%color of title
\par\noindent\ignorespaces% if you want to indent jus delete \noindent
}%
{% end code
\par\vspace{\baselineskip}%
\noindent\ignorespacesafterend%
}
\begin{document}
\lipsum[1]
\[
\sum_{i\in I} A_{i}=\prod_{j\in J}B_j
\]
\begin{myenv}
\label{foo}
\lipsum[2]
\[
\sum_{i\in I} A_{i}=\prod_{j\in J}B_j
\]
\end{myenv}
A reference~\ref{foo}
\end{document}