dlinyj: (Default)
[personal profile] dlinyj
К своей статье Калькуляторы с обратной польской нотацией мне хотелось сделать красивую иллюстрацию с графиками аппроксимирующего полинома синуса. При этом мне было мало одного gnuplot, так как в подписи осей мне хотелось добавить живую формулу.



Попутно мне нужна была красивая таблица расчёта тригонометрических функций и их десятичные значения. Такую таблицу тоже пришлось делать самому.



Чтобы это реализовать мне пришлось разобраться с Latex. Много раз пытался освоить эту систему вёрстки, и постоянно не хватало мотивации. Как я понял, лучший способ что-то освоить - это иметь конкретную задачу и в рамках неё уже производить освоение.

В общем рассказываю о своём вливании в тему.

1. График синуса и аппроксимирующего полинома
Первое с чего я начал - это с графика синуса. Мне нужно было, чтобы в легендах была формула того, что отображается. И начал я с того что начал искать готовый пример. И нашел его тут. Смысл в том, что часть функционала брал на себя gnuplot, который генерировал tex-файл, который компилировался уже pdflatex



Там достаточно много символов в строке Makefile. Самое сложное было это установить корректно LATEX и заставить его работать. Это прям отдельный квест, я гуглил каждую ошибку и доустанавливал недостающие пакеты. Это единственная программа с которой у меня было столько проблем и танцев с бубном, чтобы просто заставить её работать. Сейчас уже не вспомню всех телодвижений, но даже повторить этот make у меня ушло часа два гуглежа. Сейчас попробовал на другой системе, и второй раз этот путь пройти не готов. Но приведу пример файла test.plt, который содержал график.

set grid
set yrange [-5:5]
set xrange [-3*pi:3*pi] 

plot sin(x) title "$\\sin(x)$", \
x * ( 1 + x**2 * (0.00761 * x**2 - 0.16605)) title "$sin(x) = x \\cdot (1+x^{2}\\cdot(0,00761\\cdot x^{2}-0,16605))$"


Но мне показалось, что как-то муторно иметь два файла, и фактически всё равно вызывается LATEX. Плюс, мне хотелось получить точки -π/2 и π/2, что показать место где полином расходится с синусом и показать подписи на графике функций. Поэтому я решил немного почитать матчасть "Набор и вёрстка в системе
LATEX
" и сделал следующий скрипт.

\documentclass[8pt,a4paper,dvipsnames]{article}
\usepackage[utf8]{inputenc}
\usepackage[left=2cm,right=2cm,top=1.5cm,bottom=1.5cm]{geometry}

\usepackage{graphicx,gnuplottex,amsmath}
\usepackage{xcolor}

\begin{document}
\begin{figure}[htp]
    \centering
    \begin{gnuplot}[scale=1.3, terminal=epslatex, terminaloptions=color dashed]
		set grid
		set yrange [-5:5]
		set xrange [-3*pi:3*pi] 

		set xtics ("-2$\\pi$" -2*pi, "-$\\pi$" -pi, "-$\\dfrac{\\pi}{2}$" -pi/2, 0, "$\\dfrac{\\pi}{2}$" pi/2,"$\\pi$" pi, "2$\\pi$" 2*pi)
		plot sin(x) title "$\\sin(x)$", \
		x * ( 1 + x**2 * (0.00761 * x**2 - 0.16605)) title "$sin(x) = x \\cdot (1+x^{2}\\cdot(0,00761\\cdot x^{2}-0,16605))$"
    \end{gnuplot}
\end{figure}
\end{document}


И всё успешно получилось.

2. Таблица
С таблицей синусов всё было проще и сложнее одновременно. Таблицу синусов я нашёл сразу готовой. Надо было только в начале и в конце добавить:


% Automatically added code
\documentclass{article}
\usepackage{amsmath}


...
\end{document}
% End of automatically added code


И получился такой вот чудесный результат.



Как можно видеть, что таблица готовая. Но сложности начались тогда, когда мне захотелось изменить размеры ячеек по высоте, ширине и выравнивание в ячейке. Чтение мануалов мне мало помогло, а погружаться в глубины латеха мне не хотелось. Поэтому решил, что и так сойдёт, и вышел у меня такой вот скрипт.

