Автор Гілка: Класи LaTeX для дисертації та автореферату  (Прочитано 207003 раз)

Відсутній yurchor

  • Видавець
  • *******
  • дописів: 3640
  • Карма: +3/-0
  • Grateful for our Iron Lung
    • Вікі користувачів KDE
Шановні добродії!

Виникла ось яка проблемка з Vakaref:

у мене кодування UTF8, відповідно файли класів  я перекодував у UTF8,
так от після того, як я це зробив, не можу скомпілювати титульну сторінку автореферату.

Що робити?  
Перевірте, чи у заголовку вашого файла написано
Цитата
\usepackage[utf8x]{inputenc}
Try to reach you before winter comes
Always a place for you in my heart
You're not alone
All used up
I'd give anything to talk to you

Відсутній buenasdiaz

  • Новачок
  • *
  • дописів: 14
  • Карма: +0/-0
Ось це у заголовку

\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english,russian,ukrainian]{babel}

Якщо поміняти на  

\usepackage[T2A]{fontenc}
\usepackage[utf8x]{inputenc}
\usepackage[english,russian,ukrainian]{babel}

все одно не працює.
« Змінено: 2011-02-01 19:39:39 від buenasdiaz »

Відсутній yurchor

  • Видавець
  • *******
  • дописів: 3640
  • Карма: +3/-0
  • Grateful for our Iron Lung
    • Вікі користувачів KDE
Файл назв спеціальностей перекодували?
Try to reach you before winter comes
Always a place for you in my heart
You're not alone
All used up
I'd give anything to talk to you

Відсутній buenasdiaz

  • Новачок
  • *
  • дописів: 14
  • Карма: +0/-0
І назви спеціальностей (speciality.20070212N70) і відмінювання слів (casus.sty) перекодував.

Видає, власне, таке:
! Missing number, treated as zero.
<to be read again>
                   �
l.155 \council{Д~26.206.01}
                            
?

А якщо закоментовую \council{Д~26.206.01}, то отримую таке:
! Undefined control sequence.
\GenericError  ...                                
                                                    #4  \errhelp \@err@     ...
l.171 \maketitle
                
?

З такою командою \setcounter{errorcontextlines}{999} у преамбулі програма видає:
! Missing number, treated as zero.
<to be read again>
                   �
