LINUX.ORG.RU

LaTex Приложения и ссылки на них


0

0

Я создал свой тип section - приложение:

\def\sectionpril{}
\let\sectionpril=\section%чтобы потом считать количество секций и приложений
%-------определяем секции приложения--------%
\newcommand\pril[1]{
\addtocounter{totalpril}{1}
\phantomsection
\addcontentsline{toc}{section}{ПРИЛОЖЕНИЕ~\Asbuk{totalpril}~#1}
\sectionpril*{ПРИЛОЖЕНИЕ~\Asbuk{totalpril}~#1}}

Вроде все работает нормально, но хочется, чтобы можно было делать ссылку на номер (точнее БУКВУ)
приложения.
Например:

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

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

В этом случае ссылка происходит на стандартные счетчики.
Получается: В приложении 2.3 с. 61
Нужно: В приложении А с. 61

Как грамотно сделать ссылку? Возможно можно создать модификацию
команды \ref?
Заранее спасибо.



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

Ответ на: комментарий от anonymous

Не получается. Ссылка ставится на предыдущую секцию 2.3.
Вот так вот все нормально, но нужно дописать слово
«ПРИЛОЖЕНИЕ». У меня никак не получается.

appendix
\renewcommand{\thesection}{\Asbuk{section}}
\newpage
\section{Текст программы «Моделирования однофазных потоков в системе газоносный пласт – блок входных ниток»\label{pril:pr_mod}}

В приложении А c. 65 приведен исходный код данного программного средства.
....

__- тут и оглавлении нужно дописать слово «ПРИЛОЖЕНИЕ».
А Текст программы «Моделирования однофазных потоков в
системе газоносный пласт – блок входных ниток»
...

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

Ещё есть такой вариант:

\makeatletter
\def\redeflsection{\def\l@section{\@dottedtocline{1}{0em}{8.8em}}}
\renewcommand\appendix{\par
\setcounter{section}{0}%
\setcounter{subsection}{0}%
\def\appendixname{ПРИЛОЖЕНИЕ}
\def\@chapapp{\appendixname}%
\addtocontents{toc}{\protect\redeflsection}
\def\thesection{\appendixname~\@Asbuk\c@section}}
\makeatother

Работает замечательно, но есть две проблемы:
1. При ссылки на приложение в текст вставляется «ПРИЛОЖЕНИЕ А».
Ну это нормально.
2. Не работает ссылка при нажатии на название приложения в
оглавлении!!!! Так неподходит. Как это можно исправить?

Youra_P
() автор топика

Может быть, вам стоит воспользоваться имеющимся в латехе функционалом, а не изобретать велосипеды?

Команда \appendix меняет нумерацию разделов на буквы. Если же хотите пользоваться своим определением, то не забывайте указать \renewcommand{\thetotalpril}{\Asbuk{totalpril}}, тогда ссылки будут отображаться верно.

Eddy_Em ☆☆☆☆☆
()

Загляните в исходники eskdsect.sty из пакета eskdx.

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

Я совсем запутался.
Вот пример. Если Вам нетрудно исправьте, что не так.

\documentclass[a4paper,14pt]{extarticle}
\usepackage[pdftex, unicode=true, plainpages=true, pdfpagelabels=true]{hyperref}
\usepackage[T2A]{fontenc}
\usepackage{pscyr}
\usepackage[cp1251]{inputenc}
\usepackage[english,russian]{babel}
\makeatletter
\newcounter{totalpril}
\newcommand\pril[1]{
\addtocounter{totalpril}{1}
\addcontentsline{toc}{section}{ПРИЛОЖЕНИЕ~\Asbuk{totalpril}~#1}
\section*{ПРИЛОЖЕНИЕ~\Asbuk{totalpril}~#1}}
\makeatother
\begin{document}
\tableofcontents
\newpage
\section{Секция 1}
Текст секции 1.
Ссылка на приложение~\ref{pr}.
\section{Секция 2}
Текст секции 2.
\appendix
\renewcommand{\thetotalpril}{\Asbuk{totalpril}}
\newpage
\pril{Приложение(а)}
\newpage
\pril{Приложение(б)}
\label{pr}
\end{document}

Youra_P
() автор топика
Ответ на: комментарий от Youra_P
\documentclass[a4paper,14pt]{extarticle}
\usepackage[pdftex, unicode=true, plainpages=true, pdfpagelabels=true]{hyperref}
\usepackage[T2A]{fontenc}
\usepackage[koi8-r]{inputenc}
\usepackage[russian]{babel}
\begin{document}
\tableofcontents
\newpage
\section{Секция 1}
Текст секции 1.
Ссылка на приложение~\ref{pr}.
\section{Секция 2}
Текст секции 2.
\appendix
\renewcommand{\thesection}{\Asbuk{section}}
\newpage
\section{Приложение(а)}
\newpage
\section{Приложение(б)}
\label{pr}
\end{document} 
Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

А Приложение (а)
^^^^^^^^^^^^^^Это из оглавления!!!!!!!!!!!!!!!!!!
Такой результат я давно получил.
Но задача была дописать слово «ПРИЛОЖЕНИЕ А Приложение (а)».
Я Вам отвечаю, что в таком оформлении в моем университете
у ВАС ничего не примут и будете переделывать в Word.
Вопрос остается открытым!

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

в таком оформлении в моем университете у ВАС ничего не примут и будете переделывать в Word.

Судя по всему, ЕСКД/ГОСТ в вашем «университете» никому не известны.

Пожалуйста, мне не жалко:

\documentclass[a4paper,14pt,twoside]{extarticle}
\usepackage[koi8-r]{inputenc}
\usepackage[russian]{babel}
\textwidth=17.5cm
\oddsidemargin=-.3cm
\evensidemargin=-1.2cm
\topmargin=-1cm
\textheight=24cm

\makeatletter
\newcounter{sect}
\renewcommand{\thesect}{\Asbuk{sect}.\,}
\newcommand{\sect}[1]{\refstepcounter{sect}\par\vspace{1.5cm plus 1cm minus .5cm}
	{\large\bfПРИЛОЖЕНИЕ~\thesect #1}%
	\addcontentsline{toc}{section}{ПРИЛОЖЕНИЕ~\thesect #1}\markboth{\thesect #1}{\thesect #1}%
	\nopagebreak\bigskip\par}
\makeatother
\begin{document}
\tableofcontents
\section{первый раздел}
ссылка на приложение~\ref{pril}

текст\newpage
\section{второй раздел}
текст\newpage
\sect{приложение первое}
текст\newpage
\sect{приложение второе}\label{pril}
текст\newpage
\end{document}

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

Я тоже вариант один нашел, но он совсем сложный.
Вам респект. Пример работает замечательно.
Есть один вопрос.
Зачем это нужно:

\markboth{\thesect #1}{\thesect #1}

Без этого тоже работает.

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

Это для того, чтобы в колонтитулы поступила нужная информация. Если у вас нет колонтитулов, эту строку можно удалить.

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

Спасибо.
Вот что у меня получилось.

\newcounter{sect}
\renewcommand{\thesect}{\Asbuk{sect}}
\newcommand{\sectionp}[1]{
\stepcounter{totalpril}
\refstepcounter{sect}\par\vspace{1.5cm plus 1cm minus .5cm} {\indent\large\bfПРИЛОЖЕНИЕ~\thesect~#1}%
\addcontentsline{toc}{section}{ПРИЛОЖЕНИЕ~\thesect~#1} \markboth{\thesect #1}{\thesect #1}%
\nopagebreak\bigskip\par}

Есть еще одна загвоздка.
Нужно отключить переносы слов в заголовке в тексте документа.
Пытался так несрабатывает.
\indent\large\bf\rightskip\@flushglue

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

Можно сделать, так:
{\indent\large\bf\nohyphens{ПРИЛОЖЕНИЕ~\thesect~#1}}%

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