Выравнивание в ТеХе

Nat21

Поставить слово "Глава" перед номером секции можно например командой

\renewcommand\section{\@startsection{section}{1}{\}%
{-3.5ex \@plus -1ex \@minus -.2ex}{2.3ex \@plus.2ex}{\noindent\font\Large\bfseries Глава\ }}

Но сделать, чтобы длинные названия глав при переносе выравнивались по левому краю, не удалось добиться никакими способами. Потому что эти способы конфликтуют либо с ссылками на главы в тексте, либо с оглавлением, либо с колонтитулами
Как сделать такую простую вещь?

lenmas

Сделай лучше свой раздел, это будет проще. Когда писал диссер, я так и сделал. И определяй там чего хочешь Как делать, читай Львовского.

Nat21

Кстати Львовского не достаточно для решения этой задачи. Не все примеры оттуда компилятся в современном MikTEXе. Сомневаюсь что созданный по его технологии раздел грамотно добавится в оглавление и колонтитулы. Короче Львовский изъезжен вдоль и поперек
Я тут хотел передрать и подправить готовое определение, но сканирование дистрибутива MikTEXа ничего не дало. Неужто они в бинарниках разделы определяют

seregaohota

Не может быть.
CyrTeX-ru mailing list Archives and Information:
http://info.vsu.ru/Lists/CyrTeX-ru/List.html
Поройся, или подпишись и поспрашивай. Ещё фидошные и Usenet конференции по теху были - поищи в google groups.

lenmas

Ну, не в тупую передрать примеры из Львовского, а самому сделать то, что хочется. У меня вроде получалось и в колонтитулы засунуть, и в содержание все, что хотелось.

Nat21

Львовский сам пишет: в этих примерах вы, дети мои, кое-чего не поймете, потому что я вам этого ранее не объяснял. Читаю и, действительно не понимаю – не соврал
Так что в пору изучать программирование на языке TEX
У меня вроде получалось
Отдай мне свой стилевой файл

Nat21

Не, ну конечно определение того, что я выше написал, нашел, но на более глубоком уровне определения секции что-то не видно.
Поройся, или подпишись и поспрашивай
Интересная конференция. На досуге почитаю. Но по данному вопросу время истекло. Надо уже сейчас

kravecnata

Непонятно, что тебе нужно. Казалось, бы для выравнивания по левому краю достаточно дать команду \raggedright.
(Кстати, непонятно, зачем ты туда \noindent влепил.)

Nat21

Мне в свою очередь непонятно, что здесь непонятно. Нужно чтобы текст заголовка был выровнен по левому краю. Если не добавлять слово “Глава”, то так происходит – TEX делает отступ слева равный по ширине номеру секции.
\raggedright не действует. И скорее всего выравнивания нельзя добиться модификацией приведенной мной команды

kravecnata

Вроде бы, так должно работать:
\renewcommand\section{\@startsection{section}{1}{\}%
{-3.5ex \@plus -1ex \@minus -.2ex}{2.3ex \@plus.2ex}{\noindent\font\Large\bfseries Глава\ \let\@hangfrom=\relax}}

Nat21

Так действительно выравнивает, но всю строку целиком: “Глава 1 Название…”. Это несколько лучше чем было.
Но я себе представляю правильное выравнивание так: если стереть слова “Глава 1” в готовой распечатке, то оставшийся текст “Название…” должен быть выровнен по левому краю, с отступом слева по ширине равным фразе “Глава 1 ”

kravecnata

Я же сказал, что непонятно, что тебе надо. Так?
\renewcommand\section{\@startsection{section}{1}{\ Глава }%
{-3.5ex \@plus -1ex \@minus -.2ex}{2.3ex \@plus.2ex}{\noindent\font\Large\bfseries}}

Nat21

Сенкс.
Есть еще вопросы
Как подправить, чтобы аналогичное выравнивание было в оглавлении:

\renewcommand\section[2]{%
% \addpenalty{-\@highpenalty}%
\vskip 1.0em \@plus\
\setlength\@tempdima{1.4em}%
\rightskip=\@tocrmarg%
\leftskip=\@tocrmarg%
\begingroup
\parindent \ \rightskip \@pnumwidth
\parfillskip -\@pnumwidth
\leavevmode
\bfseries
\advance\leftskip\@tempdima
\hskip -\leftskip
Глава #1\nobreak\hfil \nobreak\\@pnumwidth{\hss #2}\par
% \penalty\@highpenalty
\endgroup
}

kravecnata

Как уже сказали, проще было бы своё определение \section сделать, без \@startsection. Но извращаться так извращаться.

\newcommand{\sectionnumberline}[1]{\\@tempdima{Глава #1\hfil}}
\renewcommand\section[2]{%
% \addpenalty{-\@highpenalty}%
\vskip 1.0em \@plus\
\setlength\@tempdima{5em}% Число вместо 5 подбирается экспериментально
\rightskip=\@tocrmarg%
\leftskip=\@tocrmarg%
\begingroup
\parindent \ \rightskip \@pnumwidth
\parfillskip -\@pnumwidth
\leavevmode
\bfseries
\advance\leftskip\@tempdima
\hskip -\@tempdima %?
\let\numberline=\sectionnumberline
#1\nobreak\hfil \nobreak\\@pnumwidth{\hss #2}\par
% \penalty\@highpenalty
\endgroup
}

Примечание - вопрос специалистам.
В строке, помеченной %? в стандартных файлах стоит \hskip -\leftskip. Я не могу понять хитрый замысел. По-моему, получающийся при изначально ненулевом \leftskip результат - просто бред.

Nat21

Выравнивает. Только слово "Глава" теперь начинается не от левого края страницы. Надо чтоб от левого, как основной раздел

kravecnata

Вот эти строчки:
\rightskip=\@tocrmarg%
\leftskip=\@tocrmarg%
не я добавлял к стандартным, а ты (или Пушкин). Если не нужен тебе лишний сдвиг, так и убери его.

Nat21

Простым убиранием \rightskip \leftskip этого не добьешься, потому что первая глава выравнивается нормально, а следующие - по предыдущему элементу оглавления.
Поэтому законченнй вариант такой:

\newcommand{\sectionnumberline}[1]{\\@tempdima{Глава #1\hfil}}
\renewcommand\section[2]{%
\vskip 1.0em \@plus\
\setlength\@tempdima{0em}%
\leftskip=\@tempdima
\setlength\@tempdima{5em}
\begingroup
\parindent \ \rightskip \@pnumwidth
\parfillskip -\@pnumwidth
\leavevmode
\bfseries
\advance\leftskip\@tempdima
\hskip -\@tempdima %
\let\numberline=\sectionnumberline
#1\nobreak\hfil \nobreak\\@pnumwidth{\hss #2}\par
\endgroup
}
Оставить комментарий
Имя или ник:
Комментарий: