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

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

  • Модератор дошки
  • Графоман
  • *****
  • дописів: 359
  • Карма: +0/-0
Робитиму доповідь про vakthesis на конференції TeX Users Group цього року. Усіх запрошую.

Time: Sun, 24 Jul – 10:45 AM (UTC+3)
Title: LaTeX classes for doctoral theses in Ukraine: Interesting tips and painful problems

Конференція відкривається завтра, 22 липня, о 18:00 PM (UTC+3). А сьогодні передконференційний день з воркшопами для початківців. Зокрема, о 19:00 починається LaTeX workshop, in English.

Повна програма конференції (час доповідей вказано в часовому поясі відвідувача):
https://tug.org/tug2022/program.html
Також на цій сторінці лінк на Zoom і на YouTube.
У своїх заявках дехто з науковців описував, якими корисними будуть їхні заплановані дослідження для національних інтересів, тоді як насправді ними рухала щира наукова допитливість і бажання написати пару статей.
Станіслав М. Улям, «Пригоди математика»

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

  • Модератор дошки
  • Графоман
  • *****
  • дописів: 359
  • Карма: +0/-0
Робитиму завтра доповідь про vakthesis на конференції «Математика та інформаційні технології» в Чернівцях.

Час: 28 вересня, о 15:15
Назва: Використання LaTeX для підготовки дисертацій в Україні

Конференція відбувається одночасно очно і дистанційно. Повна програма конференції (з вказанням точної адреси і гіперпосилань для приєднання до відеоконференції) доступна на сайті:
https://fmi55.chnu.edu.ua/
Також там є матеріали конференції.

Це не є спеціалізована TeXнічна конференція. І секція, де я виступатиму, досить широка: Математичне моделювання та інформаційні технології. Тому намагатимуся доповідати, як для широкої авдиторії, без заглиблення в технічні подробиці.

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

Відсутній Василь Черлінка

  • Новачок
  • *
  • дописів: 38
  • Карма: +0/-0
Гарна новина пане Олександре!

І хоча Ви виступатимете у моєму рідному університеті (де я вже, на жаль, не працюю), мені прикро, що не зможу бути присутнім. Зараз я за кордоном і не зможу доєднатися навіть онлайн.
Але Ви можете принагідно згадати, що були люди з ЧНУ (я точно, причому не математик а ГРУНТОЗНАВЕЦЬ), які активно використовували Ваші напрацювання при написанні та верстці докторської дисертації та автореферату, про що я згадував в їх тексті (а також мав групу із 5 студентів-агрономів, які писали курсові і дипломні в LaTeX).
- автореферат https://drive.google.com/file/d/1Dxu4yVOxFtWJIo97slPbLsPdZAT97gSA/view;
- дисертація https://drive.google.com/file/d/1TZubbaD3fNIk7FQUkSyZOdK_dPpozqpN/view
- презентація, яку робив у простому Beamer'і https://www.linkedin.com/in/vasyl-cherlinka-50a1a480/overlay/1605955980254/single-media-viewer/?profileId=ACoAABEdE9oBTUzBEhEcrkit5LP8rFWhlVq5Z5w

Гарного Вам виступу і зацікавлених слухачів!
« Змінено: 2023-09-27 18:12:26 від Василь Черлінка »

Відсутній basilio

  • Новачок
  • *
  • дописів: 32
  • Карма: +0/-0
Доброго здоров'я, творчих успіхів та скорішої перемоги шановному панству!

Через бурхливі життєві обставини випав із спілкування. Але продовжую потрохи свою наукову роботу і все ще цікавить питання відповідності наявного сімейства стилів gost2008 вимогам ДСТУ 2015? Наскільки я розумію, там повної відповідності нема. Або є? Підкажіть, хто в темі, чи слід про це турбуватись?

Відсутній basilio

  • Новачок
  • *
  • дописів: 32
  • Карма: +0/-0
Мої вітання славному панству.
Сам запитав, сам відповів. Але в надії, що це буде корисно й іншим та якщо можна постити лінки, знайшов стильовий пакет з ДСТУ 2015 для BibTeX-у.
https://codeberg.org/mdmisch/dstu

Ретельно не тестував, але начебто працює.

UPD: Найкращий результат отримав при використанні стилів uudstu* та процесору pybtex. І юнікод розуміє, і імена скорочує до ініціалів.
« Змінено: 2023-11-01 16:05:12 від basilio »

Відсутній Publius

  • Новачок
  • *
  • дописів: 3
  • Карма: +0/-0
Щирі вітання, пані та панове!

Вирішив поділитися своїм досвідом налаштування класу під деякі специфічні вимоги спецрад, які здебільшого ґрунтуються на їхній індивідуальній інтерпретації правил, аніж на офіційних документах, з якими можна ознайомитися, до прикладу, ось тут: https://zakon.rada.gov.ua/laws/show/z0155-17

Отже, часом виникає потреба невеличких змін титульної сторінки та тексту на початку анотації, й інколи відповідні ключі для цих змін ще не передбачені, тож необхідно вручну редагувати сам клас.

Наприклад, якщо ви захищаєте кандидатську, клас передбачає оформлення змішаної титульної сторінки, де зазначається шифр і назва спеціальності за старою й новою схемою і додається наприкінці назва наукового ступеня за новою класифікацією (доктора філософії).

Втім, не всім спецрадам таке до вподоби, й тому вони можуть вимагати додати також шифр і назву галузі науки й прибрати слова (доктора філософії) з титульної сторінки. А також поділити список праць здобувача на окремі розділи, відповідно до типу публікації.

Щоб розв'язати ці проблеми, треба змінити кілька рядків у класах mon2017dev.cls та mon2017dev-aref.cls:

Щоб додати шифр і назву галузі знань перед шифром й назвою спеціяльності, необхідно на початку рядка 565 (відповідає за текст титульної сторінки) та одразу після дужки у рядку 578 (текст анотації) вставити оці рядки:

    \csname @specialityedu@fieldcode@\languagename\endcsname\
    \cdash---
    \csname @specialityedu@fieldname@\languagename\endcsname,


І зробити те саме у клясі автореферату для рядків 629, 642 (після дужки).

Щоб прибрати слова (доктора філософії), необхідно закоментувати рядки 663 та 664 в класі дисертації та рядки 762, 763 в класі автореферату. Така нумерація дійсна, якщо ви вставили відповідний код трошки вище, тож ліпше трошки простежити для себе логічну структуру коду, перш ніж робити зміни.

Проблеми розділення списку публікацій автора я поки не торкався. Втім, спробую зробити це через третій bib-файл.

Іще цікаві вимоги спецрад, це внесення тез конференцій до списку публікацій навіть попри те, що це часто лише розширена програма конференції на її web-сторінці, а не окрема опублікована книжечка. А також необхідність двічі повторювати назву установи в заголовку, якщо підготовка й захист відбуваються у тій самій інституції.

Попри всі особливі вимоги спецрад, які важко одразу передбачити, я неймовірно вдячний пану Олександру за його працю, яка значно спростила оформлення дисертацій безлічі здобувачів!
« Змінено: 2023-12-14 05:52:22 від Publius »

Відсутній Publius

  • Новачок
  • *
  • дописів: 3
  • Карма: +0/-0
Продовжу ділитися досвідом написання дисертації разом із класом LaTeX. Отже, наступна вимога спецради, то розділення списку праць здобувача на окремі розділи із переліком публікацій у міжнародних рецензованих фахових виданнях, опубліковані електронні каталоги, матеріяли конференцій і тези конференцій. Тобто треба створити чотири розділи. До того ж нумерація мусить бути наскрізною.

Спершу я спробував просто створити чотири списки літератури та ще один основний. Проблемою такого підходу стало те, що кожен список починався із нової сторінки. Також хотілося, щоб заголовки виглядали як заголовки підрозділів, а не нових розділів. Але виявилося, що замість того, щоб наповнити третій і четвертий список літератури їхнім вмістом, при компілюванні там чомусь з'явилися копії першого й другого списків. А головна бібліографія взагалі зламалася.

Гадаю, що замість того, щоб викручувати BIBTEX для таких специфічних завдань, краще перебудувати клас під роботу з оточенням BIBLATEX, де робота з бібліографією надзвичайно гнучка і має підтримку окремих бібліографій, розділів у бібліографіях, власних стилів для кожного розділу й ключовими словами у цитуваннях, які дають змогу на льоту закинути будь-яку публікацію з BIB-стосика у будь-який обраний розділ бібліографії. Але я не знаю, наскільки просто чи складно пану Олександру буде реалізувати підтримку BIBLATEX у класі. Зрештою, BIBLATEX інакше працює зі стилями оформлення бібліографії, тому напевно буде несумісний зі стандартними стилями BST.

І ще коментар щодо посилань у тексті. Якщо поки відсутня підтримка BIBLATEX, було б непогано мати можливість користуватися пакетом NATBIB, який дає змогу замість посилань у форматі [1] використовувати формат (Author et al. 2015) з дужками або без. Позаяк під час читання оперувати прізвищами набагато більш природно, аніж безликими цифрами. Особливо, якщо ви порівнюєте результати між різними роботами. І це не впливає на швидкість пошуку автора у бібліографії, бо якщо використовувати сортування за абеткою, то перша літера прізвища автора і рік дають змогу дуже швидко їх знайти.

Перевірив, виявилося, що NATBIB добре працює з класом, якщо використовувати стиль BST Elsevier Harvard. Тому з іншими сумісними стилями також має працювати. Єдина вада таких стилів, це те, що всі вони зміщують відступ першого рядка посилання у бібліографії. І це не дуже гарно. Втім, можна виправити це вручну.

А поки функціональності BIBLATEX немає, поділюся реалізацією абсолютно ручного обходу вимоги роздільного авторського списку. Для цього треба скопіювати із BBL-стосика відформатовані під необхідний вам стиль список ваших публікацій, розділити його на відповідні групи й оформити їх як пронумеровані списки. Щоб вам не довелося марнувати час на тонкі налаштування, ось гарний спосіб зробити їх такими, щоб вони ідеально зливалися із бібліографією:

\begin{bibset}{Список публікацій здобувача за~темою~дисертації}
\bibliographystyle{spmpsci}
\bibliography{ms1}
\end{bibset}

\begingroup
\addtocontents{toc}{\protect\setcounter{tocdepth}{0}}
\setlength{\leftmargini}{20pt}

\section*{Електронні каталоги}
\begin{enumerate}[{[1]}]
\setcounter{enumi}{9}
\item {Author}, A.A., {Author}, A.A., et~al.: {Title} (2015)
\item {Author}, A.A., {Author}, A.A., et~al.: {Title} (2015)
\item {Author}, A.A., {Author}, A.A., et~al.: {Title} (2015)
\end{enumerate}

\section*{Матеріяли конференцій}
\begin{enumerate}[{[1]}]
\setcounter{enumi}{12}
\item {Author}, A.A., {Author}, A.A., et~al.: {Title} (2015)
\item {Author}, A.A., {Author}, A.A., et~al.: {Title} (2015)
\item {Author}, A.A., {Author}, A.A., et~al.: {Title} (2015)
\end{enumerate}

\addtocontents{toc}{\protect\setcounter{tocdepth}{3}}
\endgroup

\tableofcontents

Додатково внесено лише кілька опцій, які допомагають інтегрувати оцю приблуду з рештою тексту так, щоб не вплинути на зміст та загальну логіку роботи класу з літературою. Недоліком лишається неможливість зробити заголовок списку праць здобувача у стилі заголовка підрозділу. Звісно, можна і його замінити пронумерованим списком, але це може зламати механізм роботи класу.

Після копіювання відформатованої літератури з BBL-стосика, зайві BIBTEX елементи треба перекинути з авторського BIB-стосика в основний, щоб на них однаково можна було посилатися у тексті.

Шматок внесеного коду починається зі "шкарлупки", яка відкриває нову групу і в самісінькому кінці закриває її, щоб зміна відступу абзацу не вплинула на решту тексту в дисертації.

Друга "шкарлупка" регулює глибину розділів, які потрапляють у зміст, тому щоб приховати від змісту "підрозділи", з яких починається кожен нумерований список там наприкінці стоїть нулик, який пропускає у зміст тільки великі "розділи", а закінчується трійкою, щоб у змісті не було показано параграфи Вступу, які йдуть далі.

Третя "шкарлупка" змінює відступ абзацу до 20 пунктів, щоб форматування нумерованих списків збігалося із форматуванням авторського реального переліку публікацій.

Зірочка на початку кожного підрозділу необхідна для того, щоб не зіпсувати нумерацію розділів у змісті. Хоча, можливо, її відсутність ніяк не вплине на зміст. Опція нумерованого списку задає нумерацію у квадратних дужках. Також на початку кожного списку змінюється лічильник нумерації, щоб вона була наскрізною.

Всю цю конструкцію необхідно також скопіювати у додаток до дисертації між авторським списком літератури й інформацією про апробацію, але треба просто прибрати опцію квадратної нумерації, бо в додатку стандартна нумерація.

У авторефераті все те саме, але без рядків, які стосуються змісту, і замість section варто використати part.

Але, як виявилося, цього не достатньо, бо треба, щоб бібліографія підхоплювала нумерацію списків публікацій здобувача і в ній не повторювалися роботи здобувача. Тобто однаково доведеться робити єдину бібліографію з розділами.

