LINUX.ORG.RU

LaTeX, оглавление

 


0

1

Имеется оглавление, формат записей выставлен так:

\makeatletter
\renewcommand{\l@section}{\@dottedtocline{1}{0em}{2.1em}}
\renewcommand{\l@subsection}{\@dottedtocline{1}{0em}{2.1em}}
\renewcommand{\l@subsubsection}{\@dottedtocline{1}{0em}{0em}}
\makeatother

Номера секци и субсекций - арабские, без точки в конце.

Вопрос таков: А как добавить точку в конец номера секции\субсекции в оглавление?

Т.е. сейчас

1 Бла-бла-бла.........n
1.1 Бла-бла-бла.......n

а надо

1. Бла-бла-бла.........n
1.1. Бла-бла-бла.......n
★★★★★

Последнее исправление: Norgat (всего исправлений: 1)

Не пойдет: \section вызывает \startsection, который в toc добавляет строку так:

    \addcontentsline{toc}{#1}{%
      \ifnum #2>\c@secnumdepth \else
        \protect\numberline{\csname the#1\endcsname}%
      \fi
      #7}%
Так что, для такого извращения надо либо переопределять \startsection, либо вручную переопределять все \section, subsection и т.п. что хуже.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Ок, завтра посмотрю, пройдёт ли оформление без точек.

для такого извращения надо либо переопределять \startsection

Можно пример, как это делается?

Norgat ★★★★★
() автор топика
Ответ на: комментарий от Norgat

Там, оказывается, \@sect надо переделывать:

\makeatletter

\def\@sect#1#2#3#4#5#6[#7]#8{%
  \ifnum #2>\c@secnumdepth
    \let\@svsec\@empty
  \else
    \refstepcounter{#1}%
    \protected@edef\@svsec{\@seccntformat{#1}\relax}%
  \fi
  \@tempskipa #5\relax
  \ifdim \@tempskipa>\z@
    \begingroup
      #6{%
        \@hangfrom{\hskip #3\relax\@svsec}%
          \interlinepenalty \@M #8\@@par}%
    \endgroup
    \csname #1mark\endcsname{#7}%
    \addcontentsline{toc}{#1}{%
      \ifnum #2>\c@secnumdepth \else
        \protect\numberline{\csname the#1\endcsname.}%
      \fi
      #7}%
  \else
    \def\@svsechd{%
      #6{\hskip #3\relax
      \@svsec #8}%
      \csname #1mark\endcsname{#7}%
      \addcontentsline{toc}{#1}{%
        \ifnum #2>\c@secnumdepth \else
          \protect\numberline{\csname the#1\endcsname}%
        \fi
        #7}}%
  \fi
  \@xsect{#5}}

\makeatother

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от theNamelessOne

У меня с ним не срослось пока, там какая-то мутноватая дока к нему (я ж её листал перед тем, как на форум полезть), с ходу не разобрался. Может в будущем раскурю его нормально, как время будет :)

Norgat ★★★★★
() автор топика
Ответ на: комментарий от theNamelessOne

Да я обычно так и делаю: если что-то надо поменять, лезу в исходники, выдираю нужный кусок и меняю, как мне надо.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от BattleCoder

А чего там сложного? Я взял код - скопипастил и изменил, что надо. В данном случае - тупо поставил точку, куда надо.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Может я и испорченный java-кодер, но этот код нечитаемый же. %)

p.s. будет время может и осилю кнута «всё про tex». или другие книжки почитаю... моя проблема в отсутствии систематизации, latex учил по кускам, и почти сразу же на нём писал почти его не зная (сроки поджимали)

BattleCoder ★★★★★
()
Ответ на: комментарий от BattleCoder

Ну смотрите, утрированный пример: писать сайтики на хтмл и похапе — это просто, но если вам захочется поменять поведение браузера, например, чтобы он начинал закачку, встретив тэг <a> — извиняйте, сами напросились :)

buddhist ★★★★★
()
Ответ на: комментарий от buddhist

Ну всё-таки писать на LaTeX проще, чем на XML/HTML =) хотя я думаю на втором тоже можно и формулы делать... и шрифты менять, и много всего...

Если XML всё-таки язык разметки, то LaTeX - это больше императивный язык. И в этом его плюс, это делает его проще.

Но многие вещи в нём явно устарели и усложнены... и для сохранения совместимости доступен богатый набор костыл^W пакетов.

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

Ну вот пример \begin{env} \end{env} - вот не кажется вам, что это громоздко? Напоминает begin..end в паскале.

BattleCoder ★★★★★
()
Ответ на: комментарий от BattleCoder

Ну вот пример \begin{env} \end{env} - вот не кажется вам, что это громоздко? Напоминает begin..end в паскале.

На это вообще пофиг, как и на любую статичную конструкцию. Ибо легко заменяется буфером копирования\сниппетами. Хуже то, что доки не всегда удаётся быстро найти.

Norgat ★★★★★
() автор топика
Ответ на: комментарий от BattleCoder

\begin{env} \end{env} - вот не кажется вам, что это громоздко?

Не кажется. Получается удобный выделенный блок. Другой вариант - сделать \long\def\команда и пихать все в ее аргумент. А это не так явно.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от BattleCoder

вот не кажется вам, что это громоздко? Напоминает begin..end в паскале.

Вы говорите об этом любителю паскаля :)

buddhist ★★★★★
()
Ответ на: комментарий от BattleCoder

Но многие вещи в нём явно устарели и усложнены... и для сохранения совместимости доступен богатый набор костыл^W пакетов.

+1. Давно пора ломать API.

Zodd ★★★★★
()
Ответ на: комментарий от dmfd

Он не дохлый, он никогда не предназначался для продакшена (blackbox тоже). Для продакшена есть Ада.

buddhist ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.