2010-07-07 5 views
1

У меня framed окружения memoir класса с содержанием, как это:Заголовок п в начале структурированного среде в LaTeX, не приводя отступы

\begin{framed} 
\subsection{Article 1} 
Content of Article 1 
\subsection{Article 2} 
Content: Article 2 
\end{framed} 

Это делает следующим образом:

._________________. 
|     | <-- superfluous whitespace 
| Article 1  | 
| Content of Art- | 
| icle 1   | 
|     | 
| Article 2  | 
| Content: Artic- | 
| le 2   | 
.-----------------. 

\subsection{} вводит пробелы, предшествующие самому себе, которые я бы предпочел не находиться внутри этой среды framed, хотя я хочу, чтобы такие пробелы были в обычном тексте (т. Е. Вне окруженной среды t) и для подразделов - после первого.

Когда внутри структурированном среды, я хотел бы иметь форматирование по существу, как это:

._________________. 
| Article 1  | 
| Content of Art- | 
| icle 1   | 
|     | 
| Article 2  | 
| Content: Artic- | 
| le 2   | 
.-----------------. 

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


Редактировать: На основе замечаний mkluwe «s, я искоренил команду \ подраздел в memoir.cls:

3314 \newcommand{\subsection}{% 
3315 \subsechook% 
3316 \@startsection{subsection}{2}% level 2 
3317  {\subsecindent}%   heading indent 
3318  {\beforesubsecskip}%  skip before the heading 
3319  {\aftersubsecskip}%   skip after the heading 
3320  {\normalfont\subsecheadstyle}} % font 
3321 \newcommand{\subsechook}{} 
3322 \newcommand{\setsubsechook}[1]{\renewcommand{\subsechook}{#1}} 
3323 \newlength{\subsecindent} 
3324 \newcommand{\setsubsecindent}[1]{\setlength{\subsecindent}{#1}} 
3325 \setsubsecindent{\[email protected]} 
3326 \newskip\beforesubsecskip 
3327 \newcommand{\setbeforesubsecskip}[1]{\setlength{\beforesubsecskip}{#1}} 
3328 \setbeforesubsecskip{-3.25ex \@plus -1ex \@minus -.2ex} 
3329 \newskip\aftersubsecskip 
3330 \newcommand{\setaftersubsecskip}[1]{\setlength{\aftersubsecskip}{#1}} 
3331 \setaftersubsecskip{1.5ex \@plus .2ex} 

Так следствие на мой вопрос выше, казалось бы: Как можно уточнить эту команду subsection, чтобы, например, если это первый элемент в среде (например, framed), его \beforesubsecskip очень маленький?


Благодарим за понимание.

С уважением,

Brian

ответ

1

Если это случается нечасто, вы можете просто использовать команду vspace в качестве первой записи внутри каждого кадра. Вы даже можете создать новую среду фрейма, чтобы сделать это автоматически. В любом случае вам нужно будет настроить vspace, чтобы убрать нужное количество дополнений. Как вы хотите, новая среда ниже удалит отступы для первой записи подсекции, но не для последующих:

\newenvironment{subsectframe}{\begin{framed}\vspace{-1.0\baselineskip}}{\end{framed}} 

\begin{document} 

\begin{subsectframe} 
\subsection{Article 1} 
Content of Article 1 
\subsection{Article 2} 
Content: Article 2 
\end{subsectframe} 

\end{document} 

Я понимаю, что проблема «с подразделом».Однако я думаю, что исправление этого, создавая новую среду, будет более чистым решением, чем попытка изменить команду подраздела, чтобы он разумно избегал добавления места в зависимости от того, где он находится.

+0

Спасибо. Это именно то, что я искал. Я не знал, что '\ vspace' может иметь отрицательные атрибуты! –

+0

Одно предостережение, с которым я могу работать, заключается в том, что когда среда с фреймом начинается с чего-то другого, кроме '\ subsection' (или эквивалента, с ведущим пространством), текст начинается поверх строки кадра, т. Е. '\ vspace {-1.0 \ baselineskip}' ест слишком много места. В идеале, что '\ vspace' появлялось бы только тогда, когда кадр начинается с' \ subsection' или эквивалента. –

+0

@Brian: Да, новая среда предполагает, что вы знаете, что будет в ней. Так что, если это кадр, который начнется с подраздела, вы используете новый «субцикл», и если он не будет иметь начальный подраздел, просто используйте обычную среду с «рамкой». Если вы многое редактируете, и что-то часто меняется внутри фрейма (т. Е. Меняться от отсутствия начального подраздела), то лучше вообще не беспокоиться о новой среде фрейма, просто используйте команды vspace по мере необходимости. –

1

Я не знаю эту среду, но в документации, которую я нашел:

\ FrameHeightAdjust: макро; Высота рамы над базовым в верхней части страницы

Вы можете попробовать diddling что ...

+0

спасибо за ответ; Я пробовал переделывать с помощью '\ FrameHeightAdjust', но это, похоже, не имело никакого эффекта. Я думаю, что проблема заключается в команде '\ subsection', как в моем редактировании. –

1

как быстрое и грязным решение, которое я скопировал определение команды \subsection из article.cls и удален по вертикали пропуска:

\documentclass{article} 
\usepackage{framed} 
\makeatletter 
\newcommand\subsectionx{\@startsection{subsection}{2}{\[email protected]}% 
            {0ex}% 
            {1.5ex \@plus .2ex}% 
            {\normalfont\large\bfseries}} 
\makeatother 
\begin{document} 
\begin{framed} 
\subsectionx{Article 1} 
Content of Article 1 
\subsection{Article 2} 
Content: Article 2 
\end{framed} 
\end{document} 
+0

Спасибо за ответ. В подразделе определенно присутствует действие. Однако я не хочу удалять вертикальные пропуски для всех подразделов - просто подразделы, которые запускают новые среды. –

+0

Да, вы пытались запустить мой пример? Я предоставляю новую команду \ subsectionx, которая исключает вертикальный пропуск. Это используется для запуска первого подраздела в среде с рамкой. Я предполагаю, что вы упустили приложенный «х» (я должен был сделать его более ощутимым). – mkluwe