Спробував зробити на BIBLATEX, але його рушій BIBER вимагає для роботи кодування UTF-8. Якщо перетворити документ на UTF-8 і означити те саме в INPUTENC, виникає якась дивна несумісність із класом. Напевно варто спробувати всі файли перекинути у формат UTF-8 (бо на Overleaf це спрацювало, див. далі). Для BIBLATEX також треба додатково переозначити section на part.

Змусив працювати BIBLATEX під CP1251 із використанням BIBTEX8 замість BIBER. Вдалося створити окремі списки літератури з наскрізною нумерацією, навіть із частковим сортуванням у довгих цитуваннях, але стиль бібліографії потребує ручних змін, щоб бути схожим на той же Springer MathPhys.

Щоб подивитися, як це працює, треба внести у BIB-стосик ключові слова для виокремлення своїх публікацій, на кшталт keywords={refereed}, прибрати рядочки з перейменуванням BBL-стосиків при компіляції, додати таку преамбулу та замінити поля BIBSET у тексті автореферату на такі:

\usepackage[backend=bibtex8,bibencoding=cp1251,style=ieee,citestyle=numeric,sorting=nyvt,sortcites=true,giveninits=true,minbibnames=5,defernumbers=true]{biblatex}  % Якщо документи в кодуванні CP1251.

\usepackage[backend=biber,style=ieee,citestyle=numeric,sorting=nyvt,sortcites=true,giveninits=true,minbibnames=5,defernumbers=true]{biblatex}  % Якщо документи в кодуванні UTF-8, на Overleaf, наприклад.
\addbibresource{ms1.bib}
\addbibresource{ms2.bib}

\setlength{\biblabelsep}{.5em} % Відступ між номерами й прізвищами у бібліографії
\DeclareNameAlias{sortname}{family-given} % Сортування за прізвищем
\DeclareLanguageMapping{ukrainian}{english} % Щоб уникнути заміни "et al." на "та ін." а також інших слів в англомовних джерелах
\DeclareSourcemap{\maps{\map{\step[fieldsource=language,fieldset=langid,origfieldval,final]\step[fieldset=language,null]}}} % Щоб не друкувалася мова бібліографічного пункту
\let\section\part % Заміна команди section на part у бібліографії

\printbibliography[keyword={refereed},title={Список публікацій автора у міжнародних рецензованих фахових виданнях}]
\printbibliography[keyword={catalogue},title={Електронні каталоги}]
\printbibliography[keyword={proceeding},title={Матеріяли конференцій}]
\printbibliography[keyword={abstract},title={Тези конференцій}]
\printbibliography[notkeyword={refereed},notkeyword={catalogue},notkeyword={proceeding},notkeyword={abstract},title={Список використаних джерел}]

Вивантажив проєкт в Overleaf, перед тим перетворивши автореферат на UTF-8 документ, і, на диво, все компілюється, рушій BIBER працює. Але! Проблема зі стилем лишається! Якщо розібратися зі стилем, то проблему списку літератури із розділами буде повністю розв'язано!

Словом, проблема частково лишається. Було б непогано адаптувати й відлагодити клас під BIBLATEX цілком. А самому BIBLATEX було б непогано накопичити різних готових стилів, або мати для цього зручний конструктор. Втім, стиль і зараз можна побіжно змінювати, як показано на прикладі часткових маніпуляцій вище, можна змінювати розташування прізвища, імені, інші нюанси оформлення, ось деякі опції опишу також тут:

\usepackage[
backend=biber,  % Рушій для маніпуляцій із бібліографією замість BIBTEX8
style=ieee,  % Стиль бібліографії IEEE
citestyle=numeric, % Заміна стилю цитат IEEE на стиль Numeric, який полягає в заміні [1],[2],[3] на [1,2,3]
sorting=nyvt, % Спосіб сортування за прізвищем, потім роком, потім томом, потім назвою
sortcites=true, % Увімкнення сортування цитат за зростанням в стилі [56,3,67,5] на [3,5,56,67]
giveninits=true, % Подання імені ініціялами
minbibnames=5, % Увімкнення показу мінімум п'яти авторів у бібліографії перед et al.
defernumbers=true % Увімкнення наскрізної нумерації між бібліографіями
]{biblatex}

Експерименти на Overleaf показали, що TeX-Live 2019-2021 правильно застосовують словозміну у конструкціях кшталту "фізико-математичні" в UTF-8, але не проставляють ініціяли в анотації в UTF-8, бо змінна з ініціялами не зчитується як дійсний символ UTF-8. Воно там бачить невідомо що з крапкою. Ох, трясця... Натомість у версіях 2022-2023 словозміна працює на другій сторінці автореферату у конструкції зі словом "відділ" в UTF-8, але не працює з "фізико-математичні" і з ініціялами. Не розумію, чому одне працює, а інше ні.

