<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Сыр Российский &#187; мысли</title>
	<atom:link href="http://cblp.su/blog/tag/%d0%bc%d1%8b%d1%81%d0%bb%d0%b8/feed" rel="self" type="application/rss+xml" />
	<link>http://cblp.su/blog</link>
	<description>говорящий с машинами</description>
	<lastBuildDate>Mon, 21 May 2012 16:01:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Научно-ТеХническая революция</title>
		<link>http://cblp.su/blog/2010/05/23/%d0%bd%d0%b0%d1%83%d1%87%d0%bd%d0%be-%d1%82%d0%b5%d1%85%d0%bd%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%b0%d1%8f-%d1%80%d0%b5%d0%b2%d0%be%d0%bb%d1%8e%d1%86%d0%b8%d1%8f.html</link>
		<comments>http://cblp.su/blog/2010/05/23/%d0%bd%d0%b0%d1%83%d1%87%d0%bd%d0%be-%d1%82%d0%b5%d1%85%d0%bd%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%b0%d1%8f-%d1%80%d0%b5%d0%b2%d0%be%d0%bb%d1%8e%d1%86%d0%b8%d1%8f.html#comments</comments>
		<pubDate>Sun, 23 May 2010 12:40:25 +0000</pubDate>
		<dc:creator>Сыр Российский</dc:creator>
				<category><![CDATA[Моё]]></category>
		<category><![CDATA[LaTeX]]></category>
		<category><![CDATA[TeX]]></category>
		<category><![CDATA[мысли]]></category>
		<category><![CDATA[НЕНАВИСТЬ]]></category>

		<guid isPermaLink="false">http://cblp.su/blog/?p=1055</guid>
		<description><![CDATA[Помните, я писал, как ненавижу ТеХ, но продолжаю им пользоваться, потому что ничего лучше пока не придумали? Так вот. Придумали. DocBook гораздо семантичнее ТеХа. У него, правда, нет таких потрясающих возможностей, но всегда можно их одолжить (у ТеХа, HTML или во что ещё вы его будете выводить), дописав пару своих правил к XSL-преобразованию. Чем я [...]]]></description>
			<content:encoded><![CDATA[<p>Помните, я <a href="http://juick.com/cblp/584255">писал</a>, как ненавижу ТеХ, но продолжаю им пользоваться, потому что ничего лучше пока не придумали? Так вот. Придумали.<span id="more-1055"></span></p>
<p><a href="http://docbook.org/"><strong>DocBook</strong></a> гораздо семантичнее ТеХа. У него, правда, нет таких потрясающих возможностей, но всегда можно их одолжить (у ТеХа, HTML или во что ещё вы его будете выводить), дописав пару своих правил к XSL-преобразованию. Чем я и собираюсь заняться через месяцок-другой в рамках работы над переводом «Погружения».</p>
<p>А пока я пишу дипломную в LaTeX и плююсь. Плююсь и пишу. Нет, тридцать лет назад это была гениальная штука, но в двадцать первом веке его синтаксис и некоторые базовые концепции производят впечатление наколенной поделки.</p>
<p>Рассмотрим, к примеру, создание глав. Если я хочу начать новую главу, я пишу <code>\chapter{Интеграл Пуассона}</code>. При этом глава нумеруется и вносится в оглавление. Есть ещё другая команда с похожим именем <code>\chapter*{Интеграл Пуассона}</code>, которая отличается от первой сразу двумя вещами: глава не нумеруется и не попадает в оглавление. О том, что в далёкой России введения и заключения принято не нумеровать, но включать в оглавление, Кнут не подумал. Вообще, складывается такое впечатление, что он не думал ни о ком, кроме себя.</p>
<p>Вот и размножаются по отечественным трудам такие крокодилы:</p>
<blockquote>
<pre>% Глава ненумерованная, но присутствующая в оглавлении
\newcommand*{\chaptertoc}[1]
{
    \phantomsection
    \addcontentsline{toc}{chapter}{#1}
    \chapter*{#1}
}</pre>
</blockquote>
<p>Или количество аргументов у команды. Никогда не известно, сколько их. Я не нашёл ни одного справочника, где была бы полная документация по всем командам. Гуглишь полчаса, а потом в чьём-то блоге находишь рецепт, что можно передать какой-то необязательный параметр, которого нет ни в одной книге, но он работает! Как вообще человечество узнаёт об их существовании?</p>
<p>Двайте немного пофантазируем, каким мог бы быть правильный ТеХ. Эти и многие другие проблемы можно было бы решить, сделав синтаксис чуточку строже и расширив команды параметрами. Вот, посмотрите сами. Пусть каждый вызов команды имеет синтаксис</p>
<ul>
<li>вызов_команды ::= «\» название [необязательные_параметры] [аргумент]</li>
<li>необязательные_параметры ::= «[» (название_параметра «=» значение_параметра)* «]»</li>
<li>аргумент ::= сущность</li>
<li>значение_параметра ::= сущность</li>
</ul>
<p>(Давно не пользовался БНФ, поправьте в комментариях, если ошибся.)</p>
<p>Как это выглядит на практике?</p>
<blockquote>
<pre>% начало классическое
\chapter{Интеграл Пуассона} % нумеровать и в оглавление добавлять
\chapter*{Тригонометрический вектор} % не нумеровать и в оглавление не добавлять

% а тут начинается веселье
\chaptertoc[enumerate=false]{Введение} % не нумеровать, но в оглавление добавлять

\thebibliography[width=99 addtotoc=true] % а вы мучились с фантомами?
{
    ...
}

% ладно, допустим, thebibliography не знает такого параметра
% тогда навесим на неё свой обработчик
\addhook-before[cmd=thebibliography]
{
    \if[cond=#addtotoc]
    {
        \chapter[enumerate=false phantom=true]{Литература}
    }
}</pre>
</blockquote>
<p>Никаких крокодилов! Да и команду <code>chapter*</code> можно не включать в стандартную библиотеку, потому что её несложно будет определить самому пользователю при необходимости:<br />
<blockquote>
<pre>\newcommand*[cmd=chapter*]
{
    \chapter[enumerate=false addtotoc=false ##]{#arg}
}</pre>
</blockquote>
<p>Как вы догадались, <code>##</code> служит для передачи всех аргументов из текущей команды в вызываемую.</p>
<p>Но самый смак будет с параметрами! Например, сейчас, если мы хотим немножко подкрутить отображение заголовков глав, нужно переопределять разные команды, названия которых иногда совершенно неочевидны, и в документации их не так-то просто найти. Гораздо проще не переопределять команды целиком, а только изменять параметры, и не скопом, а по одному:</p>
<blockquote>
<pre>\setcounterformat[counter=section]
{
    §~\arabic{section}
}

\setdefaultparam[cmd=section]
{
    number-after = .
}</pre>
</blockquote>
<p>Такое определение заставит все последующие вызовы <code>section</code> ставить точку после номера в заголовке и предварять номер раздела (параграфа) соответствующим знаком везде, где он будет использоваться (<code>ref</code>).</p>
<p>Окружения тоже не нужны.</p>
<blockquote>
<pre>\itemize
{
    \item{ Элемент маркированного списка. }
    \item{ Другой элемент — нумерованный список:
        \enumerate[bullet=1)]
        {
            \item{ раз; }
            \item{ два; }
            \item{ три. }
        }
    }
}</pre>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://cblp.su/blog/2010/05/23/%d0%bd%d0%b0%d1%83%d1%87%d0%bd%d0%be-%d1%82%d0%b5%d1%85%d0%bd%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%b0%d1%8f-%d1%80%d0%b5%d0%b2%d0%be%d0%bb%d1%8e%d1%86%d0%b8%d1%8f.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Википедическое&#8230;</title>
		<link>http://cblp.su/blog/2009/04/17/%d0%b2%d0%b8%d0%ba%d0%b8%d0%bf%d0%b5%d0%b4%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b5.html</link>
		<comments>http://cblp.su/blog/2009/04/17/%d0%b2%d0%b8%d0%ba%d0%b8%d0%bf%d0%b5%d0%b4%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b5.html#comments</comments>
		<pubDate>Fri, 17 Apr 2009 08:14:02 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Моё]]></category>
		<category><![CDATA[Википедия]]></category>
		<category><![CDATA[мысли]]></category>
		<category><![CDATA[странное]]></category>
		<category><![CDATA[юмор]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[[править] Царь Всея Руси]]></description>
			<content:encoded><![CDATA[<div style="border: solid 2px #ddd; padding: 2em; border-radius: 1em; -moz-border-radius: 1em;">
<h2 style="border-bottom: solid 1px #aaa; font-size: 14pt;"><span style="float: right; font-size: 9pt; margin-left: 5px;">[<a href="http://cblp-su.ya.ru/" style="color: #00c; text-decoration: none;" title="&#x43F;&#x440;&#x430;&#x432;&#x438;&#x442;&#x44C; &#x420;&#x443;&#x441;&#x44C;&#x44E;, &#x430;&#x433;&#x430;">править</a>]</span> <span class="mw-headline">Царь Всея Руси</span></h2>
</div>
<p><noindex></noindex></p>
]]></content:encoded>
			<wfw:commentRss>http://cblp.su/blog/2009/04/17/%d0%b2%d0%b8%d0%ba%d0%b8%d0%bf%d0%b5%d0%b4%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b5.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

