LaTeX: Как изменить один из номеров разделов на пользовательские буквы? - PullRequest
4 голосов
/ 15 мая 2010

У меня есть что-то вроде этого:

Section 1
...
Section 2
...
Section 3
Subsection 3.1
...
Section 4
...

И мне хотелось бы что-то вроде этого:

Section 1
...
Section 2
...
Section A
Subsection A.1
...
Section 4
...

Другими словами - изменить один из номеров разделов на другой 3 == A Мне это нужно для моей диссертации, написанной в классе статьи, и когда я пытался добавить приложения, пакет hyperref сломался, и «ссылки» на раздел 1 направлены на приложение A

редактирование: Я сделал ошибку при описании проблемы, я имел в виду, что оглавление не работает, потому что LaTeX генерирует код (файл * .toc):

\contentsline {section}{\numberline {1}}{1}{section.1}
\contentsline {section}{\numberline {2}}{1}{section.2}
\contentsline {section}{\numberline {A}}{1}{section.1}

Ответы [ 5 ]

6 голосов
/ 15 мая 2010

Я создал следующую конструкцию и теперь обновил ее :

Описание

Новый счетчик для секций, который будет использоваться только в блоке \begin{alphasection} ... \end{alphasection}. Не вкладывайте блок, иначе оригинальный номер раздела будет утерян; в этом случае выдается сообщение об ошибке . Каждый блок начнет пересчет с «А». Исходный подсчет разделов продолжается, поскольку это требуется для HyperRef.

Введите следующий код в Преамбулу :

\newcounter{alphasect}
\def\alphainsection{0}

\let\oldsection=\section
\def\section{%
  \ifnum\alphainsection=1%
    \addtocounter{alphasect}{1}
  \fi%
\oldsection}%

\renewcommand\thesection{%
  \ifnum\alphainsection=1% 
    \Alph{alphasect}
  \else%
    \arabic{section}
  \fi%
}%

\newenvironment{alphasection}{%
  \ifnum\alphainsection=1%
    \errhelp={Let other blocks end at the beginning of the next block.}
    \errmessage{Nested Alpha section not allowed}
  \fi%
  \setcounter{alphasect}{0}
  \def\alphainsection{1}
}{%
  \setcounter{alphasect}{0}
  \def\alphainsection{0}
}%

В документе :

\section{First test}
First content
\section{Second test}
Second content
\begin{alphasection}
\section{Third test}
\subsection{Subsection test}
Content test
\section{Test Other section}
\end{alphasection}
\section{Fourth test}
Last content

Производит

1 First test
   First content

2 Second test
   Second content

A Third test
A.1 Subsection test
   Content test

B Test Other section

5 Fourth test
   Last content

Протестировано, работает с HyperRef.

2 голосов
/ 16 апреля 2012

Сандре, У меня была проблема с интервалом при использовании кода Pindatjuh выше. Это влияло на все списки. Я исправил это добавлением «%» в конце пары строк в 3-м блоке его кода. Теперь у меня нет расстояния больше.

От:

\renewcommand\thesection{%
 \ifnum\alphainsection=1% 
   \Alph{alphasect}
 \else%
  \arabic{section}
 \fi%
}%

Кому:

\renewcommand\thesection{%
 \ifnum\alphainsection=1% 
   \Alph{alphasect}%
 \else
   \arabic{section}%
 \fi%
}%
1 голос
/ 29 августа 2012

Проблема, с которой столкнулся Карпик (проблема с hyperref), может быть легко решена путем добавления опции [naturalnames] в пакет hyperref: \usepackage[naturalnames]{hyperref}

0 голосов
/ 15 мая 2010

Хорошо, я решаю это с помощью кода @Pindatjuh, решение довольно уродливо ...

 \newcounter{alphasect}

 \renewcommand\thesection{%
 \ifnum\value{alphasect}=1%
A%%
 \else
\ifnum\value{alphasect}=2%
B%%
\else
\ifnum\value{alphasect}=3%
C%%
\else
\ifnum\value{alphasect}=4%
D%%
\else
 \arabic{section}%%
 \fi\fi\fi\fi}%

 \newenvironment{asection}{%
 \setcounter{alphasect}{1}%%
 }{%
 \setcounter{alphasect}{0}%%
 }%

 \newenvironment{bsection}{%
 \setcounter{alphasect}{2}%%
 }{%
 \setcounter{alphasect}{0}%%
 }%

a, чем в документе:

\section{First test}
First content
\section{Second test}
Second content
\begin{asection}
\section{Third test}
\subsection{Subsection test}
Content test
\end{asection}
\begin{bsection}
\section{Test Other section}
\end{bsection}
\section{Fourth test}
Last content

теперь список содержимого работает и отображается как надо

0 голосов
/ 15 мая 2010

Посмотрите на пакет titlesec .

...