% Automatically added code
\documentclass{article}
\usepackage{amsmath}

\begin{document}
% End of automatically added code

\subsubsection*{Values of sine functions for common angles.} 
%\begin{tabular*}{\linewidth}[b]{*{6}{|c @{\extracolsep\fill}}|}
\begin{tabular*}{\linewidth}[b]{*{6}{|c @{\extracolsep\fill}}|}
\hline  Angle in Degrees   &0$^\circ$& 30$^\circ$ & 45$^\circ$ & 60$^\circ$ & 90$^\circ$\\ 
\hline  Angle in Radians &0$^c$ & $\dfrac{\pi}{6}$& $\dfrac{\pi}{4}$ & $\dfrac{\pi}{3}$ & $\dfrac{\pi}{2}$\\ 
\hline $\sin \theta$ & 0 & $\dfrac{1}{2}$ &$\dfrac{1}{\sqrt{2}}$ & $\dfrac{\sqrt{3}}{2}$& 1\\[15pt]
\hline $\sin \theta$, Calculated values & 0 & 0,5 & 0,7071.. & 0,8660.. & 1\\ 
\hline
\end{tabular*}

% Automatically added code
\end{document}
% End of automatically added code


В общем, вёрстка LATEX у меня вызвала противоречивые чувства. После подхода linux, что всё скриптовое - это намного более удобного того же MS Word. Но, куча проблем с совместимостями, непонимание что же происходит, отсутствие мгновенного просмотра результата сильно ограничивают применение инструмента. Но мне понравилось, что можно делать крутые научные статьи, крутую вёрстку, прям как в даташитных пдфках.

Date: 2024-02-06 11:27 am (UTC)
From: [identity profile] zhbert.livejournal.com
> отсутствие мгновенного просмотра результата
Даже VSCode умеет на лету рендерить PDF в половине окна.

Date: 2024-02-06 01:02 pm (UTC)
From: [identity profile] zhbert.livejournal.com

Ну там все плагины же...


Называется LaTeX Workshop (https://github.com/James-Yu/LaTeX-Workshop), он его сам можно сказать предлагает, когда открываешь *.tex файл.


Еще есть TeX Studio, классный редактор. Но не помню, автоматом он рендерит или нет, но в любом случае там наверху просто жмешь «Плей» и получаешь в окне просмотра PDF.


Причем долго (ну секунд 10) рендерится только первый раз, когда с нуля, потом обновления рендерятся только в месте обновления.

Edited Date: 2024-02-06 01:02 pm (UTC)

Date: 2024-02-06 02:04 pm (UTC)
From: [identity profile] nicka-startcev.livejournal.com
ТеХ — он странный. он вроде бы и пакетно-скриптовый, но при обработке кривого ввода на каждый чих задает вопрос, вместо того чтоб сразу итого нагадить в стдерр. просто странный, чуть не та идеология применения.

>отдельный квест, я гуглил каждую ошибку и доустанавливал недостающие пакеты. Это единственная программа с которой у меня было столько проблем и танцев с бубном

вот да, есть такое.

>отсутствие мгновенного просмотра

была какая-то оболочка. не помню название, но лет 10 назад активно пользовался. слева ТеХ текст, справа превью.

ps: и про точность полинома в диапазоне +-Pi/2. имхо, тут лучше выражать точность в процентах или долях максимального отклонения. имхо, тут интереснее именно максимальный а не усредненный факап.

Date: 2024-02-06 02:16 pm (UTC)
From: [identity profile] dlinyj.livejournal.com

>>ТеХ — он странный. он вроде бы и пакетно-скриптовый, но при обработке кривого ввода на каждый чих задает вопрос, вместо того чтоб сразу итого нагадить в стдерр. просто странный, чуть не та идеология применения.

Вот, это бесячья тема.

>>ps: и про точность полинома в диапазоне +-Pi/2. имхо, тут лучше выражать точность в процентах или долях максимального отклонения. имхо, тут интереснее именно максимальный а не усредненный факап.

В данном случае я посчитал вообще сумму ошибки, даже не максимальное и не среднее. И она получилась столь малой, что тема рабочая оказывается :)

Edited Date: 2024-02-06 02:17 pm (UTC)

Date: 2024-02-06 02:42 pm (UTC)
From: [identity profile] nicka-startcev.livejournal.com
>ТеХ — он странный.

ага. по этим граблям лет 10 назад ходил. реально бесит. подозреваю, что это наследие эпохи перфокарт и сопутствующих обычаев "отладки".

>>про точность
>посчитал вообще сумму ошибки

ну а хз. обычно интереснее какое-то среднее, а лучше максимальное отклонение. но из интеграла отклонения можно быстро оценить среднее отклонение. тоже интересно, но тут "на вкус и на цвет"

>она получилась столь малой, что

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

Date: 2024-02-06 02:44 pm (UTC)
From: [identity profile] dlinyj.livejournal.com

>>ага! бывает иногда такая приятная неожиданность. по идее, там тупо разложение синуса в фурье, но чуть иначе записано.

Да не, просто полином, найденный МНК.

Date: 2024-02-06 03:02 pm (UTC)
From: [identity profile] nicka-startcev.livejournal.com
пардон, что-то я протупил конкретно так. не фурье, а тэйлор — разложение в полином любой НЁХ вокруг нуля.

и хз тут МНК или тэйлор. по идее, итог будет примерно одинаков.

Date: 2024-02-07 03:04 pm (UTC)
From: [identity profile] ssloy.livejournal.com

Вокруг нуля это Маклорен ;)

Date: 2024-02-06 09:08 pm (UTC)
From: [identity profile] ssloy.livejournal.com
> ТеХ — он странный.

Он просто слишком мощный. И для того, чтобы сверстать одну табличку или сгенерировать подписи в гнуплоте, вся свистопляска наглухо не нужна. Кстати, рекомендую рисовать картинки не в гнуплоте, а в питоне с матплотлибом. Заодно мейкфайлы не понадобятся.

Date: 2024-02-06 10:39 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
Подписи, если нет формул делается скрипом с пятью строками.

Я ниже привел пример отказа от makefile и делаю в одном tex скрипте.

Date: 2024-02-06 03:04 pm (UTC)
From: [identity profile] eumorozov.livejournal.com

Несколько раз в жизни делал документы в LaTeX. Моё мнение: во многих местах он сильно устарел. Поддержка unicode, современных шрифтов, не существует, или требует знания шизотерических технологий 60-х годов прошлого века.


Существуют сборки, в которых все эти проблемы якобы решены из коробки, но если они вдруг не работают (а такое бывает!), то фиг разберёшься, что именно в нем не работает, и как починить.


В сети тысячи противоречащих друг-другу советов, как набирать текст на русском, как использовать unicode, как подключать современные шрифты.


Большинство из этих советов не работают. Они привязаны к каким-то конкретным путям и прочим идиосинкратическим реалиям софта середины 20-го века.


Да, тогда это был шедевр, но сейчас любая попытка работы с ним вызывает боль.



Собираюсь попробовать проект на основе LaTeX, который обещает часть этой боли купировать:


https://github.com/tectonic-typesetting/tectonic (https://github.com/tectonic-typesetting/tectonic)

Date: 2024-02-06 09:05 pm (UTC)
From: [identity profile] ssloy.livejournal.com
Попробуйте overleaf.com. Они там уж точно все пакеты поставили :)

Date: 2024-02-07 02:00 pm (UTC)
From: [identity profile] eumorozov.livejournal.com

Не хочу — принципиально стараюсь избегать любые облачные сервисы. Сегодня они работают, завтра — нет, или блокируют тебя по национальному/политическому признаку.


Я несколько раз в жизни писал документы в latex. Даже книгу один раз сверстал (жаль, потом потерял исходники).


Когда он работает — он прекрасен. Но шаг влево, шаг вправо — всё ломается с совершенно абстрактными текстами ошибок, по которым невозможно понять ничего. Ещё хуже, когда документ компилируется без ошибок, но русских букв в нём нет. И куда копать — непонятно.


