LINUX.ORG.RU

LaTex (секция-приложение)


0

1

День добрый.
Пытаюсь писать книгу в MikTex 2.8.
Есть необходимость использовать «приложения».

Я сделал секции-приложения так:
%-------определяем секции без номера--------%
\newcommand\nsection[1]{% секция без номера
\phantomsection
\addcontentsline{toc}{section}{#1}
\section*{#1}}
%-------определяем секции приложения--------%
\newcounter{sect}
\renewcommand{\thesect}{\Asbuk{sect}}
\newcommand{\sectionp}[1]{
\stepcounter{totalpril}%для подсчета количества
\refstepcounter{sect}%для ссылок
\nsection{\mbox{ПРИЛОЖЕНИЕ\ \thesect}\ #1}}

«\ » - это как я понял несжимаемый пробел!

У меня получается следующее:
ПРИЛОЖЕНИЕ Б Текст программы-клиента АИС . . . . . . . . . . . . . . . . . . 134
ПРИЛОЖЕНИЕ В Текст программы «Моделирования однофазных потоков в
^^^<--- Тут расстояние больше чем в предыдущей строке!
системе газоносный пласт – блок входных ниток» . . . . . . . . . . . . . . . 155

Получаются названия приложений неровно! Как это исправить? Есть пример-картинка.
https://info.vsu.ru/Lists/CyrTeX-ru/Message/9160-02-B/pril.jpg
Заранее спасибо.


Ужас. Почему не обычный \appendix?

nnz ★★★★
()

Во-первых, про вантузячий софт на ЛОРе можно было бы и не говорить. Во-вторых, если уж не хотите использовать \appendix, посмотрите для начала, как определяются разделы в используемом вами стиле. Если у вас появляется абзацный отступ, добавляйте \noindent

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

Есть такой вот вариант

Есть такой вот вариант.
Но у него есть недостаток:
Не работают нормально ссылки на раздел.
Вот это: В приложении~\ref{pril:bd} приведен скрипт БД.\\
должно выглядеть как: В приложении А приведен скрипт БД.
он выгдядит: В приложении Приложение А приведен скрипт БД.

Может можно как-то ссылку сделать нормально?
Заранее спасибо.

\documentclass[a4paper,14pt,russian]{extarticle}
\usepackage[T2A]{fontenc}
\usepackage{pscyr}
\usepackage[cp1251]{inputenc}
\usepackage[russian]{babel}
\usepackage[a4paper,left=20mm,right=10mm,top=20mm,bottom=20mm,headsep=0mm,headheight=0mm]{geometry}
\renewcommand\appendixname{Приложение}
\makeatletter
\def\redeflsection{\def\l@section{\@dottedtocline{1}{1.5em}{7.8em}}}
\renewcommand\appendix{\par
\setcounter{section}{0}%
\setcounter{subsection}{0}%
\def\@chapapp{\appendixname}%
\addtocontents{toc}{\protect\redeflsection}
\def\thesection{\appendixname\hspace{0.2cm}\@Asbuk\c@section}}
\makeatother
\begin{document}
\tableofcontents
\section{Название 1}

В приложении~\ref{pril:bd} приведен скрипт БД.\\
В приложении~\ref{pril:pr} приведен исходный код программы.
\subsection{Название 1.1}
\section{Название 2}
\appendix
\section{Скрипт базы данных, хранящей эксплуатационные параметры скважин}
\label{pril:bd}
\section{Текст программы «Моделирования однофазных потоков в системе газоносный пласт – блок входных ниток»}
\label{pril:pr}
\end{document}

Youra_P
() автор топика
Ответ на: Есть такой вот вариант от Youra_P

Уберите \appendixname из

\def\thesection{\appendixname\hspace{0.2cm}\@Asbuk\c@section}
Кстати, простая команда \appendix меняет название секции на «Приложение» и меняет нумерацию на буквы :)

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

Я знаю, что может команда \appendix!
Но TOC будет написано:
А Скрипт базы данных, хранящей эксплуатационные параметры скважин
Б Текст программы «Моделирования однофазных потоков в системе газоносный пласт – блок входных ниток»

И НИФИГА не будет написано слово «ПРИЛОЖЕНИЕ А» ...
Вот такая вот фишка.
А у нас в стандарте предприятия написано именно «ПРИЛОЖЕНИЕ А».
И у нас кроме Word ничего не знают. Так что если LaTex, то только
как в стандарте.
Я уже достаточно давно с приложениями пытаюсь разобраться.
У народа такое настроение, что на любой вопрос отправляют
читать маны!
Что я в \redeflsection неправильно определил?

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

Вы меня извините, но у меня нифига не получается.
Если Вам несложно поправьте пример моего кода.
Очень прошу.
Заранее благодарен.

Youra_P
() автор топика
Ответ на: комментарий от Youra_P
\documentclass[a4paper,14pt,russian]{extarticle}
\usepackage[koi8-r]{inputenc}
\usepackage[russian]{babel}
\usepackage[a4paper,left=20mm,right=10mm,top=20mm,bottom=20mm,headsep=0mm,headheight=0mm]{geometry}
\renewcommand\appendixname{Приложение}
\makeatletter
\gdef\appendix{\par
\setcounter{section}{0}%
\setcounter{subsection}{0}%
\def\@chapapp{\appendixname}%
\def\thesection{\hspace{0.2cm}\@Asbuk\c@section}
\def\section##1{\refstepcounter{section}\vspace{3em}\goodbreak\noindent{\Large\bf\appendixname\thesection\hspace{1em} ##1}%
\nobreak\vspace{1em}\nobreak\noindent%
\addcontentsline{toc}{section}{\appendixname\thesection ##1}}
}
\makeatother
\begin{document}
\tableofcontents
\section{Название 1}

В приложении~\ref{pril:bd} приведен скрипт БД.\
В приложении~\ref{pril:pr} приведен исходный код программы.
\subsection{Название 1.1}
\section{Название 2}
\appendix
\section{Скрипт базы данных, хранящей эксплуатационные параметры скважин}
\label{pril:bd}
\section{Текст программы <<Моделирования однофазных потоков в системе газоносный пласт - блок входных ниток>>}
\label{pril:pr}
\end{document} 

\appendixname добавляется только в стилях типа book, когда вы даете команду \chapter после \appendix. В стиле article section не предваряется никаким @chapapp, поэтому, если вы хотите писать «Приложение» перед его номером, переопределяйте section.

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

Спасибо. Можно еще два вопроса:
1. Как переопределить \appendixname.
В нашем примере \renewcommand несрабатывает.
2. В названии приложения между строками расстояние меньше, чем в
строках многострочного названия section. Такое ощущение, что в
названии приложения одинарный интервал, а в названии секции
полуторный.
Огромное спасибо.

\makeatletter
\renewcommand\appendixname{ПРИЛОЖЕНИЕ}
\gdef\appendix{\par
\setcounter{section}{0}%
\setcounter{subsection}{0}%
%\def\@chapapp{\appendixname}%
\def\thesection{\@Asbuk\c@section}
\def\section##1{\refstepcounter{section}%\vspace{3em}
\goodbreak\noindent{\Large\bf\appendixname\ \thesection\ ##1}%
\nobreak\vspace{1em}\nobreak\noindent%
\addcontentsline{toc}{section}{\appendixname\ \thesection\ ##1}}}
\makeatother

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

1. Делайте это после \begin{document}, тогда сработает

2. Лень мне ковыряться, посмотрите, какие интервалы в section в /usr/share/texmf/tex/latex/extsizes/extarticle.cls, и выставьте такие же в переопределении.

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

По пункту 2 все понятно. Вам спасибо.
Но прикол в том, я сам только заметил, что мою первоначальную проблему мы не решили.
ПРИЛОЖЕНИЕ А Название
^^^
ПРИЛОЖЕНИЕ Б Название
^^^
Тут все не на одной линии получается!

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

Тут все не на одной линии получается!

В оглавлении или в тексте? Если в оглавлении, покажите, что у вас в toc-файле; если в тексте, попробуйте добавить \par перед \goodbreak.

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

А... Попробуйте так:

...
\newlength\applngth
\newsavebox\appwd
\sbox{\appwd}{\appendixname ААА}
\setlength{\applngth}{\wd\appwd}
...
\goodbreak\noindent{\Large\bf\hbox to\applngth{\appendixname\ \thesection\hss} ##1}
...

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

Вот так вот вроде нормально получается. Я \hbox использовал и \hss.
Осталось два нерешенных вопроса:
1. Расстояния между строк в заголовкая-приложениях.
Я смотрел extarticle.cls еще до обращения к Вам за помощью.
Нифига там нонятно. Я честно говоря непонимаю что Вы переопределяете.
Там \addcontentsline{toc} есть только в \def\@part[#1]#2!?
Для section там этого нет.

2. У нашей команды \section не работает второй необязательный
параметр - \section[Название для TOC]{Название}.

\documentclass[a4paper,14pt,russian]{extarticle}
\usepackage[T2A]{fontenc}
\usepackage{pscyr}
\usepackage[cp1251]{inputenc}
\usepackage[russian]{babel}
\usepackage[a4paper,left=20mm,right=10mm,top=20mm,bottom=20mm,headsep=0mm,headheight=0mm]{geometry}
\setlength{\parindent}{1.25cm}
\renewcommand{\rmdefault}{ftm}
\renewcommand{\baselinestretch}{1.0}
\begin{document}
\tableofcontents
\section{Скрипт базы данных, хранящей эксплуатационные параметры скважин}

В приложении~\ref{pril:bd} приведен скрипт БД.\\
В приложении~\ref{pril:pr} приведен исходный код программы.

\section{Название 2}

\makeatletter
\renewcommand\appendixname{ПРИЛОЖЕНИЕ}
\gdef\appendix{\par
\setcounter{section}{0}%
\setcounter{subsection}{0}%
\def\thesection{\@Asbuk\c@section}
\def\section##1{\refstepcounter{section}
\goodbreak\noindent{\indent\Large\bf\hbox to 8.5em{\appendixname\
\thesection\hss}\hspace{0.8ex}##1}%
\nobreak\vspace{1em}\nobreak\noindent%

\addcontentsline{toc}{section}{\hbox to 8.5em{\appendixname\ \thesection\hss}\hspace{0.8ex}##1}}}
\makeatother

\appendix
\section{Скрипт базы данных АИС}
\label{pril:scriptDB_DW}

\section{Скрипт базы данных, хранящей эксплуатационные параметры скважин}
\label{pril:bd}

\section{Текст программы-клиента АИС}
\label{pril:pr_client}

\section{Текст программы <<Моделирования однофазных потоков в системе газоносный пласт - блок входных ниток>>}
\label{pril:pr}

\section{Свидетельства РОСПАТЕНТА и дипломы}
\label{pril:sv_dip}
\end{document}

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

Там \addcontentsline{toc} есть только в \def\@part[#1]#2!? Для section там этого нет.

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

У нашей команды \section не работает второй необязательный параметр - \section[Название для TOC]{Название}.

Правильно, т.к. я привел наипростейший пример. Для \section со звездочкой и необязательным параметром придется написать намного больше кода - почитайте, если хотите знать, как это делается, Кнута и исходник latex.ltx.

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

Вроде все получилось! Только убрал для \section в appendix
вариант с *.
Никак не получается сделать «Расстояния между строк в заголовкая-приложениях». Помогите. Я сам неразберусь.
Заранее спасибо.

\documentclass[a4paper,14pt,russian]{extarticle}
\usepackage[T2A]{fontenc}
\usepackage{pscyr}
\usepackage[cp1251]{inputenc}
\usepackage[russian]{babel}
\usepackage[a4paper,left=20mm,right=10mm,top=20mm,bottom=20mm,headsep=0mm,headheight=0mm]{geometry}
\setlength{\parindent}{1.25cm}
\renewcommand{\rmdefault}{ftm}
\renewcommand{\baselinestretch}{1.0}
\begin{document}
\tableofcontents
\section{Скрипт базы данных, хранящей эксплуатационные параметры скважин}

В приложении~\ref{pril:bd} приведен скрипт БД.\\
В приложении~\ref{pril:pr} приведен исходный код программы.

\section{Название 2}

\makeatletter
\renewcommand\appendixname{ПРИЛОЖЕНИЕ}
\gdef\appendix{\par
\setcounter{section}{0}%
\setcounter{subsection}{0}%
\def\thesection{\@Asbuk\c@section}}
%
\def\section{\@ifnextchar[%]
\numberedsectionwithtwoarguments\numberedsectionwithoneargument}
\def\numberedsectionwithoneargument#1{\numberedsectionwithtwoarguments[#1]{#1}}
\def\unnumberedsectionwithoneargument#1{\unnumberedsectionwithtwoarguments[#1]{#1}}
\def\numberedsectionwithtwoarguments[#1]#2{%
\refstepcounter{section}
\goodbreak\noindent{\indent\Large\bf\hbox to 8.5em{\appendixname\
\thesection\hss}\hspace{0.8ex}#2}%
\nobreak\vspace{1em}\nobreak\noindent%
\addcontentsline{toc}{section}{\hbox to 8.5em{\appendixname\ \thesection\hss}\hspace{0.8ex}#1}
}
\makeatother

\appendix
\section{Скрипт базы данных АИС}
\label{pril:scriptDB_DW}

\section{Скрипт базы данных, хранящей эксплуатационные параметры скважин}
\label{pril:bd}

\section{Текст программы-клиента АИС}
\label{pril:pr_client}

\section[Текст программы <<Моделирования однофазных потоков в системе газоносный пласт - блок входных ниток>>]{Текст программы\\<<Моделирования однофазных потоков в системе\\газоносный пласт - блок входных ниток>>}
\label{pril:pr}

\section{Свидетельства РОСПАТЕНТА и дипломы}
\label{pril:sv_dip}
\end{document}

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

Ну, не знаю. По мне, так вполне сносно. Кстати, не надо было убирать vspace перед заголовком: во всех \section он есть, а в приложении без него заголовки смотрятся коряво. Далее, не делайте \indent перед словом «приложение», если все остальные разделы идут без отступа. Слово «ПРИЛОЖЕНИЕ» смотрится коряво: может, сделаете его не заглавными буквами? Лучше уж жирным выделите.

\documentclass[a4paper,14pt,russian]{extarticle}
\usepackage[T2A]{fontenc}
\usepackage[koi8-r]{inputenc}
\usepackage[russian]{babel}
\usepackage[a4paper,left=20mm,right=10mm,top=20mm,bottom=20mm,headsep=0mm,headheight=0mm]{geometry}
\setlength{\parindent}{1.25cm}
\renewcommand{\rmdefault}{ftm}
\renewcommand{\baselinestretch}{1.0}
\begin{document}
\tableofcontents
\section{Скрипт базы данных, хранящей эксплуатационные параметры скважин}

В приложении~\ref{pril:bd} приведен скрипт БД.\
В приложении~\ref{pril:pr} приведен исходный код программы.

\section{Название 2}

\makeatletter
\renewcommand\appendixname{ПРИЛОЖЕНИЕ}
\gdef\appendix{\par
\setcounter{section}{0}%
\setcounter{subsection}{0}%
\def\thesection{\@Asbuk\c@section}}
%
\def\section{\@ifnextchar[%]
\numberedsectionwithtwoarguments\numberedsectionwithoneargument}
\def\numberedsectionwithoneargument#1{\numberedsectionwithtwoarguments[#1]{#1}}
\def\unnumberedsectionwithoneargument#1{\unnumberedsectionwithtwoarguments[#1]{#1}}
\def\numberedsectionwithtwoarguments[#1]#2{%
\refstepcounter{section}
\vspace{1em}\goodbreak\noindent{\Large\bf\hbox to 9em{\appendixname\ \thesection\hss}\hspace{0.8ex}#2}%
\nobreak\vspace{1em}\nobreak\noindent%
\addcontentsline{toc}{section}{\appendixname\ \thesection\ #1}
}
\makeatother

\appendix
\section{Скрипт базы данных АИС}
\label{pril:scriptDB_DW}

\section{Скрипт базы данных, хранящей эксплуатационные параметры скважин}
\label{pril:bd}

\section{Текст программы-клиента АИС}
\label{pril:pr_client}

\section[Текст программы <<Моделирования однофазных потоков в системе газоносный пласт - блок входных ниток>>]{Текст программы\\
<<Моделирования однофазных потоков в системе\\
газоносный пласт - блок входных ниток>>}
\label{pril:pr}

\section{Свидетельства РОСПАТЕНТА и дипломы}
\label{pril:sv_dip}
\end{document} 
Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Да я просто тренировался. У меня есть другой документ, а в нем другое оформление. Там в тексте секции начинаются с абзаца, а главы и приложения написаны большими буквами. Теперь стало более понятно как тюнинговать оформление. Я пытаюсь создать что-то типа собственного шаблона для подготовки книг, пособий и т.д. У меня к Вам вопрос: в каких целях Вы используете LaTex?

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

в каких целях Вы используете LaTex?

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

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

Походу мы с Вами коллеги. Мне латех нужен для аналогичных целей. Планирую разбираться с возможностью подготовки презентаций в латехе. Гранты у нас так же в ворде делают, но я слава богу оформлением не занимаюсь. Диссертацию я делал в обычном MS Word 2003. Если Вы не против, то я бы хотел Вам задать несколько вопросов по поводу перспективы сотрудничества в сфере науки и образования. Напишите мне на email: Youra_Polishuk@bk.ru

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

Отправил. А вы лучше в явном виде электронный адрес не пишите: от спама замучаетесь избавляться.

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