Встроенные фигуры с уравненной нумерацией в LaTeX - PullRequest
2 голосов
/ 05 марта 2010

По какой-то причине я подумал, что было бы неплохо иметь встроенные фигуры (то есть не плавать), как в уравнении. Они должны быть пронумерованы, так как я хочу иметь возможность ссылаться на них позже. Я придумал две попытки, но у обеих есть свои недостатки. Я надеюсь на некоторые отзывы, которые могут разобраться со мной.

Первая попытка использует 3 мини-страницы (см. Код ниже). Это выглядит хорошо, так как номер фигуры выровнен по вертикали с серединой фигуры. Однако, когда ширина рисунка приближается к ширине страницы, все начинает разрушаться. Кроме того, он не очень хорошо ведет себя на разрывах страниц.

Вторая попытка использует среду уравнения с другой меткой. Помимо того, что я не знаю, разумно ли это делать, это создает дополнительные пробелы в начале следующего абзаца. Он также не выравнивает метку по центру по вертикали, а помещает ее снизу.

Вот пример обеих попыток:

\documentclass{article}
\usepackage{pgf,tikz}
\usepackage{lipsum}

%
% Attempt 1
%
% Uses 3 minipages.
% Breaks if figure is wide, and at the bottom of a page.
%

\usepackage{calc}
\newlength{\figlabelwidth} % width of label
\newlength{\imgwidth} % max. width of figure

\newenvironment{inlinefig1}
{
 \refstepcounter{figure} % increase figure number
 \begin{center} % don't know if this is necessary
 \setlength{\figlabelwidth}{\widthof{(Fig. \thefigure)}} 
 \setlength{\imgwidth}{\textwidth - \figlabelwidth - \figlabelwidth} 
 \setlength{\imgwidth}{0.9\imgwidth} % to be on the safe side
 \begin{minipage}{\figlabelwidth}\makebox[\figlabelwidth]{}\end{minipage} % ghost minipage for centering
 \hfill
 \begin{minipage}{\imgwidth}\begin{center} % minipage for figure
}
{
 \end{center}\end{minipage}
 \hfill
 \begin{minipage}{\figlabelwidth}(Fig. \thefigure)\end{minipage} % minipage for label
 \end{center}
}

%
% Attempt 2
%
% Uses an equation environment with relabeled labels.
% Label is not centered vertically, and produces extra whitespace in the paragraph after it.
%

\def\theoldequation{\theequation} % save the old equation format

\newenvironment{inlinefig2}
{
 \refstepcounter{figure} % increase figure number
 \def\theequation{Fig. \arabic{figure}} % switch to figure numbering
 \begin{equation}
}
{
 \end{equation}
 \def\theequation{\theoldequation} % reset to old equation label format
 \addtocounter{equation}{-1} % correct the equation numbering
}

\begin{document}
\noindent \lipsum[1]
\begin{inlinefig1}
 \begin{tikzpicture}
  \draw (0,0) grid +(12,2);
 \end{tikzpicture}
\end{inlinefig1}
\lipsum[2]
\begin{inlinefig2}
 \begin{tikzpicture}
  \draw (0,0) grid +(12,2);
 \end{tikzpicture}
\end{inlinefig2}
\lipsum[3]
\end{document}

Ребята, есть ли у вас какие-нибудь лучшие идеи или предложения по устранению каких-либо недостатков? Спасибо!

Ответы [ 2 ]

3 голосов
/ 05 марта 2010

Если вы используете пакет "float" , вы можете указать H в качестве места размещения, чтобы оно отображалось именно "здесь".

0 голосов
/ 05 марта 2010
\newbox\inlinefigbox
\newenvironment{inlinefig3} 
{
\refstepcounter{figure} % increase figure number 
\setbox\inlinefigbox=\hbox\bgroup
}
{
\egroup
\hbox to \hsize{\hfil \box \inlinefigbox \hss (Fig. \arabic{figure})}
}
...