На локальному Linux-верстаку з TeX-Live 2019 компіляція UTF-8 документів взагалі не працює. Якщо використовувати CP2151 на TeX-Live 2019 та разом із BIBTEX8 під BIBLATEX, то BIBTEX8 ламає біліографії в авторефераті. Треба спробувати локальну версію TeX-Live 2023. Висновок тут напевно тільки один. Сучасні версії LaTeX потребують обов'язкової підтримки UTF-8 у документах і класах. Без цього не буде гнучких бібліографій на сучасних рушіях. Можна ще поекспериментувати з \include{multibib}, але майбутнього з BIBLATEX не уникнути.

Припускаю, що проблема зі словозмінами та ініціялами десь неподалік оцих рядків:

Extra \fi.
\set@degree@c ...ld@\languagename \endcsname }\fi
I'm ignoring this; it doesn't match any \if.

Extra \fi.
\\abstract ...ifKV@abstract@header \@abstract \fi
l.4532 ...an,chapter=Анотації,header=true]
I'm ignoring this; it doesn't match any \if.

LaTeX Error: Invalid UTF-8 byte sequence (�.).
l.4532 ...an,chapter=Анотації,header=true]

Також виявив ваду у нинішньому звичайному класі автореферату без надбудов. Він створює два списки літератури, але обидва починаються з одинички і цитати також починаються з одинички. Отже будуть випадки, коли [1] буде позначати і перший номер у списку автора, і перший номер в цитованих джерелах. Тобто посилання на різні статті матимуть один номер.

Ще треба розібратися з проблемою перенесення слів із діякритичними символами, апострофами, дефісами тощо. Бо слова кшталту фізико-математичних наук у попередньо скомпільованому зразку пана Олександра чомусь переносяться, а в моєму випадку ні. Гадаю, що рішення просте, але я поки не шукав прискіпливо, через це текст подекуди має негарний вигляд. Частково вирішив ручним означенням переносів. А в решті дуже сильно допоміг \usepackage{microtype}. Достатньо його під'єднати і все. Дивно, але чомусь зі збирачем PDFLATEX перенесення слів працює краще, аніж із LATEX.

Було б також чудово мати можливість додати факсимільні підписи опонентів і наукового керівника для автореферату.
« Змінено: 2023-12-20 15:35:56 від Publius »

Відсутній Publius

  • Новачок
  • *
  • дописів: 3
  • Карма: +0/-0
Зачеплю трошки специфіку роботи з довгими табличками.

З'явилася потреба зміни формату заголовка таблички, якщо вона продовжується на наступній сторінці. Для цього формат кшталту "Таблиця 1: Текст опису таблички" необхідно замінити на формат "Продовження таблиці 1" (відповідно до пункту 7.6.9, на який можуть посилатися спецради, оцього документа https://science.kname.edu.ua/images/dok/derzhstandart_3008_2015.pdf). Оскільки довгі таблички можуть траплятися доволі часто в дисертаціях, було б напевно непогано мати це переозначення у самому класі.

Саму довгу табличку можна будувати або у форматі longtable, або як дві окремі таблички із використанням рядочка ContinuedFloat у другій табличці, щоб її номер збігався із номером першої. Для зміни підпису продовження таблички, необхідно перед початком документа переозначити його формат й змінити вирівнювання із центру на лівий бік:

\usepackage{caption}
\usepackage{longtable}
\usepackage{floatflt}

\DeclareCaptionLabelFormat{continued}{\textit{Продовження таблиці} #2}
\captionsetup[ContinuedFloat]{labelformat=continued,justification=left,singlelinecheck=false}

Тоді для випадку розбиття на дві таблички, у другій половинці лишається додати такі рядки:

\begin{table*}

\ContinuedFloat
\caption{}

\begin{tabular}{}
\end{tabular}{}
\end{table*}

Для випадку оточення longtable такі:

\begin{longtable}{}

\caption{У цій табличці показано таке}
\endfirsthead
\captionsetup{labelformat=continued}
\caption{}
\endhead

\end{longtable}

Кілька слів про розмір. Щоб широкі таблички плавно змінювали свій масштаб під ширину сторінки й не виходили за її межі, найліпше працює поєднання ось цих двох опцій:

\begin{table*}
\caption{}\label{}

\small
\resizebox{\columnwidth}{!}{

\begin{tabular}{cccccc}
\end{tabular}

}

\end{table*}