他の環境に干渉することなく、既存のLaTeX環境をカスタマイズする方法
-
03-07-2019 - |
質問
プロジェクトの文書化に Sphinx を使用しています。 再構成されたテキストからLaTeXファイルを生成します。
灰色の背景色を tips および notes に設定したいので、graybox環境を作成した後に notice 環境をカスタマイズしました:
\definecolor{MyGray}{rgb}{0.80,0.80,0.80}
\makeatletter\newenvironment{graybox}{%
\begin{lrbox}{\@tempboxa}\begin{minipage}{\columnwidth}}{\end{minipage}\end{lrbox}%
\colorbox{MyGray}{\usebox{\@tempboxa}}
}\makeatother
\makeatletter
\renewenvironment{notice}[2]{
\begin{graybox}
\bf\it
\def\py@noticetype{#1}
\par\strong{#2}
\csname py@noticestart@#1\endcsname
}
{
\csname py@noticeend@\py@noticetype\endcsname
\end{graybox}
}
\makeatother
図 notice 環境内の環境。その場合、私はこのエラーを受け取ります:
LaTeXエラー:外部パーモードではありません
その notice 環境に灰色の背景を設定する方法はありますか?
解決 2
私の質問に答えてくれてありがとう godbyk と Jouni 。
問題は、 LaTeX で直接コーディングしないことです。ドキュメントを再構成されたテキストで記述し、Sphinxは LaTeX ファイルを出力します。
しかし、解決策を見つけました: flowfram パッケージの staticfigure を使用するために figure 環境を再定義します:
\usepackage{flowfram}
\definecolor{MyGray}{rgb}{0.80,0.80,0.80}
\makeatletter\newenvironment{graybox}{%
\begin{lrbox}{\@tempboxa}\begin{minipage}{\columnwidth}}{\end{minipage}\end{lrbox}%
\colorbox{MyGray}{\usebox{\@tempboxa}}
}\makeatother
\makeatletter
\renewenvironment{notice}[2]{
\begin{graybox}
\bf\it
\def\py@noticetype{#1}
\par\strong{#2}
\csname py@noticestart@#1\endcsname
}
{
\csname py@noticeend@\py@noticetype\endcsname
\end{graybox}
}
\makeatother
\renewenvironment{figure}[6]{
\begin{staticfigure}
}{
\end{staticfigure}
}
PS: 'figure'を再定義するとき、引数の数に6を追加する必要がありました。そうしないと、pdfファイルに 'htbp'が出力されます( LaTeXではありませんエキスパート。これは、この問題の解決策にすぎません)
他のヒント
これは FAQ です。灰色のボックス内に図(または出力の他の場所に移動できる他の「フロート」)を置くことは意味がありません。図に灰色のボックスを含める場合は、図の環境内に灰色のボックス環境を配置します。
Jouniが正しく指摘したように、図と表(つまり、フロート)は移動でき、グレーのボックスにそれらを含めることはできません。目的の効果を得るには、2つのオプションがあります:
- 通知全体を
figure
環境に配置します(LaTeXが選択した場合、通知全体をページ上または新しいページに移動できます)。 -
フロートを使用しないでください(
figure
環境)-\ includegraphics
を使用して、画像をnotice
環境。ただし、キャプションは図またはテーブル環境内でのみ機能するため、この非図形でキャプションを使用することはできません。この画像にキャプションを関連付ける場合は、caption
パッケージ:\documentclass{article} \usepackage{caption}% let's us use captions outside of floats \usepackage{lipsum}% provides filler text \begin{document} \lipsum[1] \begin{center} \includegraphics{mypic} \captionof{figure}{This is my picture.}% makes a caption for non-floats \label{fig:mypic} \end{center} \lipsum[2] \end{document}
私はSphinxを使用したことがないので、これを彼らの出力に統合することであまりあなたを助けることはできないと思います。