\council #1->\catcode `м
                         =11 \def \@council@code {#1}\@ifnextchar [\o@counci...
l.155 \council{Д~26.206.01}
                            
?

Мені здається, що проблема у рядку № 301 з файлу vakaref.cls, який перекодовується так:
\newcommand{\council}[1]{\catcode`м=11А саме у букві "м" після апострофа. Тому питання таке:
що там є у оригіналі?
« Змінено: 2011-02-01 20:47:21 від buenasdiaz »

Відсутній yurchor

  • Видавець
  • *******
  • дописів: 3640
  • Карма: +3/-0
  • Grateful for our Iron Lung
    • Вікі користувачів KDE
Цитата
\newcommand{\council}[1]{\catcode`м=11
Заміна на
Цитата
\newcommand{\council}[1]{\catcode 172=11
не допомагає. Якась вада, пов’язана з Unicode. XeLaTex не допомагає.
Try to reach you before winter comes
Always a place for you in my heart
You're not alone
All used up
I'd give anything to talk to you

Відсутній buenasdiaz

  • Новачок
  • *
  • дописів: 14
  • Карма: +0/-0
А навіщо ця команда \catcode`м=11 в даному конкретному випадку?

Відсутній yurchor

  • Видавець
  • *******
  • дописів: 3640
  • Карма: +3/-0
  • Grateful for our Iron Lung
    • Вікі користувачів KDE
А навіщо ця команда \catcode`м=11 в даному конкретному випадку?
Треба автора спитати, вона змушує TeX вважати «м» (???) звичайною літерою ASCII.
Try to reach you before winter comes
Always a place for you in my heart
You're not alone
All used up
I'd give anything to talk to you

Відсутній buenasdiaz

  • Новачок
  • *
  • дописів: 14
  • Карма: +0/-0
Що ж, запитаю тоді у автора.

Відсутній yurchor

  • Видавець
  • *******
  • дописів: 3640
  • Карма: +3/-0
  • Grateful for our Iron Lung
    • Вікі користувачів KDE
Що ж, запитаю тоді у автора.
Якщо ви не у курсі, автор — модератор цієї дошки. Ймовірно, скоро він сам відповість на ваше питання тут.  ;)
Try to reach you before winter comes
Always a place for you in my heart
You're not alone
All used up
I'd give anything to talk to you

Відсутній buenasdiaz

  • Новачок
  • *
  • дописів: 14
  • Карма: +0/-0
Дякую.

Відсутній Олександр Барановський

  • Модератор дошки
  • Графоман
  • *****
  • дописів: 366
  • Карма: +0/-0
А навіщо ця команда \catcode`м=11 в даному конкретному випадку?
Треба автора спитати, вона змушує TeX вважати «м» (???) звичайною літерою ASCII.
Щоб мати можливість працювати з різними кодуваннями, LaTeX кириличним буквам присвоює категорію 13 (активний символ). Потім ці активні символи замінюються на команди \cyrm, \CYRA тощо. А ці команди мають різні означення залежно від кодування документа.

Мені треба було, щоб команда \council з адреси установи, де створено раду, витягувала назву міста (це треба писати на обкладинці автореферату). Тобто якщо маємо
\council{Д~26.206.01}
  [Інститут математики, Національна академія наук України]
  {Інститут математики НАН України}
  {01601 м.~Київ, вул.~Терещенківська, 3}
то \council читає свій третій обов'язковий аргумент, знаходить там «м.~» і вважає, що далі йде назва міста (до коми). Тому я присвоюю кириличній букві «м» категорію 11 (буква):
\catcode`м=11Я думав, що це треба робити, щоб її там виловити і щось з нею робити. Але насправді мене цікавить не так конкретна буква, як щось із крапкою, тобто третій обов'язковий аргумент повинен мати таку структуру:
<щось>.<~ або нічого><місто>,<ще щось>
З такою командою \setcounter{errorcontextlines}{999} у преамбулі програма видає:
! Missing number, treated as zero.
<to be read again>
                   �
\council #1->\catcode `м
                         =11 \def \@council@code {#1}\@ifnextchar [\o@counci...
l.155 \council{Д~26.206.01}
                            
?
Напевно, це треба розуміти так. Буква «м» в унікоді кодується більш ніж одним байтом. Команда \catcode читає перший байт, а далі очікує код категорії: 11, 13 тощо. А насправді отримує другий байт букви «м». Тому й матюкається. Чи правильно я розумію, що такої проблеми не виникало, поки всі файли були в кодуванні cp1251 (koi8-u, тощо)? Це повідомлення з'явилося тільки після перекодування в унікод? Якщо так, то це підтверджує гіпотезу.

Можна спробувати обійтися без зміни категорії букви «м». Додайте в преамбулу свого документа
\makeatletter
\renewcommand{\council}[1]{%
  \def\@council@code{#1}%
  \@ifnextchar[\o@council\@council}
\makeatother
Я лінуюся зараз перекодовувати всі свої файли в унікод. Я тільки помітив, що навіть без зміни категорії назва міста коректно витягується з третього аргумента (у мене приклад автореферату і файли класів у кодуванні cp1251). Спробуйте зі своїм документом.

Можливо, я планував ще щось робити з цієї буквою «м» (наприклад, з чимось порівнювати) або просто помилково вважав, що треба змінювати категорію в цій ситуації. Можливо, таке переозначення \council зламає щось інше. Якщо помітите, будь ласка, повідомте.
У своїх заявках дехто з науковців описував, якими корисними будуть їхні заплановані дослідження для національних інтересів, тоді як насправді ними рухала щира наукова допитливість і бажання написати пару статей.
Станіслав М. Улям, «Пригоди математика»

Відсутній buenasdiaz

  • Новачок
  • *
  • дописів: 14
  • Карма: +0/-0
Так, дійсно, такої проблеми не було доки всі файли були у cp1251.
Правильно я зрозумів, що крім вставки нового коду
\makeatletter
\renewcommand{\council}[1]{%
  \def\@council@code{#1}%
  \@ifnextchar[\o@council\@council}\makeatother
я ще закоментовую "\catcode'м=11"?
« Змінено: 2011-02-02 18:36:28 від buenasdiaz »

Відсутній Олександр Барановський

  • Модератор дошки
  • Графоман
  • *****
  • дописів: 366
  • Карма: +0/-0
Правильно я зрозумів, що крім вставки нового коду
\makeatletter
\renewcommand{\council}[1]{%
  \def\@council@code{#1}%
  \@ifnextchar[\o@council\@council}\makeatother
я ще закоментовую "\catcode'м=11"?
Ні, новий код замінює старий. Цього достатньо. Немає потреби редагувати vakaref.cls.

Звичайно, при бажанні Ви можете редагувати безпосередньо відповідний .cls- або .dtx-файл. Але тоді потурбуйтеся, будь ласка, про те, щоб умови ліцензії LPPL було виконано.
У своїх заявках дехто з науковців описував, якими корисними будуть їхні заплановані дослідження для національних інтересів, тоді як насправді ними рухала щира наукова допитливість і бажання написати пару статей.
Станіслав М. Улям, «Пригоди математика»

Відсутній buenasdiaz

  • Новачок
  • *
  • дописів: 14
  • Карма: +0/-0
Спробував з новим кодом, але виходить ось що:
[1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}]
! Undefined control sequence.
\GenericError  ...                                
                                                    #4  \errhelp \@err@     ...
l.175 \maketitle
                
?

Відсутній Олександр Барановський

  • Модератор дошки
  • Графоман
  • *****
  • дописів: 366
  • Карма: +0/-0
Спробував з новим кодом, але виходить ось що:
[1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}]
! Undefined control sequence.
\GenericError  ...                                
                                                    #4  \errhelp \@err@     ...
l.175 \maketitle
                
?
Інше джерело проблем — це пакет casus.sty. Алгоритм відмінювання не працює, якщо текст в унікоді. Спробуйте додати в преамбулу свого документа такий код:
\makeatletter
\AtBeginDocument{%
  \renewcommand{\transformsentence}[2]{#2\ignorespaces}%
}
\makeatother
Це забороняє команді \transformsentence відмінювати свій аргумент. Після цього у мене повідомлення про помилки зникають.

Але тепер виникає інша проблема — назви установ не відмінюються. Треба або відразу в документі задавати назви установ у потрібному відмінку, або переозначити команду \@makereverse (у певних місцях просто непотрібні команди замінити на відповідний текст).

Інший спосіб розв'язання проблеми — не використовувати UTF-8. Якщо Вам не підходить cp1251, перекодуйте свої документи, а також файли класів і допоміжні файли, в koi8-u, наприклад.

Можливо, варто взагалі відмовитися від відмінювання назв установ? Варіантів не так багато, можна додати ще факультативних аргументів для назв в інших відмінках. Що шановне товариство може сказати з цього приводу?
У своїх заявках дехто з науковців описував, якими корисними будуть їхні заплановані дослідження для національних інтересів, тоді як насправді ними рухала щира наукова допитливість і бажання написати пару статей.
Станіслав М. Улям, «Пригоди математика»