Да, чудес не бывает, во всём можно разобраться. Вот только Latex cам по себе сложная система, его работа со шрифтами — это тоже вещь в себе, у меня нет времени тратить недели на глубокое изучение его внутреннего устройства.


Из коробки он чаще не работает, чем работает. Несколько раз ставил эксперименты: ставлю готовую ванильную сборку, типа какого-нибудь Xetex, которая заявляет, что в ней из коробки побеждены все проблемы с Unicode и современными шрифтами. Компилирую простой документ из одного предложения на русском языке. Либо всё рушится на этапе компиляции, с невнятными ошибками. Либо получаем документ с квадратиками на месте русских букв.


В 2024 году это выглядит так, что пора уже выбросить на помойку и заменить каким-нибудь более современным софтом. В котором, во-первых будут понятные сообщения об ошибках, не требующие глубоких детальных знаний всей экосистемы Latex. Чтобы просто говорилось: "По пути /foo/bar/baz не найден шрифт Hacker Nerd Mono.otf", а не какая-то абстрактная нечитаемая абракадабра, выводимая latex'ом. Во-вторых, который будет использовать современные стандарты для кодировок (типа, Unicode по умолчанию из коробки а не пришитый кое-как в систему, которая изначально плохо поддерживала многоязычность — якобы задумка TeXа была в поддержке многоязычности, но на самом деле, по ощущениям, с этим всегда было туго), шрифтов, путей, кэшей, временных файлов, и всего остального.

Edited Date: 2024-02-07 02:03 pm (UTC)

Date: 2024-02-07 02:33 pm (UTC)
From: [identity profile] dlinyj.livejournal.com

Сколько боли :). Но я понимаю причину.

На самом деле, система скриптовой вёрстки — очеь крутая, но реализация тупо устарела.

Date: 2024-02-06 09:52 pm (UTC)
From: [identity profile] juunitaki.livejournal.com


% Automatically added code


\documentclass{article}


\usepackage{amsmath}


\renewcommand{\arraystretch}{2.2}


\begin{document}


\subsubsection*{Values of sine functions for common angles.}


\begin{tabular}{|l|c|c|c|c|c|}


\hline Angle in Degrees &$0^\circ$& $30^\circ$ & $45^\circ$ & $60^\circ$ & $90^\circ$\\


\hline Angle in Radians &$0^c$ & $\dfrac{\pi}{6}$& $\dfrac{\pi}{4}$ & $\dfrac{\pi}{3}$ & $\dfrac{\pi}{2}$\\[5pt]


\hline $\sin \theta$ & 0 & $\dfrac{1}{2}$ &$\dfrac{1}{\sqrt{2}}$ & $\dfrac{\sqrt{3}}{2}$& $1$\\[5pt]


\hline $\sin \theta$, Calculated values & $0$ & $0.5$ & $0.7071..$ & $0.8660..$ & 1\\


\hline


\end{tabular}


\end{document}




Edited Date: 2024-02-06 09:57 pm (UTC)

Date: 2024-02-06 10:37 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
Класс. В чем была ошибка?

Date: 2024-02-07 07:53 am (UTC)
From: [identity profile] juunitaki.livejournal.com

Я просто немного погуглил.
\renewcommand{\arraystretch}{2.2} — добавляет отступ вверху строки


[5pt] — добавляет отступ внизу строки


\begin{tabular}{|l|c|c|c|c|c|} — выравнивание по столбцам

Date: 2024-02-07 08:08 am (UTC)
From: [identity profile] dlinyj.livejournal.com

Спасибо большое!

Date: 2024-02-08 02:03 pm (UTC)
From: [identity profile] masterspammer.livejournal.com

Верстал книжку по вероятности/статистике; ну что — получилось... но там многое в вёрстке было отражением хотелок заказчика и его и моего преставлений о прекрасном. Получилось всё, каких-то технических проблем не помню (ещё бы, на фоне такого количества работы); делал ещё Makefile для сборки из нескольких частей, как целиком, так и по частям.

January 2026

S M T W T F S
    123
456 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 23rd, 2026 11:51 am
Powered by Dreamwidth Studios