deploy: 1d340f0d64ebd0bd14a1183867f54f6a79d95f18

This commit is contained in:
SqrtMinusOne 2022-05-10 18:08:46 +00:00
parent 875c728ab6
commit 7167036dd4
11 changed files with 1860 additions and 16 deletions

584
index.xml
View file

@ -6,7 +6,589 @@
<description>Recent content in Index on SqrtMinusOne</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language>
<lastBuildDate>Sat, 12 Feb 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://sqrtminusone.xyz/index.xml" rel="self" type="application/rss+xml" />
<lastBuildDate>Tue, 10 May 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://sqrtminusone.xyz/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Extending elfeed entries with a PDF viewer and subtitles fetcher</title>
<link>https://sqrtminusone.xyz/posts/2022-05-09-pdf/</link>
<pubDate>Tue, 10 May 2022 00:00:00 +0000</pubDate>
<guid>https://sqrtminusone.xyz/posts/2022-05-09-pdf/</guid>
<content type="html">
&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/skeeto/elfeed&#34;&gt;elfeed&lt;/a&gt; is one of the most popular Emacs packages, and it&amp;rsquo;s also one in which I ended up investing a lot of effort. I wrote about the &lt;a href=&#34;https://sqrtminusone.xyz/posts/2021-09-07-emms/&#34;&gt;EMMS integration&lt;/a&gt; and even made a &lt;a href=&#34;https://github.com/SqrtMinusOne/elfeed-summary&#34;&gt;custom frontpage&lt;/a&gt; to my liking.&lt;/p&gt;
&lt;p&gt;However, sites frequently limit the amount of information shipped in the RSS feed. Oftentimes the entry doesn&amp;rsquo;t include the entire content (of which, by the way, this blog was guilty).&lt;/p&gt;
&lt;p&gt;Also, there&amp;rsquo;s non-textual content, of which in this post I consider YouTube subscriptions. It&amp;rsquo;s possible to watch YouTube from elfeed, for instance with the aforementioned EMMS integration, but we can do more.&lt;/p&gt;
&lt;p&gt;So, the plan for the post is to discuss:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;using &lt;a href=&#34;https://github.com/eafer/rdrview&#34;&gt;rdrview&lt;/a&gt; to extend elfeed articles;&lt;/li&gt;
&lt;li&gt;using &lt;a href=&#34;https://pandoc.org&#34;&gt;pandoc&lt;/a&gt; and LaTeX to convert articles to PDFs;&lt;/li&gt;
&lt;li&gt;using &lt;a href=&#34;https://github.com/jdepoix/youtube-transcript-api&#34;&gt;youtube-transcript-api&lt;/a&gt; to download YouTube subtitles and &lt;a href=&#34;https://github.com/sachac/subed&#34;&gt;subed&lt;/a&gt; to control the MPV playback;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also, heads up! You&amp;rsquo;ll need lexical binding enabled for the code blocks. The easiest way to accomplish this is to add the following to the first line of &lt;code&gt;init.el&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;;;; -*- lexical-binding: t -*-&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;rdrview&#34;&gt;rdrview&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/eafer/rdrview&#34;&gt;rdrview&lt;/a&gt; is a command-line tool to strip webpages from clutter, extracting only parts related to the actual content. It&amp;rsquo;s a standalone port of the corresponding feature of Firefox, called &lt;a href=&#34;https://support.mozilla.org/en-US/kb/firefox-reader-view-clutter-free-web-pages&#34;&gt;Reader View&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It seems like the tool &lt;a href=&#34;https://repology.org/project/rdrview/versions&#34;&gt;isn&amp;rsquo;t available&lt;/a&gt; in a whole lot of package repositories, but it&amp;rsquo;s pretty easy to compile. I&amp;rsquo;ve put together a &lt;a href=&#34;https://github.com/SqrtMinusOne/channel-q/blob/master/rdrview.scm&#34;&gt;Guix definition&lt;/a&gt;, which &lt;em&gt;one day&lt;/em&gt; I&amp;rsquo;ll submit to upstream.&lt;/p&gt;
&lt;h3 id=&#34;integrating-rdrview-with-emacs&#34;&gt;Integrating rdrview with Emacs&lt;/h3&gt;
&lt;p&gt;Let&amp;rsquo;s start by integrating &lt;code&gt;rdrview&lt;/code&gt; with Emacs. In the general case, we want to fetch both metadata and the actual content from the page.&lt;/p&gt;
&lt;p&gt;However, the interface of &lt;code&gt;rdrview&lt;/code&gt; is a bit awkward in this part, so we have the following options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;call &lt;code&gt;rdrview&lt;/code&gt; two times: with &lt;code&gt;-M&lt;/code&gt; flag to fetch the metadata, and without the flag to fetch the HTML;&lt;/li&gt;
&lt;li&gt;call &lt;code&gt;rdrview&lt;/code&gt; with &lt;code&gt;-T&lt;/code&gt; flag to append the metadata to the resulting HTML.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;ve decided to go with the second option. Here is a function that calls rdrview with the required flags:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;defun&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-get&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;callback&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Get the rdrview representation of URL.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;Call CALLBACK with the output.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let*&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;buffer&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;generate-new-buffer&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;rdrview&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;proc&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;start-process&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;rdrview&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;buffer&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;rdrview&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-T&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;title,sitename,body&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-H&amp;#34;&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;set-process-sentinel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;proc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;lambda&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;_msg&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;code&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-exit-status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;cond&lt;/span&gt; ((&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;exit&lt;/span&gt;) (&lt;span style=&#34;color:#00f&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;code&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;funcall&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;callback&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;with-current-buffer&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-buffer&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;buffer-string&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;kill-buffer&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-buffer&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;))) )
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ((&lt;span style=&#34;color:#008000&#34;&gt;or&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;exit&lt;/span&gt;) (&lt;span style=&#34;color:#00f&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;code&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;signal&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;err&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;with-current-buffer&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-buffer&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;buffer-string&lt;/span&gt;))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;kill-buffer&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-buffer&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#d2413a;font-weight:bold&#34;&gt;user-error&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Error in rdrview: %s&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;err&lt;/span&gt;)))))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;proc&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The function calls &lt;code&gt;callback&lt;/code&gt; with the output of &lt;code&gt;rdrview&lt;/code&gt;. This usually doesn&amp;rsquo;t take long, but it&amp;rsquo;s still nice to avoid freezing Emacs that way.&lt;/p&gt;
&lt;p&gt;Now we have to parse the output. The &lt;code&gt;-T&lt;/code&gt; flag puts the title in the &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; tag, the site name site in the &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt; tag, and the content in a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;. What&amp;rsquo;s more, headers of the content are often shifted, e.g. the top-level header may well end up being and &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;h3&amp;gt;&lt;/code&gt;, which does not look great in LaTeX.&lt;/p&gt;
&lt;p&gt;With that said, here&amp;rsquo;s a function that does the required changes:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;defun&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-parse&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;dom-string&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;dom&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;with-temp-buffer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;dom-string&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;libxml-parse-html-region&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;point-min&lt;/span&gt;) (&lt;span style=&#34;color:#00f&#34;&gt;point-max&lt;/span&gt;)))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;title&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;sitename&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;dolist&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;child&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;dom-children&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;dom-by-id&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;dom&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;readability-page-1&amp;#34;&lt;/span&gt;))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;when&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;listp&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;child&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;cond&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ((&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;child&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;title&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;dom-text&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;child&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ((&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;child&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h2&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;sitename&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;dom-text&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;child&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ((&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;child&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;div&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;child&lt;/span&gt;)))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;while&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;not&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;dom-by-tag&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h1&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;dom-search&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;lambda&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;el&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;when&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;listp&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;el&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;pcase&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;el&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h2&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setf&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;el&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h1&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h3&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setf&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;el&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h2&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h4&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setf&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;el&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h3&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h5&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setf&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;el&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h4&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h6&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setf&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;el&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h5&lt;/span&gt;))))))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#666&#34;&gt;`&lt;/span&gt;((&lt;span style=&#34;color:#19177c&#34;&gt;title&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;title&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;sitename&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;sitename&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;with-temp-buffer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;dom-print&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;buffer-string&lt;/span&gt;)))))))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;using-rdrview-from-elfeed&#34;&gt;Using rdrview from elfeed&lt;/h3&gt;
&lt;p&gt;Because I didn&amp;rsquo;t find a smart way to advise the desired behavior into elfeed, here&amp;rsquo;s a modification of the &lt;code&gt;elfeed-show-refresh--mail-style&lt;/code&gt; function with two changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;it uses &lt;code&gt;rdrview&lt;/code&gt; to fetch the HTML;&lt;/li&gt;
&lt;li&gt;it saves the resulting HTML into a buffer-local variable (we&amp;rsquo;ll need that later).&lt;/li&gt;
&lt;/ul&gt;
&lt;!--listend--&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;defvar-local&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/elfeed-show-rdrview-html&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;nil&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;defun&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-elfeed-show&lt;/span&gt; ()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;interactive&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;unless&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#d2413a;font-weight:bold&#34;&gt;user-error&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;No elfeed entry in this buffer!&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-get&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-link&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;lambda&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;result&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let*&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;data&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-parse&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;result&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;inhibit-read-only&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;t&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;title&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-title&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;date&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;seconds-to-time&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-date&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;authors&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-meta&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;:authors&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;link&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-link&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;tags&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-tags&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;tagsstr&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;mapconcat&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;#&amp;#39;symbol-name&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;tags&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;, &amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;nicedate&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format-time-string&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;%a, %e %b %Y %T %Z&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;date&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;alist-get&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;content&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;data&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;feed&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-feed&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;feed-title&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-feed-title&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;feed&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;base&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;feed&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-compute-base&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-feed-url&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;feed&lt;/span&gt;)))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;erase-buffer&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Title: %s\n&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;title&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-subject&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;when&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry-author&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;dolist&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;author&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;authors&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;formatted&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed--show-format-author&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;author&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Author: %s\n&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;formatted&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-to&lt;/span&gt;))))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Date: %s\n&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;nicedate&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-other&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Feed: %s\n&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;feed-title&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-other&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;when&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;tags&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Tags: %s\n&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;tagsstr&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-other&lt;/span&gt;))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Link: &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-name&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-insert-link&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;link&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;link&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;\n&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;cl-loop&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;enclosure&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;in&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-enclosures&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;do&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Enclosure: &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-name&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;do&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-insert-link&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;enclosure&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;do&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;\n&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;\n&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-insert-html&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;base&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;(empty)\n&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;italic&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq-local&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/elfeed-show-rdrview-html&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;goto-char&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;point-min&lt;/span&gt;))))))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That way, calling &lt;code&gt;M-x my/rdrview-elfeed-show&lt;/code&gt; replaces the original content with one from &lt;code&gt;rdrview&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;how-well-does-it-work&#34;&gt;How well does it work?&lt;/h3&gt;
&lt;p&gt;Rather ironically, it works well with sites that already ship with proper RSS, like &lt;a href=&#34;https://protesilaos.com/&#34;&gt;Protesilaos Stavrou&amp;rsquo;s&lt;/a&gt; or &lt;a href=&#34;https://karthinks.com/software/simple-folding-with-hideshow/&#34;&gt;Karthik Chikmagalur&amp;rsquo;s&lt;/a&gt; blogs or &lt;a href=&#34;https://www.theatlantic.com/world/&#34;&gt;The Atlantic&lt;/a&gt; magazine.&lt;/p&gt;
&lt;p&gt;Of my other subscriptions, it does a pretty good job with &lt;a href=&#34;https://www.theverge.com/&#34;&gt;The Verge&lt;/a&gt;, which by default sends entries truncated by the words &amp;ldquo;Read the full article&amp;rdquo;. For &lt;a href=&#34;https://arstechnica.com/&#34;&gt;Ars Technica&lt;/a&gt;, it works only if the story is not large enough, otherwise the site returns its HTML-based pagination interface.&lt;/p&gt;
&lt;p&gt;For paywalled sites such as &lt;a href=&#34;https://www.nytimes.com/&#34;&gt;New York Times&lt;/a&gt; or &lt;a href=&#34;https://www.economist.com/&#34;&gt;The Economist&lt;/a&gt;, this usually doesn&amp;rsquo;t work (by the way, what&amp;rsquo;s the problem with providing individual RSS feeds for subscribers?). If you need this kind of thing, I&amp;rsquo;d suggest using the &lt;a href=&#34;https://github.com/RSS-Bridge/rss-bridge&#34;&gt;RSS-Bridge&lt;/a&gt; project. And if something is not available, contributing business logic there definitely makes more sense than implementing workarounds in Emacs Lisp.&lt;/p&gt;
&lt;h2 id=&#34;latex-and-pandoc&#34;&gt;LaTeX and pandoc&lt;/h2&gt;
&lt;p&gt;However, I also find that I&amp;rsquo;m not really a fan of reading articles from Emacs. Somehow what works for program code doesn&amp;rsquo;t work that well for natural text. When I have to, I usually switch the Emacs theme to a light one.&lt;/p&gt;
&lt;p&gt;But the best solution I&amp;rsquo;ve found so far is to render the required articles as PDFs. I may even print out some large articles I want to read.&lt;/p&gt;
&lt;h3 id=&#34;template&#34;&gt;Template&lt;/h3&gt;
&lt;p&gt;So first, we need a LaTeX template. Pandoc already ships with one, but I don&amp;rsquo;t like it too much, so I&amp;rsquo;ve put up a template from my LaTeX styles, targeting my preferred XeLaTeX engine.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll add the code here for completeness&amp;rsquo; sake, but if you use LaTeX, you&amp;rsquo;ll probably be better off using your own setup. Be sure to define the following variables:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;main-lang&lt;/code&gt; and &lt;code&gt;other-lang&lt;/code&gt; for polyglossia (or remove them if you have only one language)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;title&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subtitle&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;author&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;date&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;!--listend--&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-latex&#34; data-lang=&#34;latex&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\documentclass&lt;/span&gt;&lt;span style=&#34;color:#7d9029&#34;&gt;[a4paper, 12pt]&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;extarticle&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== Math ======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;amsmath&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% Math stuff
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;amssymb&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;mathspec&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== List ======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;enumitem&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;etoolbox&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlist&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;nosep, topsep=-10pt&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% Remove sep-s beetween list elements
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlist&lt;/span&gt;&lt;span style=&#34;color:#7d9029&#34;&gt;[enumerate]&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;label*=&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\arabic*&lt;/span&gt;.&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlist&lt;/span&gt;&lt;span style=&#34;color:#7d9029&#34;&gt;[enumerate,1]&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;after=&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\vspace&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;0.5&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\baselineskip&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlist&lt;/span&gt;&lt;span style=&#34;color:#7d9029&#34;&gt;[itemize,1]&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;after=&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\vspace&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;0.5&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\baselineskip&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\AtBeginEnvironment&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;itemize&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;%
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlist&lt;/span&gt;&lt;span style=&#34;color:#7d9029&#34;&gt;[enumerate]&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;label=&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\arabic*&lt;/span&gt;.&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlist&lt;/span&gt;&lt;span style=&#34;color:#7d9029&#34;&gt;[enumerate,1]&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;after=&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\vspace&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;0&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\baselineskip&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\providecommand&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\tightlist&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;%
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlength&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\itemsep&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;0pt&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlength&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\parskip&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;0pt&lt;span style=&#34;color:#008000&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== Link ======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;xcolor&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;hyperref&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% Links
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\hypersetup&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; colorlinks=true,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; citecolor=blue,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; filecolor=blue,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; linkcolor=blue,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; urlcolor=blue,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% Linebreaks for urls
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\expandafter\def\expandafter\UrlBreaks\expandafter&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\UrlBreaks&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% save the current one
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;%
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;%
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\do\u\do\v\do\w\do\x\do\y\do\z\do\A\do\B\do\C\do\D&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;%
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M\do\N&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;%
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;%
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\do\Y\do\Z&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== Table ======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;array&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;booktabs&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;longtable&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;multirow&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;calc&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== Images ======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;graphicx&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% Pictures
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\makeatletter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\def\maxwidth&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\ifdim\Gin&lt;/span&gt;@nat@width&amp;gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\linewidth\linewidth\else\Gin&lt;/span&gt;@nat@width&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\fi&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\def\maxheight&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\ifdim\Gin&lt;/span&gt;@nat@height&amp;gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\textheight\textheight\else\Gin&lt;/span&gt;@nat@height&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\fi&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\makeatother&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% Scale images if necessary, so that they will not overflow the page
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% margins by default, and it is still possible to overwrite the defaults
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% using explicit options in \includegraphics[width, height, ...]{}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setkeys&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;Gin&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;width=&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\maxwidth&lt;/span&gt;,height=&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\maxheight&lt;/span&gt;,keepaspectratio&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% Set default figure placement to htbp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\makeatletter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\def\fps&lt;/span&gt;@figure&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;htbp&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\makeatother&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\newcommand&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\noimage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;%
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlength&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\fboxsep&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;-&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\fboxrule&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;%
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\fbox&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\phantom&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\rule&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;150pt&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;100pt&lt;span style=&#34;color:#008000&#34;&gt;}}}&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% Framed box
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\makeatletter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\patchcmd&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\Gin&lt;/span&gt;@ii&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\begingroup&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% &amp;lt;search&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\begingroup\renewcommand&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\@&lt;/span&gt;latex@error&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;[2]&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\noimage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}}&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% &amp;lt;replace&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;{}&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% &amp;lt;success&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;{}&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% &amp;lt;failure&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\makeatother&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== Misc ======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;fancyvrb&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;csquotes&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#7d9029&#34;&gt;[normalem]&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;ulem&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% Quotes and verses style
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\AtBeginEnvironment&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;quote&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\singlespacing&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\AtBeginEnvironment&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;verse&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\singlespacing&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== Text spacing ======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;setspace&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% String spacing
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\onehalfspacing&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;indentfirst&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlength\parindent&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;0cm&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlength\parskip&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;6pt&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== Page layout ======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;[ &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% Margins
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;left=2cm,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;right=2cm,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;top=2cm,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bottom=2cm
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;]&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;geometry&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== Document sectioning ======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;titlesec&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\titleformat*&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\section&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\bfseries&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\titleformat*&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\subsection&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\bfseries&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\titleformat*&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\subsubsection&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\bfseries&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\titleformat*&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\paragraph&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\bfseries&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\titleformat*&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\subparagraph&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\bfseries\itshape&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% chktex 6
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\titlespacing*&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\section&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;0cm&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;12pt&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;3pt&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\titlespacing*&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\subsection&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;0cm&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;12pt&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;3pt&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\titlespacing*&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\subsubsection&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;0cm&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;12pt&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;0pt&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\titlespacing*&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\paragraph&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;0pt&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;6pt&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;6pt&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\titlespacing*&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\subparagraph&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;0pt&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;6pt&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;3pt&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\makeatletter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\providecommand&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\subtitle&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;[1]&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\apptocmd&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\@&lt;/span&gt;title&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\par&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\large&lt;/span&gt; #1 &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\par&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}}{}{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\makeatother&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== Pandoc =======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;if&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;highlighting&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;macros&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;highlighting&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;macros&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;endif&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== Language ======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;polyglossia&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setdefaultlanguage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;main&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;lang&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setotherlanguage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;other&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;lang&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\defaultfontfeatures&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;Ligatures=&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;TeX&lt;span style=&#34;color:#008000&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setmainfont&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;Open Sans&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\newfontfamily\cyrillicfont&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;Open Sans&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setmonofont&lt;/span&gt;&lt;span style=&#34;color:#7d9029&#34;&gt;[Scale=0.9]&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;DejaVu Sans Mono&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\newfontfamily&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\cyrillicfonttt&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;DejaVu Sans Mono&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;[Scale=0.8]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;bidi&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;microtype&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlength&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\emergencystretch&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;3pt&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;if&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;title&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\title&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;title&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;endif&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;if&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;subtitle&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\subtitle&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;subtitle&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;endif&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;if&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;author&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\author&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;for&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;author&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;author&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;sep&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\and&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;endfor&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;endif&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;if&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;date&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\date&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;date&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;endif&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\begin&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;document&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\maketitle&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;body&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\end&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;document&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;invoking-pandoc&#34;&gt;Invoking pandoc&lt;/h3&gt;
&lt;p&gt;Now that we have the template, let&amp;rsquo;s save it somewhere and store the path to a variable:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-template&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;expand-file-name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;concat&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;user-emacs-directory&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;rdrview.tex&amp;#34;&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And let&amp;rsquo;s invoke pandoc. We need to pass the following flags:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--pdf-engine=xelatex&lt;/code&gt;, of course&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--template &amp;lt;path-to-template&amp;gt;&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-o &amp;lt;path-to-pdf&amp;gt;&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--variable key=value&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In fact, pandoc is a pretty awesome tool in the sense that it allows for feeding custom variables to rich-language templates.&lt;/p&gt;
&lt;p&gt;So, the rendering function is as follows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;cl-defun&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-render&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;variables&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;callback&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;&amp;amp;key&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;overwrite&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Render CONTENT with pandoc.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;TYPE is a file extension as supported by pandoc, for instance,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;html or txt. VARIABLES is an alist that is fed into the
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;template. After the rendering is complete successfully, CALLBACK
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;is called with the resulting PDF.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;FILE-NAME is a path to the resulting PDF. If nil it&amp;#39;s generated
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;randomly.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;If a file with the given FILE-NAME already exists, the function will
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;invoke CALLBACK straight away without doing the rendering, unless
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;OVERWRITE is non-nil.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;unless&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;/tmp/%d.pdf&amp;#34;&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;random&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;100000000&lt;/span&gt;))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;params&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;temp-file-name&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;/tmp/%d.%s&amp;#34;&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;random&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;100000000&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;type&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;cl-loop&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;key&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;value&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;variables&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;when&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;do&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;push&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--variable&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;params&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;push&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;%s=%s&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;key&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;value&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;params&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;params&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;nreverse&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;params&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;file-exists-p&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;) (&lt;span style=&#34;color:#19177c&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;overwrite&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;funcall&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;callback&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;with-temp-file&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;temp-file-name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;proc&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;apply&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;#&amp;#39;start-process&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;pandoc&amp;#34;&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;get-buffer-create&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;*Pandoc*&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;pandoc&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;temp-file-name&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-o&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--pdf-engine=xelatex&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--template&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-template&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;params&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;set-process-sentinel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;proc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;lambda&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;_msg&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;code&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-exit-status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;cond&lt;/span&gt; ((&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;exit&lt;/span&gt;) (&lt;span style=&#34;color:#00f&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;code&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;message&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Done!&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;funcall&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;callback&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ((&lt;span style=&#34;color:#008000&#34;&gt;or&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;exit&lt;/span&gt;) (&lt;span style=&#34;color:#00f&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;code&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;signal&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#d2413a;font-weight:bold&#34;&gt;user-error&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Error in pandoc. Check the *Pandoc* buffer&amp;#34;&lt;/span&gt;)))))))))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;opening-elfeed-entries&#34;&gt;Opening elfeed entries&lt;/h3&gt;
&lt;p&gt;Now we have everything required to open elfeed entries.&lt;/p&gt;
&lt;p&gt;Also, in my case elfeed entries come in two languages, so I have to set &lt;code&gt;main-lang&lt;/code&gt; and &lt;code&gt;other-lang&lt;/code&gt; variables accordingly. Here&amp;rsquo;s the main function:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/elfeed-pdf-dir&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;expand-file-name&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;~/.elfeed/pdf/&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;defun&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/elfeed-open-pdf&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;overwrite&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Open the current elfeed ENTRY with a pdf viewer.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;If OVERWRITE is non-nil, do the rendering even if the resulting
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;PDF already exists.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;interactive&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;list&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;current-prefix-arg&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;authors&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;mapcar&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;lambda&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;m&lt;/span&gt;) (&lt;span style=&#34;color:#00f&#34;&gt;plist-get&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;m&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;:name&lt;/span&gt;)) (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-meta&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;:authors&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;feed-title&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-feed-title&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-feed&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;tags&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;mapconcat&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;#&amp;#39;symbol-name&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-tags&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;) &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;, &amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;date&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format-time-string&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;%a, %e %b %Y&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;seconds-to-time&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-date&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-deref&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-content&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;concat&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/elfeed-pdf-dir&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-ref-id&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-content&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;.pdf&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;main-language&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;english&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;other-language&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;russian&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;unless&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#d2413a;font-weight:bold&#34;&gt;user-error&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;No content!&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;subtitle&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;cond&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;seq-empty-p&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;authors&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;feed-title&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ((&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;not&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;seq-empty-p&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;authors&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;string-match-p&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;regexp-quote&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;authors&lt;/span&gt;)) &lt;span style=&#34;color:#19177c&#34;&gt;feed-title&lt;/span&gt;)) &lt;span style=&#34;color:#19177c&#34;&gt;feed-title&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#800&#34;&gt;t&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;concat&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;string-join&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;authors&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;, &amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;\\\\&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;feed-title&lt;/span&gt;))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;when&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;member&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;ru&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-tags&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;main-language&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;russian&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;other-language&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;english&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-render&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;bound-and-true-p&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/elfeed-show-rdrview-html&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/elfeed-show-rdrview-html&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-content-type&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#666&#34;&gt;`&lt;/span&gt;((&lt;span style=&#34;color:#19177c&#34;&gt;title&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;(&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-title&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;subtitle&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;subtitle&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;date&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;date&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;tags&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;tags&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;main-lang&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;main-language&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;other-lang&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;other-language&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;lambda&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;start-process&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;xdg-open&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;nil&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;xdg-open&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;:file-name&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;:overwrite&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;current-prefix-arg&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If the &lt;code&gt;my/elfeed-show-rdrview-html&lt;/code&gt; variable is bound and true, then the content in this buffer was retrieved via &lt;code&gt;rdrview&lt;/code&gt;, so we&amp;rsquo;ll use that instead of the output of &lt;code&gt;elfeed-deref&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Now we can open elfeed entries in a PDF viewer, which I find much nicer to read. Given that RSS feeds generally ship with simpler HTML than the regular websites, results usually look awesome:&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://sqrtminusone.xyz/ox-hugo/pdf-prot.png&#34;/&gt;
&lt;/figure&gt;
&lt;h3 id=&#34;opening-arbitrary-sites&#34;&gt;Opening arbitrary sites&lt;/h3&gt;
&lt;p&gt;As you may have noticed, we also can display arbitrary web pages with this setup, so let&amp;rsquo;s go ahead and implement that:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;defun&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/get-languages&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;url&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;main-lang&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;english&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;other-lang&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;russian&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;when&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;string-match-p&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;rx&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;.ru&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;url&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;main-lang&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;russian&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;other-lang&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;english&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;list&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;main-lang&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;other-lang&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;defun&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-open&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;overwrite&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;interactive&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;url&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;read-from-minibuffer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;URL: &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;bound-and-true-p&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-link&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;)))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;when&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;string-empty-p&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;url&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#d2413a;font-weight:bold&#34;&gt;user-error&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;URL is empty&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;list&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;current-prefix-arg&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-get&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;url&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;lambda&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;res&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;data&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-parse&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;res&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;langs&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;my/get-languages&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;url&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-render&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;alist-get&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;content&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;data&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;html&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#666&#34;&gt;`&lt;/span&gt;((&lt;span style=&#34;color:#19177c&#34;&gt;title&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;(&lt;span style=&#34;color:#19177c&#34;&gt;alist-get&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;title&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;data&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;subtitle&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;(&lt;span style=&#34;color:#19177c&#34;&gt;alist-get&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;sitename&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;data&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;main-lang&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;(&lt;span style=&#34;color:#00f&#34;&gt;nth&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;langs&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;other-lang&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;(&lt;span style=&#34;color:#00f&#34;&gt;nth&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;langs&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;lambda&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;start-process&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;xdg-open&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;nil&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;xdg-open&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;)))))))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Unfortunately, this part doesn&amp;rsquo;t work that well, so we can&amp;rsquo;t just uninstall Firefox or Chromium and browse the web from a PDF viewer.&lt;/p&gt;
&lt;p&gt;The most common problem I&amp;rsquo;ve encountered is incorrectly formed pictures, such as &lt;code&gt;.png&lt;/code&gt; files without the boundary info. I&amp;rsquo;m sure you&amp;rsquo;ve also come across this if you ever tried to insert a lot of Internet pictures into a LaTeX document.&lt;/p&gt;
&lt;p&gt;However, sans the pictures issue, for certain sites like Wikipedia this is usable. For instance, here&amp;rsquo;s how the Emacs page looks:
&lt;img src=&#34;https://sqrtminusone.xyz/ox-hugo/pdf-emacs.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;youtube-transcripts&#34;&gt;YouTube transcripts&lt;/h2&gt;
&lt;h3 id=&#34;getting-subtitles&#34;&gt;Getting subtitles&lt;/h3&gt;
&lt;p&gt;Finally, let&amp;rsquo;s get to transcripts.&lt;/p&gt;
&lt;p&gt;In principle, the YouTube API allows for downloading subtitles, but I&amp;rsquo;ve found &lt;a href=&#34;https://github.com/jdepoix/youtube-transcript-api&#34;&gt;this awesome Python script&lt;/a&gt; which does the same. You can install it from &lt;code&gt;pip&lt;/code&gt;, or here&amp;rsquo;s mine &lt;a href=&#34;https://github.com/SqrtMinusOne/channel-q/blob/master/youtube-transcript-api.scm&#34;&gt;Guix definition&lt;/a&gt; once again.&lt;/p&gt;
&lt;p&gt;Much like the previous cases, we need to invoke the program and save the output. The &lt;a href=&#34;https://en.wikipedia.org/wiki/WebVTT&#34;&gt;WebVTT&lt;/a&gt; format will work well enough for our purposes. Here comes the function:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;cl-defun&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/youtube-subtitles-get&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;video-id&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;callback&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;&amp;amp;key&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;overwrite&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Get subtitles for VIDEO-ID in WebVTT format.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;Call CALLBACK when done.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;FILE-NAME is a path to the resulting WebVTT file. If nil it&amp;#39;s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;generated randomly.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;If a file with the given FILE-NAME already exists, the function will
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;invoke CALLBACK straight away without doing the rendering, unless
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;OVERWRITE is non-nil.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;unless&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;/tmp/%d.vtt&amp;#34;&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;random&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;100000000&lt;/span&gt;))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;file-exists-p&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;) (&lt;span style=&#34;color:#19177c&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;overwrite&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;funcall&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;callback&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let*&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;buffer&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;generate-new-buffer&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;youtube-transcripts&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;proc&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;start-process&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;youtube_transcript_api&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;buffer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;youtube_transcript_api&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;video-id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--format&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;webvtt&amp;#34;&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;set-process-sentinel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;proc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;lambda&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;_msg&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;code&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-exit-status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;cond&lt;/span&gt; ((&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;exit&lt;/span&gt;) (&lt;span style=&#34;color:#00f&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;code&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;with-current-buffer&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-buffer&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;buffer-file-name&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;save-buffer&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;kill-buffer&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-buffer&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;funcall&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;callback&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ((&lt;span style=&#34;color:#008000&#34;&gt;or&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;exit&lt;/span&gt;) (&lt;span style=&#34;color:#00f&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;code&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;signal&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;err&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;with-current-buffer&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-buffer&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;buffer-string&lt;/span&gt;))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;kill-buffer&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-buffer&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#d2413a;font-weight:bold&#34;&gt;user-error&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Error in youtube_transcript_api: %s&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;err&lt;/span&gt;)))))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;proc&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;elfeed-and-subed&#34;&gt;elfeed and subed&lt;/h3&gt;
&lt;p&gt;Now that we have a standalone function, let&amp;rsquo;s invoke it with the current &lt;code&gt;elfeed-show-entry&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/elfeed-srt-dir&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;expand-file-name&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;~/.elfeed/srt/&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;defun&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/elfeed-youtube-subtitles&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;&amp;amp;optional&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;arg&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Get subtitles for the current elfeed ENTRY.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;Works only in the entry is a YouTube video.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;If ARG is non-nil, re-fetch the subtitles regardless of whether
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;they were fetched before.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;interactive&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;list&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;current-prefix-arg&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;video-id&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;cadr&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;assoc&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;watch?v&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;url-parse-query-string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;substring&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;url-filename&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;url-generic-parse-url&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-link&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;))))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;unless&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;video-id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#d2413a;font-weight:bold&#34;&gt;user-error&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Can&amp;#39;t get video ID from the entry&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;my/youtube-subtitles-get&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;video-id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;lambda&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;with-current-buffer&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;find-file-other-window&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq-local&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;goto-char&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;point-min&lt;/span&gt;))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;:file-name&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;concat&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/elfeed-srt-dir&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-ref-id&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-content&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;.vtt&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;:overwrite&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;arg&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That opens up a &lt;code&gt;.vtt&lt;/code&gt; buffer with the subtitles for the current video, which means now we can use the functionality of Sacha Chua&amp;rsquo;s awesome package called &lt;a href=&#34;https://github.com/sachac/subed&#34;&gt;subed&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This package, besides syntax highlighting, allows for controlling the MPV playback, for instance by moving the cursor in the subtitles buffer. Using that requires having the URL of the video in this buffer, which necessitates the line with &lt;code&gt;setq-local&lt;/code&gt; in the previous function.&lt;/p&gt;
&lt;p&gt;Also, the package launches its own instance of MPV to control it via JSON-IPC, so there seems to be no easy way to integrate it with EMMS. But at least I can reuse the &lt;code&gt;emms-player-mpv-parameters&lt;/code&gt; variable, the method of setting which I&amp;rsquo;ve discussed in a &lt;a href=&#34;https://sqrtminusone.xyz/posts/2021-09-07-emms/&#34;&gt;previous blog post&lt;/a&gt;. The function is as follows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;defun&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/subed-elfeed&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Open the video file from elfeed ENTRY in MPV.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;This has to be launched from inside the subtitles buffer, opened
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;by the &lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;`my/elfeed-youtube-subtitles&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt; function.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;interactive&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;list&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;unless&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#d2413a;font-weight:bold&#34;&gt;user-error&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;No entry!&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;unless&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;derived-mode-p&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;subed-mode&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#d2413a;font-weight:bold&#34;&gt;user-error&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Not subed mode!&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq-local&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;subed-mpv-arguments&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;seq-uniq&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;append&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;subed-mpv-arguments&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;emms-player-mpv-parameters&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq-local&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;subed-mpv-video-file&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-link&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;subed-mpv--play&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;subed-mpv-video-file&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And here&amp;rsquo;s how it looks when used (the video on the screenshot is &lt;a href=&#34;https://www.youtube.com/watch?v=qjAIXCmhCQQ&#34;&gt;this System Crafters&amp;rsquo; stream&lt;/a&gt;):
&lt;img src=&#34;https://sqrtminusone.xyz/ox-hugo/pdf-subed.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Keep in mind that this function has to be launched inside the buffer opened by the &lt;code&gt;my/elfeed-youtube-subtitles&lt;/code&gt; function.&lt;/p&gt;
</content>
</item>
<item>
<title>A few cases of literate configuration</title>
<link>https://sqrtminusone.xyz/posts/2022-02-12-literate/</link>

View file

@ -0,0 +1,649 @@
<!DOCTYPE html>
<html lang=""><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Extending elfeed entries with a PDF viewer and subtitles fetcher</title>
<meta name="description" content="Freedom is a state of mind">
<meta name="author" content='SqrtMinusOne'>
<link href="https://fonts.googleapis.com/css2?family=Inconsolata:wght@400;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" integrity="sha512-iBBXm8fW90+nuLcSKlbmrPcLa0OT92xO1BIsZ+ywDWZCvqsWgccV3gFoRBv0z+8dLJgyAHIhR35VZc2oM/gI1w==" crossorigin="anonymous">
<link rel="stylesheet" href="/sass/researcher.min.css">
<link rel="icon" type="image/ico" href="https://sqrtminusone.xyz/favicon.ico">
</head>
<body><div class="container mt-5">
<nav class="navbar navbar-expand-sm flex-column flex-sm-row text-nowrap p-0">
<a class="navbar-brand mx-0 mr-sm-auto" href="https://sqrtminusone.xyz/" title="SqrtMinusOne">
SqrtMinusOne
</a>
<div class="navbar-nav flex-row flex-wrap justify-content-center">
<a class="nav-item nav-link" href="/" title="Index">
Index
</a>
<span class="nav-item navbar-text mx-1">/</span>
<a class="nav-item nav-link" href="/posts/" title="Posts">
Posts
</a>
<span class="nav-item navbar-text mx-1">/</span>
<a class="nav-item nav-link" href="/configs/readme" title="Configs">
Configs
</a>
</div>
</nav>
</div>
<hr>
<div id="content">
<div class="container">
<h1>Extending elfeed entries with a PDF viewer and subtitles fetcher</h1>
<h2 id="intro">Intro</h2>
<p><a href="https://github.com/skeeto/elfeed">elfeed</a> is one of the most popular Emacs packages, and it&rsquo;s also one in which I ended up investing a lot of effort. I wrote about the <a href="https://sqrtminusone.xyz/posts/2021-09-07-emms/">EMMS integration</a> and even made a <a href="https://github.com/SqrtMinusOne/elfeed-summary">custom frontpage</a> to my liking.</p>
<p>However, sites frequently limit the amount of information shipped in the RSS feed. Oftentimes the entry doesn&rsquo;t include the entire content (of which, by the way, this blog was guilty).</p>
<p>Also, there&rsquo;s non-textual content, of which in this post I consider YouTube subscriptions. It&rsquo;s possible to watch YouTube from elfeed, for instance with the aforementioned EMMS integration, but we can do more.</p>
<p>So, the plan for the post is to discuss:</p>
<ul>
<li>using <a href="https://github.com/eafer/rdrview">rdrview</a> to extend elfeed articles;</li>
<li>using <a href="https://pandoc.org">pandoc</a> and LaTeX to convert articles to PDFs;</li>
<li>using <a href="https://github.com/jdepoix/youtube-transcript-api">youtube-transcript-api</a> to download YouTube subtitles and <a href="https://github.com/sachac/subed">subed</a> to control the MPV playback;</li>
</ul>
<p>Also, heads up! You&rsquo;ll need lexical binding enabled for the code blocks. The easiest way to accomplish this is to add the following to the first line of <code>init.el</code>:</p>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span><span style="color:#408080;font-style:italic">;;; -*- lexical-binding: t -*-</span>
</span></span></code></pre></div><h2 id="rdrview">rdrview</h2>
<p><a href="https://github.com/eafer/rdrview">rdrview</a> is a command-line tool to strip webpages from clutter, extracting only parts related to the actual content. It&rsquo;s a standalone port of the corresponding feature of Firefox, called <a href="https://support.mozilla.org/en-US/kb/firefox-reader-view-clutter-free-web-pages">Reader View</a>.</p>
<p>It seems like the tool <a href="https://repology.org/project/rdrview/versions">isn&rsquo;t available</a> in a whole lot of package repositories, but it&rsquo;s pretty easy to compile. I&rsquo;ve put together a <a href="https://github.com/SqrtMinusOne/channel-q/blob/master/rdrview.scm">Guix definition</a>, which <em>one day</em> I&rsquo;ll submit to upstream.</p>
<h3 id="integrating-rdrview-with-emacs">Integrating rdrview with Emacs</h3>
<p>Let&rsquo;s start by integrating <code>rdrview</code> with Emacs. In the general case, we want to fetch both metadata and the actual content from the page.</p>
<p>However, the interface of <code>rdrview</code> is a bit awkward in this part, so we have the following options:</p>
<ul>
<li>call <code>rdrview</code> two times: with <code>-M</code> flag to fetch the metadata, and without the flag to fetch the HTML;</li>
<li>call <code>rdrview</code> with <code>-T</code> flag to append the metadata to the resulting HTML.</li>
</ul>
<p>I&rsquo;ve decided to go with the second option. Here is a function that calls rdrview with the required flags:</p>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/rdrview-get</span> (<span style="color:#19177c">url</span> <span style="color:#19177c">callback</span>)
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;Get the rdrview representation of URL.
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">Call CALLBACK with the output.&#34;</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let*</span> ((<span style="color:#19177c">buffer</span> (<span style="color:#19177c">generate-new-buffer</span> <span style="color:#ba2121">&#34;rdrview&#34;</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">proc</span> (<span style="color:#00f">start-process</span> <span style="color:#ba2121">&#34;rdrview&#34;</span> <span style="color:#19177c">buffer</span> <span style="color:#ba2121">&#34;rdrview&#34;</span>
</span></span><span style="display:flex;"><span> <span style="color:#19177c">url</span> <span style="color:#ba2121">&#34;-T&#34;</span> <span style="color:#ba2121">&#34;title,sitename,body&#34;</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;-H&#34;</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">set-process-sentinel</span>
</span></span><span style="display:flex;"><span> <span style="color:#19177c">proc</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">process</span> <span style="color:#19177c">_msg</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">status</span> (<span style="color:#00f">process-status</span> <span style="color:#19177c">process</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">code</span> (<span style="color:#00f">process-exit-status</span> <span style="color:#19177c">process</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cond</span> ((<span style="color:#008000">and</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">status</span> <span style="color:#19177c">&#39;exit</span>) (<span style="color:#00f">=</span> <span style="color:#19177c">code</span> <span style="color:#666">0</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">progn</span>
</span></span><span style="display:flex;"><span> (<span style="color:#00f">funcall</span> <span style="color:#19177c">callback</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">with-current-buffer</span> (<span style="color:#00f">process-buffer</span> <span style="color:#19177c">process</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">buffer-string</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">kill-buffer</span> (<span style="color:#00f">process-buffer</span> <span style="color:#19177c">process</span>))) )
</span></span><span style="display:flex;"><span> ((<span style="color:#008000">or</span> (<span style="color:#008000">and</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">status</span> <span style="color:#19177c">&#39;exit</span>) (<span style="color:#00f">&gt;</span> <span style="color:#19177c">code</span> <span style="color:#666">0</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">eq</span> <span style="color:#19177c">status</span> <span style="color:#19177c">&#39;signal</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">err</span> (<span style="color:#008000">with-current-buffer</span> (<span style="color:#00f">process-buffer</span> <span style="color:#19177c">process</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">buffer-string</span>))))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">kill-buffer</span> (<span style="color:#00f">process-buffer</span> <span style="color:#19177c">process</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#d2413a;font-weight:bold">user-error</span> <span style="color:#ba2121">&#34;Error in rdrview: %s&#34;</span> <span style="color:#19177c">err</span>)))))))
</span></span><span style="display:flex;"><span> <span style="color:#19177c">proc</span>))
</span></span></code></pre></div><p>The function calls <code>callback</code> with the output of <code>rdrview</code>. This usually doesn&rsquo;t take long, but it&rsquo;s still nice to avoid freezing Emacs that way.</p>
<p>Now we have to parse the output. The <code>-T</code> flag puts the title in the <code>&lt;h1&gt;</code> tag, the site name site in the <code>&lt;h2&gt;</code> tag, and the content in a <code>&lt;div&gt;</code>. What&rsquo;s more, headers of the content are often shifted, e.g. the top-level header may well end up being and <code>&lt;h2&gt;</code> or <code>&lt;h3&gt;</code>, which does not look great in LaTeX.</p>
<p>With that said, here&rsquo;s a function that does the required changes:</p>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/rdrview-parse</span> (<span style="color:#19177c">dom-string</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">dom</span> (<span style="color:#008000">with-temp-buffer</span>
</span></span><span style="display:flex;"><span> (<span style="color:#00f">insert</span> <span style="color:#19177c">dom-string</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">libxml-parse-html-region</span> (<span style="color:#00f">point-min</span>) (<span style="color:#00f">point-max</span>)))))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> (<span style="color:#19177c">title</span> <span style="color:#19177c">sitename</span> <span style="color:#19177c">content</span> (<span style="color:#19177c">i</span> <span style="color:#666">0</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">dolist</span> (<span style="color:#19177c">child</span> (<span style="color:#19177c">dom-children</span> (<span style="color:#00f">car</span> (<span style="color:#19177c">dom-by-id</span> <span style="color:#19177c">dom</span> <span style="color:#ba2121">&#34;readability-page-1&#34;</span>))))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#00f">listp</span> <span style="color:#19177c">child</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cond</span>
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">eq</span> (<span style="color:#00f">car</span> <span style="color:#19177c">child</span>) <span style="color:#19177c">&#39;h1</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">title</span> (<span style="color:#19177c">dom-text</span> <span style="color:#19177c">child</span>)))
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">eq</span> (<span style="color:#00f">car</span> <span style="color:#19177c">child</span>) <span style="color:#19177c">&#39;h2</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">sitename</span> (<span style="color:#19177c">dom-text</span> <span style="color:#19177c">child</span>)))
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">eq</span> (<span style="color:#00f">car</span> <span style="color:#19177c">child</span>) <span style="color:#19177c">&#39;div</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">content</span> <span style="color:#19177c">child</span>)))))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">while</span> (<span style="color:#008000">and</span>
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">not</span> (<span style="color:#19177c">dom-by-tag</span> <span style="color:#19177c">content</span> <span style="color:#19177c">&#39;h1</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">dom-search</span>
</span></span><span style="display:flex;"><span> <span style="color:#19177c">content</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">el</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#00f">listp</span> <span style="color:#19177c">el</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">pcase</span> (<span style="color:#00f">car</span> <span style="color:#19177c">el</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">&#39;h2</span> (<span style="color:#008000">setf</span> (<span style="color:#00f">car</span> <span style="color:#19177c">el</span>) <span style="color:#19177c">&#39;h1</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">&#39;h3</span> (<span style="color:#008000">setf</span> (<span style="color:#00f">car</span> <span style="color:#19177c">el</span>) <span style="color:#19177c">&#39;h2</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">&#39;h4</span> (<span style="color:#008000">setf</span> (<span style="color:#00f">car</span> <span style="color:#19177c">el</span>) <span style="color:#19177c">&#39;h3</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">&#39;h5</span> (<span style="color:#008000">setf</span> (<span style="color:#00f">car</span> <span style="color:#19177c">el</span>) <span style="color:#19177c">&#39;h4</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">&#39;h6</span> (<span style="color:#008000">setf</span> (<span style="color:#00f">car</span> <span style="color:#19177c">el</span>) <span style="color:#19177c">&#39;h5</span>))))))))
</span></span><span style="display:flex;"><span> <span style="color:#666">`</span>((<span style="color:#19177c">title</span> <span style="color:#666">.</span> <span style="color:#666">,</span><span style="color:#19177c">title</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">sitename</span> <span style="color:#666">.</span> <span style="color:#666">,</span><span style="color:#19177c">sitename</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">content</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#008000">with-temp-buffer</span>
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">dom-print</span> <span style="color:#19177c">content</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">buffer-string</span>)))))))
</span></span></code></pre></div><h3 id="using-rdrview-from-elfeed">Using rdrview from elfeed</h3>
<p>Because I didn&rsquo;t find a smart way to advise the desired behavior into elfeed, here&rsquo;s a modification of the <code>elfeed-show-refresh--mail-style</code> function with two changes:</p>
<ul>
<li>it uses <code>rdrview</code> to fetch the HTML;</li>
<li>it saves the resulting HTML into a buffer-local variable (we&rsquo;ll need that later).</li>
</ul>
<!--listend-->
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defvar-local</span> <span style="color:#19177c">my/elfeed-show-rdrview-html</span> <span style="color:#800">nil</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/rdrview-elfeed-show</span> ()
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> <span style="color:#19177c">elfeed-show-entry</span>
</span></span><span style="display:flex;"><span> (<span style="color:#d2413a;font-weight:bold">user-error</span> <span style="color:#ba2121">&#34;No elfeed entry in this buffer!&#34;</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/rdrview-get</span>
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">elfeed-entry-link</span> <span style="color:#19177c">elfeed-show-entry</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">result</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let*</span> ((<span style="color:#19177c">data</span> (<span style="color:#19177c">my/rdrview-parse</span> <span style="color:#19177c">result</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">inhibit-read-only</span> <span style="color:#800">t</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">title</span> (<span style="color:#19177c">elfeed-entry-title</span> <span style="color:#19177c">elfeed-show-entry</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">date</span> (<span style="color:#19177c">seconds-to-time</span> (<span style="color:#19177c">elfeed-entry-date</span> <span style="color:#19177c">elfeed-show-entry</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">authors</span> (<span style="color:#19177c">elfeed-meta</span> <span style="color:#19177c">elfeed-show-entry</span> <span style="color:#008000">:authors</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">link</span> (<span style="color:#19177c">elfeed-entry-link</span> <span style="color:#19177c">elfeed-show-entry</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">tags</span> (<span style="color:#19177c">elfeed-entry-tags</span> <span style="color:#19177c">elfeed-show-entry</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">tagsstr</span> (<span style="color:#00f">mapconcat</span> <span style="color:#00f">#&#39;symbol-name</span> <span style="color:#19177c">tags</span> <span style="color:#ba2121">&#34;, &#34;</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">nicedate</span> (<span style="color:#00f">format-time-string</span> <span style="color:#ba2121">&#34;%a, %e %b %Y %T %Z&#34;</span> <span style="color:#19177c">date</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">content</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">&#39;content</span> <span style="color:#19177c">data</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">feed</span> (<span style="color:#19177c">elfeed-entry-feed</span> <span style="color:#19177c">elfeed-show-entry</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">feed-title</span> (<span style="color:#19177c">elfeed-feed-title</span> <span style="color:#19177c">feed</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">base</span> (<span style="color:#008000">and</span> <span style="color:#19177c">feed</span> (<span style="color:#19177c">elfeed-compute-base</span> (<span style="color:#19177c">elfeed-feed-url</span> <span style="color:#19177c">feed</span>)))))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">erase-buffer</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">insert</span> (<span style="color:#00f">format</span> (<span style="color:#00f">propertize</span> <span style="color:#ba2121">&#34;Title: %s\n&#34;</span> <span style="color:#19177c">&#39;face</span> <span style="color:#19177c">&#39;message-header-name</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">propertize</span> <span style="color:#19177c">title</span> <span style="color:#19177c">&#39;face</span> <span style="color:#19177c">&#39;message-header-subject</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> <span style="color:#19177c">elfeed-show-entry-author</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">dolist</span> (<span style="color:#19177c">author</span> <span style="color:#19177c">authors</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">formatted</span> (<span style="color:#19177c">elfeed--show-format-author</span> <span style="color:#19177c">author</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">insert</span>
</span></span><span style="display:flex;"><span> (<span style="color:#00f">format</span> (<span style="color:#00f">propertize</span> <span style="color:#ba2121">&#34;Author: %s\n&#34;</span> <span style="color:#19177c">&#39;face</span> <span style="color:#19177c">&#39;message-header-name</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">propertize</span> <span style="color:#19177c">formatted</span> <span style="color:#19177c">&#39;face</span> <span style="color:#19177c">&#39;message-header-to</span>))))))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">insert</span> (<span style="color:#00f">format</span> (<span style="color:#00f">propertize</span> <span style="color:#ba2121">&#34;Date: %s\n&#34;</span> <span style="color:#19177c">&#39;face</span> <span style="color:#19177c">&#39;message-header-name</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">propertize</span> <span style="color:#19177c">nicedate</span> <span style="color:#19177c">&#39;face</span> <span style="color:#19177c">&#39;message-header-other</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">insert</span> (<span style="color:#00f">format</span> (<span style="color:#00f">propertize</span> <span style="color:#ba2121">&#34;Feed: %s\n&#34;</span> <span style="color:#19177c">&#39;face</span> <span style="color:#19177c">&#39;message-header-name</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">propertize</span> <span style="color:#19177c">feed-title</span> <span style="color:#19177c">&#39;face</span> <span style="color:#19177c">&#39;message-header-other</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> <span style="color:#19177c">tags</span>
</span></span><span style="display:flex;"><span> (<span style="color:#00f">insert</span> (<span style="color:#00f">format</span> (<span style="color:#00f">propertize</span> <span style="color:#ba2121">&#34;Tags: %s\n&#34;</span> <span style="color:#19177c">&#39;face</span> <span style="color:#19177c">&#39;message-header-name</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">propertize</span> <span style="color:#19177c">tagsstr</span> <span style="color:#19177c">&#39;face</span> <span style="color:#19177c">&#39;message-header-other</span>))))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">insert</span> (<span style="color:#00f">propertize</span> <span style="color:#ba2121">&#34;Link: &#34;</span> <span style="color:#19177c">&#39;face</span> <span style="color:#19177c">&#39;message-header-name</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">elfeed-insert-link</span> <span style="color:#19177c">link</span> <span style="color:#19177c">link</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">insert</span> <span style="color:#ba2121">&#34;\n&#34;</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cl-loop</span> <span style="color:#19177c">for</span> <span style="color:#19177c">enclosure</span> <span style="color:#19177c">in</span> (<span style="color:#19177c">elfeed-entry-enclosures</span> <span style="color:#19177c">elfeed-show-entry</span>)
</span></span><span style="display:flex;"><span> <span style="color:#008000">do</span> (<span style="color:#00f">insert</span> (<span style="color:#00f">propertize</span> <span style="color:#ba2121">&#34;Enclosure: &#34;</span> <span style="color:#19177c">&#39;face</span> <span style="color:#19177c">&#39;message-header-name</span>))
</span></span><span style="display:flex;"><span> <span style="color:#008000">do</span> (<span style="color:#19177c">elfeed-insert-link</span> (<span style="color:#00f">car</span> <span style="color:#19177c">enclosure</span>))
</span></span><span style="display:flex;"><span> <span style="color:#008000">do</span> (<span style="color:#00f">insert</span> <span style="color:#ba2121">&#34;\n&#34;</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">insert</span> <span style="color:#ba2121">&#34;\n&#34;</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> <span style="color:#19177c">content</span>
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">elfeed-insert-html</span> <span style="color:#19177c">content</span> <span style="color:#19177c">base</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">insert</span> (<span style="color:#00f">propertize</span> <span style="color:#ba2121">&#34;(empty)\n&#34;</span> <span style="color:#19177c">&#39;face</span> <span style="color:#19177c">&#39;italic</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq-local</span> <span style="color:#19177c">my/elfeed-show-rdrview-html</span> <span style="color:#19177c">content</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">goto-char</span> (<span style="color:#00f">point-min</span>))))))
</span></span></code></pre></div><p>That way, calling <code>M-x my/rdrview-elfeed-show</code> replaces the original content with one from <code>rdrview</code>.</p>
<h3 id="how-well-does-it-work">How well does it work?</h3>
<p>Rather ironically, it works well with sites that already ship with proper RSS, like <a href="https://protesilaos.com/">Protesilaos Stavrou&rsquo;s</a> or <a href="https://karthinks.com/software/simple-folding-with-hideshow/">Karthik Chikmagalur&rsquo;s</a> blogs or <a href="https://www.theatlantic.com/world/">The Atlantic</a> magazine.</p>
<p>Of my other subscriptions, it does a pretty good job with <a href="https://www.theverge.com/">The Verge</a>, which by default sends entries truncated by the words &ldquo;Read the full article&rdquo;. For <a href="https://arstechnica.com/">Ars Technica</a>, it works only if the story is not large enough, otherwise the site returns its HTML-based pagination interface.</p>
<p>For paywalled sites such as <a href="https://www.nytimes.com/">New York Times</a> or <a href="https://www.economist.com/">The Economist</a>, this usually doesn&rsquo;t work (by the way, what&rsquo;s the problem with providing individual RSS feeds for subscribers?). If you need this kind of thing, I&rsquo;d suggest using the <a href="https://github.com/RSS-Bridge/rss-bridge">RSS-Bridge</a> project. And if something is not available, contributing business logic there definitely makes more sense than implementing workarounds in Emacs Lisp.</p>
<h2 id="latex-and-pandoc">LaTeX and pandoc</h2>
<p>However, I also find that I&rsquo;m not really a fan of reading articles from Emacs. Somehow what works for program code doesn&rsquo;t work that well for natural text. When I have to, I usually switch the Emacs theme to a light one.</p>
<p>But the best solution I&rsquo;ve found so far is to render the required articles as PDFs. I may even print out some large articles I want to read.</p>
<h3 id="template">Template</h3>
<p>So first, we need a LaTeX template. Pandoc already ships with one, but I don&rsquo;t like it too much, so I&rsquo;ve put up a template from my LaTeX styles, targeting my preferred XeLaTeX engine.</p>
<p>I&rsquo;ll add the code here for completeness&rsquo; sake, but if you use LaTeX, you&rsquo;ll probably be better off using your own setup. Be sure to define the following variables:</p>
<ul>
<li><code>main-lang</code> and <code>other-lang</code> for polyglossia (or remove them if you have only one language)</li>
<li><code>title</code></li>
<li><code>subtitle</code></li>
<li><code>author</code></li>
<li><code>date</code></li>
</ul>
<!--listend-->
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-latex" data-lang="latex"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\documentclass</span><span style="color:#7d9029">[a4paper, 12pt]</span><span style="color:#008000">{</span>extarticle<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">% ====== Math ======
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#008000">{</span>amsmath<span style="color:#008000">}</span> <span style="color:#408080;font-style:italic">% Math stuff
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#008000">{</span>amssymb<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#008000">{</span>mathspec<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">% ====== List ======
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#008000">{</span>enumitem<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#008000">{</span>etoolbox<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\setlist</span><span style="color:#008000">{</span>nosep, topsep=-10pt<span style="color:#008000">}</span> <span style="color:#408080;font-style:italic">% Remove sep-s beetween list elements
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span><span style="color:#008000;font-weight:bold">\setlist</span><span style="color:#7d9029">[enumerate]</span><span style="color:#008000">{</span>label*=<span style="color:#008000;font-weight:bold">\arabic*</span>.<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\setlist</span><span style="color:#7d9029">[enumerate,1]</span><span style="color:#008000">{</span>after=<span style="color:#008000;font-weight:bold">\vspace</span><span style="color:#008000">{</span>0.5<span style="color:#008000;font-weight:bold">\baselineskip</span><span style="color:#008000">}}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\setlist</span><span style="color:#7d9029">[itemize,1]</span><span style="color:#008000">{</span>after=<span style="color:#008000;font-weight:bold">\vspace</span><span style="color:#008000">{</span>0.5<span style="color:#008000;font-weight:bold">\baselineskip</span><span style="color:#008000">}}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\AtBeginEnvironment</span><span style="color:#008000">{</span>itemize<span style="color:#008000">}{</span><span style="color:#408080;font-style:italic">%
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span> <span style="color:#008000;font-weight:bold">\setlist</span><span style="color:#7d9029">[enumerate]</span><span style="color:#008000">{</span>label=<span style="color:#008000;font-weight:bold">\arabic*</span>.<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">\setlist</span><span style="color:#7d9029">[enumerate,1]</span><span style="color:#008000">{</span>after=<span style="color:#008000;font-weight:bold">\vspace</span><span style="color:#008000">{</span>0<span style="color:#008000;font-weight:bold">\baselineskip</span><span style="color:#008000">}}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\providecommand</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\tightlist</span><span style="color:#008000">}{</span><span style="color:#408080;font-style:italic">%
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span> <span style="color:#008000;font-weight:bold">\setlength</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\itemsep</span><span style="color:#008000">}{</span>0pt<span style="color:#008000">}</span><span style="color:#008000;font-weight:bold">\setlength</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\parskip</span><span style="color:#008000">}{</span>0pt<span style="color:#008000">}}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">% ====== Link ======
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#008000">{</span>xcolor<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#008000">{</span>hyperref<span style="color:#008000">}</span> <span style="color:#408080;font-style:italic">% Links
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span><span style="color:#008000;font-weight:bold">\hypersetup</span><span style="color:#008000">{</span>
</span></span><span style="display:flex;"><span> colorlinks=true,
</span></span><span style="display:flex;"><span> citecolor=blue,
</span></span><span style="display:flex;"><span> filecolor=blue,
</span></span><span style="display:flex;"><span> linkcolor=blue,
</span></span><span style="display:flex;"><span> urlcolor=blue,
</span></span><span style="display:flex;"><span><span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">% Linebreaks for urls
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span><span style="color:#008000;font-weight:bold">\expandafter\def\expandafter\UrlBreaks\expandafter</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\UrlBreaks</span><span style="color:#408080;font-style:italic">% save the current one
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span> <span style="color:#008000;font-weight:bold">\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j</span><span style="color:#408080;font-style:italic">%
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span> <span style="color:#008000;font-weight:bold">\do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t</span><span style="color:#408080;font-style:italic">%
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span> <span style="color:#008000;font-weight:bold">\do\u\do\v\do\w\do\x\do\y\do\z\do\A\do\B\do\C\do\D</span><span style="color:#408080;font-style:italic">%
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span> <span style="color:#008000;font-weight:bold">\do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M\do\N</span><span style="color:#408080;font-style:italic">%
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span> <span style="color:#008000;font-weight:bold">\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X</span><span style="color:#408080;font-style:italic">%
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span> <span style="color:#008000;font-weight:bold">\do\Y\do\Z</span><span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">% ====== Table ======
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#008000">{</span>array<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#008000">{</span>booktabs<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#008000">{</span>longtable<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#008000">{</span>multirow<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#008000">{</span>calc<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">% ====== Images ======
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#008000">{</span>graphicx<span style="color:#008000">}</span> <span style="color:#408080;font-style:italic">% Pictures
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\makeatletter</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\def\maxwidth</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\ifdim\Gin</span>@nat@width&gt;<span style="color:#008000;font-weight:bold">\linewidth\linewidth\else\Gin</span>@nat@width<span style="color:#008000;font-weight:bold">\fi</span><span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\def\maxheight</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\ifdim\Gin</span>@nat@height&gt;<span style="color:#008000;font-weight:bold">\textheight\textheight\else\Gin</span>@nat@height<span style="color:#008000;font-weight:bold">\fi</span><span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\makeatother</span>
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">% Scale images if necessary, so that they will not overflow the page
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">% margins by default, and it is still possible to overwrite the defaults
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">% using explicit options in \includegraphics[width, height, ...]{}
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span><span style="color:#008000;font-weight:bold">\setkeys</span><span style="color:#008000">{</span>Gin<span style="color:#008000">}{</span>width=<span style="color:#008000;font-weight:bold">\maxwidth</span>,height=<span style="color:#008000;font-weight:bold">\maxheight</span>,keepaspectratio<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">% Set default figure placement to htbp
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span><span style="color:#008000;font-weight:bold">\makeatletter</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\def\fps</span>@figure<span style="color:#008000">{</span>htbp<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\makeatother</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\newcommand</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\noimage</span><span style="color:#008000">}{</span><span style="color:#408080;font-style:italic">%
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span> <span style="color:#008000;font-weight:bold">\setlength</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\fboxsep</span><span style="color:#008000">}{</span>-<span style="color:#008000;font-weight:bold">\fboxrule</span><span style="color:#008000">}</span><span style="color:#408080;font-style:italic">%
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span> <span style="color:#008000;font-weight:bold">\fbox</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\phantom</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\rule</span><span style="color:#008000">{</span>150pt<span style="color:#008000">}{</span>100pt<span style="color:#008000">}}}</span><span style="color:#408080;font-style:italic">% Framed box
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span><span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\makeatletter</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\patchcmd</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\Gin</span>@ii<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span> <span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\begingroup</span><span style="color:#008000">}</span><span style="color:#408080;font-style:italic">% &lt;search&gt;
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span> <span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\begingroup\renewcommand</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\@</span>latex@error<span style="color:#008000">}</span>[2]<span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\noimage</span><span style="color:#008000">}}</span><span style="color:#408080;font-style:italic">% &lt;replace&gt;
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span> <span style="color:#008000">{}</span><span style="color:#408080;font-style:italic">% &lt;success&gt;
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span> <span style="color:#008000">{}</span><span style="color:#408080;font-style:italic">% &lt;failure&gt;
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span><span style="color:#008000;font-weight:bold">\makeatother</span>
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">% ====== Misc ======
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#008000">{</span>fancyvrb<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#008000">{</span>csquotes<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#7d9029">[normalem]</span><span style="color:#008000">{</span>ulem<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">% Quotes and verses style
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span><span style="color:#008000;font-weight:bold">\AtBeginEnvironment</span><span style="color:#008000">{</span>quote<span style="color:#008000">}{</span><span style="color:#008000;font-weight:bold">\singlespacing</span><span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\AtBeginEnvironment</span><span style="color:#008000">{</span>verse<span style="color:#008000">}{</span><span style="color:#008000;font-weight:bold">\singlespacing</span><span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">% ====== Text spacing ======
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#008000">{</span>setspace<span style="color:#008000">}</span> <span style="color:#408080;font-style:italic">% String spacing
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span><span style="color:#008000;font-weight:bold">\onehalfspacing</span><span style="color:#008000">{}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#008000">{</span>indentfirst<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\setlength\parindent</span><span style="color:#008000">{</span>0cm<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\setlength\parskip</span><span style="color:#008000">{</span>6pt<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">% ====== Page layout ======
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span><span style="color:#008000;font-weight:bold">\usepackage</span>[ <span style="color:#408080;font-style:italic">% Margins
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span>left=2cm,
</span></span><span style="display:flex;"><span>right=2cm,
</span></span><span style="display:flex;"><span>top=2cm,
</span></span><span style="display:flex;"><span>bottom=2cm
</span></span><span style="display:flex;"><span>]<span style="color:#008000">{</span>geometry<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">% ====== Document sectioning ======
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#008000">{</span>titlesec<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\titleformat*</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\section</span><span style="color:#008000">}{</span><span style="color:#008000;font-weight:bold">\bfseries</span><span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\titleformat*</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\subsection</span><span style="color:#008000">}{</span><span style="color:#008000;font-weight:bold">\bfseries</span><span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\titleformat*</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\subsubsection</span><span style="color:#008000">}{</span><span style="color:#008000;font-weight:bold">\bfseries</span><span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\titleformat*</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\paragraph</span><span style="color:#008000">}{</span><span style="color:#008000;font-weight:bold">\bfseries</span><span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\titleformat*</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\subparagraph</span><span style="color:#008000">}{</span><span style="color:#008000;font-weight:bold">\bfseries\itshape</span><span style="color:#008000">}</span><span style="color:#408080;font-style:italic">% chktex 6
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\titlespacing*</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\section</span><span style="color:#008000">}{</span>0cm<span style="color:#008000">}{</span>12pt<span style="color:#008000">}{</span>3pt<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\titlespacing*</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\subsection</span><span style="color:#008000">}{</span>0cm<span style="color:#008000">}{</span>12pt<span style="color:#008000">}{</span>3pt<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\titlespacing*</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\subsubsection</span><span style="color:#008000">}{</span>0cm<span style="color:#008000">}{</span>12pt<span style="color:#008000">}{</span>0pt<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\titlespacing*</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\paragraph</span><span style="color:#008000">}{</span>0pt<span style="color:#008000">}{</span>6pt<span style="color:#008000">}{</span>6pt<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\titlespacing*</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\subparagraph</span><span style="color:#008000">}{</span>0pt<span style="color:#008000">}{</span>6pt<span style="color:#008000">}{</span>3pt<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\makeatletter</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\providecommand</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\subtitle</span><span style="color:#008000">}</span>[1]<span style="color:#008000">{</span>
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">\apptocmd</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\@</span>title<span style="color:#008000">}{</span><span style="color:#008000;font-weight:bold">\par</span> <span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\large</span> #1 <span style="color:#008000;font-weight:bold">\par</span><span style="color:#008000">}}{}{}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\makeatother</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">% ====== Pandoc =======
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span><span style="color:#ba2121">$</span><span style="color:#008000">if</span><span style="color:#666">(</span><span style="color:#008000">highlighting</span><span style="color:#666">-</span><span style="color:#008000">macros</span><span style="color:#666">)</span><span style="color:#ba2121">$</span>
</span></span><span style="display:flex;"><span><span style="color:#ba2121">$</span><span style="color:#008000">highlighting</span><span style="color:#666">-</span><span style="color:#008000">macros</span><span style="color:#ba2121">$</span>
</span></span><span style="display:flex;"><span><span style="color:#ba2121">$</span><span style="color:#008000">endif</span><span style="color:#ba2121">$</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">% ====== Language ======
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#008000">{</span>polyglossia<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\setdefaultlanguage</span><span style="color:#008000">{</span><span style="color:#ba2121">$</span><span style="color:#008000">main</span><span style="color:#666">-</span><span style="color:#008000">lang</span><span style="color:#ba2121">$</span><span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\setotherlanguage</span><span style="color:#008000">{</span><span style="color:#ba2121">$</span><span style="color:#008000">other</span><span style="color:#666">-</span><span style="color:#008000">lang</span><span style="color:#ba2121">$</span><span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\defaultfontfeatures</span><span style="color:#008000">{</span>Ligatures=<span style="color:#008000">{</span>TeX<span style="color:#008000">}}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\setmainfont</span><span style="color:#008000">{</span>Open Sans<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\newfontfamily\cyrillicfont</span><span style="color:#008000">{</span>Open Sans<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\setmonofont</span><span style="color:#7d9029">[Scale=0.9]</span><span style="color:#008000">{</span>DejaVu Sans Mono<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\newfontfamily</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\cyrillicfonttt</span><span style="color:#008000">}{</span>DejaVu Sans Mono<span style="color:#008000">}</span>[Scale=0.8]
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#008000">{</span>bidi<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\usepackage</span><span style="color:#008000">{</span>microtype<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\setlength</span><span style="color:#008000">{</span><span style="color:#008000;font-weight:bold">\emergencystretch</span><span style="color:#008000">}{</span>3pt<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ba2121">$</span><span style="color:#008000">if</span><span style="color:#666">(</span><span style="color:#008000">title</span><span style="color:#666">)</span><span style="color:#ba2121">$</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\title</span><span style="color:#008000">{</span><span style="color:#ba2121">$</span><span style="color:#008000">title</span><span style="color:#ba2121">$</span><span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#ba2121">$</span><span style="color:#008000">endif</span><span style="color:#ba2121">$</span>
</span></span><span style="display:flex;"><span><span style="color:#ba2121">$</span><span style="color:#008000">if</span><span style="color:#666">(</span><span style="color:#008000">subtitle</span><span style="color:#666">)</span><span style="color:#ba2121">$</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\subtitle</span><span style="color:#008000">{</span><span style="color:#ba2121">$</span><span style="color:#008000">subtitle</span><span style="color:#ba2121">$</span><span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#ba2121">$</span><span style="color:#008000">endif</span><span style="color:#ba2121">$</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ba2121">$</span><span style="color:#008000">if</span><span style="color:#666">(</span><span style="color:#008000">author</span><span style="color:#666">)</span><span style="color:#ba2121">$</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\author</span><span style="color:#008000">{</span><span style="color:#ba2121">$</span><span style="color:#008000">for</span><span style="color:#666">(</span><span style="color:#008000">author</span><span style="color:#666">)</span><span style="color:#ba2121">$$</span><span style="color:#008000">author</span><span style="color:#ba2121">$$</span><span style="color:#008000">sep</span><span style="color:#ba2121">$</span> <span style="color:#008000;font-weight:bold">\and</span> <span style="color:#ba2121">$</span><span style="color:#008000">endfor</span><span style="color:#ba2121">$</span><span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#ba2121">$</span><span style="color:#008000">endif</span><span style="color:#ba2121">$</span>
</span></span><span style="display:flex;"><span><span style="color:#ba2121">$</span><span style="color:#008000">if</span><span style="color:#666">(</span><span style="color:#008000">date</span><span style="color:#666">)</span><span style="color:#ba2121">$</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\date</span><span style="color:#008000">{</span><span style="color:#ba2121">$</span><span style="color:#008000">date</span><span style="color:#ba2121">$</span><span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#ba2121">$</span><span style="color:#008000">endif</span><span style="color:#ba2121">$</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\begin</span><span style="color:#008000">{</span>document<span style="color:#008000">}</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\maketitle</span><span style="color:#008000">{}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ba2121">$</span><span style="color:#008000">body</span><span style="color:#ba2121">$</span>
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">\end</span><span style="color:#008000">{</span>document<span style="color:#008000">}</span>
</span></span></code></pre></div><h3 id="invoking-pandoc">Invoking pandoc</h3>
<p>Now that we have the template, let&rsquo;s save it somewhere and store the path to a variable:</p>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">setq</span> <span style="color:#19177c">my/rdrview-template</span> (<span style="color:#00f">expand-file-name</span>
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span> <span style="color:#19177c">user-emacs-directory</span> <span style="color:#ba2121">&#34;rdrview.tex&#34;</span>)))
</span></span></code></pre></div><p>And let&rsquo;s invoke pandoc. We need to pass the following flags:</p>
<ul>
<li><code>--pdf-engine=xelatex</code>, of course</li>
<li><code>--template &lt;path-to-template&gt;</code>;</li>
<li><code>-o &lt;path-to-pdf&gt;</code>;</li>
<li><code>--variable key=value</code>.</li>
</ul>
<p>In fact, pandoc is a pretty awesome tool in the sense that it allows for feeding custom variables to rich-language templates.</p>
<p>So, the rendering function is as follows:</p>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">cl-defun</span> <span style="color:#19177c">my/rdrview-render</span> (<span style="color:#19177c">content</span> <span style="color:#19177c">type</span> <span style="color:#19177c">variables</span> <span style="color:#19177c">callback</span>
</span></span><span style="display:flex;"><span> <span style="color:#008000">&amp;key</span> <span style="color:#19177c">file-name</span> <span style="color:#19177c">overwrite</span>)
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;Render CONTENT with pandoc.
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">TYPE is a file extension as supported by pandoc, for instance,
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">html or txt. VARIABLES is an alist that is fed into the
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">template. After the rendering is complete successfully, CALLBACK
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">is called with the resulting PDF.
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">FILE-NAME is a path to the resulting PDF. If nil it&#39;s generated
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">randomly.
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">If a file with the given FILE-NAME already exists, the function will
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">invoke CALLBACK straight away without doing the rendering, unless
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">OVERWRITE is non-nil.&#34;</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> <span style="color:#19177c">file-name</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">file-name</span> (<span style="color:#00f">format</span> <span style="color:#ba2121">&#34;/tmp/%d.pdf&#34;</span> (<span style="color:#00f">random</span> <span style="color:#666">100000000</span>))))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> (<span style="color:#19177c">params</span>
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">temp-file-name</span> (<span style="color:#00f">format</span> <span style="color:#ba2121">&#34;/tmp/%d.%s&#34;</span> (<span style="color:#00f">random</span> <span style="color:#666">100000000</span>) <span style="color:#19177c">type</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cl-loop</span> <span style="color:#19177c">for</span> (<span style="color:#19177c">key</span> <span style="color:#666">.</span> <span style="color:#19177c">value</span>) <span style="color:#19177c">in</span> <span style="color:#19177c">variables</span>
</span></span><span style="display:flex;"><span> <span style="color:#008000">when</span> <span style="color:#19177c">value</span>
</span></span><span style="display:flex;"><span> <span style="color:#008000">do</span> (<span style="color:#008000">progn</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">push</span> <span style="color:#ba2121">&#34;--variable&#34;</span> <span style="color:#19177c">params</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">push</span> (<span style="color:#00f">format</span> <span style="color:#ba2121">&#34;%s=%s&#34;</span> <span style="color:#19177c">key</span> <span style="color:#19177c">value</span>) <span style="color:#19177c">params</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">params</span> (<span style="color:#00f">nreverse</span> <span style="color:#19177c">params</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#008000">and</span> (<span style="color:#00f">file-exists-p</span> <span style="color:#19177c">file-name</span>) (<span style="color:#19177c">not</span> <span style="color:#19177c">overwrite</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">funcall</span> <span style="color:#19177c">callback</span> <span style="color:#19177c">file-name</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">with-temp-file</span> <span style="color:#19177c">temp-file-name</span>
</span></span><span style="display:flex;"><span> (<span style="color:#00f">insert</span> <span style="color:#19177c">content</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">proc</span> (<span style="color:#00f">apply</span> <span style="color:#00f">#&#39;start-process</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;pandoc&#34;</span> (<span style="color:#00f">get-buffer-create</span> <span style="color:#ba2121">&#34;*Pandoc*&#34;</span>) <span style="color:#ba2121">&#34;pandoc&#34;</span>
</span></span><span style="display:flex;"><span> <span style="color:#19177c">temp-file-name</span> <span style="color:#ba2121">&#34;-o&#34;</span> <span style="color:#19177c">file-name</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;--pdf-engine=xelatex&#34;</span> <span style="color:#ba2121">&#34;--template&#34;</span> <span style="color:#19177c">my/rdrview-template</span>
</span></span><span style="display:flex;"><span> <span style="color:#19177c">params</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">set-process-sentinel</span>
</span></span><span style="display:flex;"><span> <span style="color:#19177c">proc</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">process</span> <span style="color:#19177c">_msg</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">status</span> (<span style="color:#00f">process-status</span> <span style="color:#19177c">process</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">code</span> (<span style="color:#00f">process-exit-status</span> <span style="color:#19177c">process</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cond</span> ((<span style="color:#008000">and</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">status</span> <span style="color:#19177c">&#39;exit</span>) (<span style="color:#00f">=</span> <span style="color:#19177c">code</span> <span style="color:#666">0</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">progn</span>
</span></span><span style="display:flex;"><span> (<span style="color:#00f">message</span> <span style="color:#ba2121">&#34;Done!&#34;</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">funcall</span> <span style="color:#19177c">callback</span> <span style="color:#19177c">file-name</span>)))
</span></span><span style="display:flex;"><span> ((<span style="color:#008000">or</span> (<span style="color:#008000">and</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">status</span> <span style="color:#19177c">&#39;exit</span>) (<span style="color:#00f">&gt;</span> <span style="color:#19177c">code</span> <span style="color:#666">0</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">eq</span> <span style="color:#19177c">status</span> <span style="color:#19177c">&#39;signal</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#d2413a;font-weight:bold">user-error</span> <span style="color:#ba2121">&#34;Error in pandoc. Check the *Pandoc* buffer&#34;</span>)))))))))
</span></span></code></pre></div><h3 id="opening-elfeed-entries">Opening elfeed entries</h3>
<p>Now we have everything required to open elfeed entries.</p>
<p>Also, in my case elfeed entries come in two languages, so I have to set <code>main-lang</code> and <code>other-lang</code> variables accordingly. Here&rsquo;s the main function:</p>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">setq</span> <span style="color:#19177c">my/elfeed-pdf-dir</span> (<span style="color:#00f">expand-file-name</span> <span style="color:#ba2121">&#34;~/.elfeed/pdf/&#34;</span>))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/elfeed-open-pdf</span> (<span style="color:#19177c">entry</span> <span style="color:#19177c">overwrite</span>)
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;Open the current elfeed ENTRY with a pdf viewer.
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">If OVERWRITE is non-nil, do the rendering even if the resulting
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">PDF already exists.&#34;</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span> (<span style="color:#00f">list</span> <span style="color:#19177c">elfeed-show-entry</span> <span style="color:#19177c">current-prefix-arg</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">authors</span> (<span style="color:#00f">mapcar</span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">m</span>) (<span style="color:#00f">plist-get</span> <span style="color:#19177c">m</span> <span style="color:#008000">:name</span>)) (<span style="color:#19177c">elfeed-meta</span> <span style="color:#19177c">entry</span> <span style="color:#008000">:authors</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">feed-title</span> (<span style="color:#19177c">elfeed-feed-title</span> (<span style="color:#19177c">elfeed-entry-feed</span> <span style="color:#19177c">entry</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">tags</span> (<span style="color:#00f">mapconcat</span> <span style="color:#00f">#&#39;symbol-name</span> (<span style="color:#19177c">elfeed-entry-tags</span> <span style="color:#19177c">entry</span>) <span style="color:#ba2121">&#34;, &#34;</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">date</span> (<span style="color:#00f">format-time-string</span> <span style="color:#ba2121">&#34;%a, %e %b %Y&#34;</span>
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seconds-to-time</span> (<span style="color:#19177c">elfeed-entry-date</span> <span style="color:#19177c">entry</span>))))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">content</span> (<span style="color:#19177c">elfeed-deref</span> (<span style="color:#19177c">elfeed-entry-content</span> <span style="color:#19177c">entry</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">file-name</span> (<span style="color:#00f">concat</span> <span style="color:#19177c">my/elfeed-pdf-dir</span>
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">elfeed-ref-id</span> (<span style="color:#19177c">elfeed-entry-content</span> <span style="color:#19177c">entry</span>))
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;.pdf&#34;</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">main-language</span> <span style="color:#ba2121">&#34;english&#34;</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">other-language</span> <span style="color:#ba2121">&#34;russian&#34;</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> <span style="color:#19177c">content</span>
</span></span><span style="display:flex;"><span> (<span style="color:#d2413a;font-weight:bold">user-error</span> <span style="color:#ba2121">&#34;No content!&#34;</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">subtitle</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cond</span>
</span></span><span style="display:flex;"><span> ((<span style="color:#19177c">seq-empty-p</span> <span style="color:#19177c">authors</span>) <span style="color:#19177c">feed-title</span>)
</span></span><span style="display:flex;"><span> ((<span style="color:#008000">and</span> (<span style="color:#19177c">not</span> (<span style="color:#19177c">seq-empty-p</span> (<span style="color:#00f">car</span> <span style="color:#19177c">authors</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">string-match-p</span> (<span style="color:#00f">regexp-quote</span> (<span style="color:#00f">car</span> <span style="color:#19177c">authors</span>)) <span style="color:#19177c">feed-title</span>)) <span style="color:#19177c">feed-title</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#800">t</span> (<span style="color:#00f">concat</span> (<span style="color:#19177c">string-join</span> <span style="color:#19177c">authors</span> <span style="color:#ba2121">&#34;, &#34;</span>) <span style="color:#ba2121">&#34;\\\\&#34;</span> <span style="color:#19177c">feed-title</span>))))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#00f">member</span> <span style="color:#19177c">&#39;ru</span> (<span style="color:#19177c">elfeed-entry-tags</span> <span style="color:#19177c">entry</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">main-language</span> <span style="color:#ba2121">&#34;russian&#34;</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">other-language</span> <span style="color:#ba2121">&#34;english&#34;</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/rdrview-render</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#19177c">bound-and-true-p</span> <span style="color:#19177c">my/elfeed-show-rdrview-html</span>)
</span></span><span style="display:flex;"><span> <span style="color:#19177c">my/elfeed-show-rdrview-html</span>
</span></span><span style="display:flex;"><span> <span style="color:#19177c">content</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">elfeed-entry-content-type</span> <span style="color:#19177c">entry</span>)
</span></span><span style="display:flex;"><span> <span style="color:#666">`</span>((<span style="color:#19177c">title</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">elfeed-entry-title</span> <span style="color:#19177c">entry</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">subtitle</span> <span style="color:#666">.</span> <span style="color:#666">,</span><span style="color:#19177c">subtitle</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">date</span> <span style="color:#666">.</span> <span style="color:#666">,</span><span style="color:#19177c">date</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">tags</span> <span style="color:#666">.</span> <span style="color:#666">,</span><span style="color:#19177c">tags</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">main-lang</span> <span style="color:#666">.</span> <span style="color:#666">,</span><span style="color:#19177c">main-language</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">other-lang</span> <span style="color:#666">.</span> <span style="color:#666">,</span><span style="color:#19177c">other-language</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">file-name</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">start-process</span> <span style="color:#ba2121">&#34;xdg-open&#34;</span> <span style="color:#800">nil</span> <span style="color:#ba2121">&#34;xdg-open&#34;</span> <span style="color:#19177c">file-name</span>))
</span></span><span style="display:flex;"><span> <span style="color:#008000">:file-name</span> <span style="color:#19177c">file-name</span>
</span></span><span style="display:flex;"><span> <span style="color:#008000">:overwrite</span> <span style="color:#19177c">current-prefix-arg</span>)))
</span></span></code></pre></div><p>If the <code>my/elfeed-show-rdrview-html</code> variable is bound and true, then the content in this buffer was retrieved via <code>rdrview</code>, so we&rsquo;ll use that instead of the output of <code>elfeed-deref</code>.</p>
<p>Now we can open elfeed entries in a PDF viewer, which I find much nicer to read. Given that RSS feeds generally ship with simpler HTML than the regular websites, results usually look awesome:</p>
<figure><img src="/ox-hugo/pdf-prot.png"/>
</figure>
<h3 id="opening-arbitrary-sites">Opening arbitrary sites</h3>
<p>As you may have noticed, we also can display arbitrary web pages with this setup, so let&rsquo;s go ahead and implement that:</p>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/get-languages</span> (<span style="color:#19177c">url</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">main-lang</span> <span style="color:#ba2121">&#34;english&#34;</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">other-lang</span> <span style="color:#ba2121">&#34;russian&#34;</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#19177c">string-match-p</span> (<span style="color:#008000">rx</span> <span style="color:#ba2121">&#34;.ru&#34;</span>) <span style="color:#19177c">url</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">main-lang</span> <span style="color:#ba2121">&#34;russian&#34;</span>
</span></span><span style="display:flex;"><span> <span style="color:#19177c">other-lang</span> <span style="color:#ba2121">&#34;english&#34;</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">list</span> <span style="color:#19177c">main-lang</span> <span style="color:#19177c">other-lang</span>)))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/rdrview-open</span> (<span style="color:#19177c">url</span> <span style="color:#19177c">overwrite</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">url</span> (<span style="color:#00f">read-from-minibuffer</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;URL: &#34;</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#19177c">bound-and-true-p</span> <span style="color:#19177c">elfeed-show-entry</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">elfeed-entry-link</span> <span style="color:#19177c">elfeed-show-entry</span>)))))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#19177c">string-empty-p</span> <span style="color:#19177c">url</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#d2413a;font-weight:bold">user-error</span> <span style="color:#ba2121">&#34;URL is empty&#34;</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">list</span> <span style="color:#19177c">url</span> <span style="color:#19177c">current-prefix-arg</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/rdrview-get</span>
</span></span><span style="display:flex;"><span> <span style="color:#19177c">url</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">res</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">data</span> (<span style="color:#19177c">my/rdrview-parse</span> <span style="color:#19177c">res</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">langs</span> (<span style="color:#19177c">my/get-languages</span> <span style="color:#19177c">url</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/rdrview-render</span>
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">&#39;content</span> <span style="color:#19177c">data</span>)
</span></span><span style="display:flex;"><span> <span style="color:#19177c">&#39;html</span>
</span></span><span style="display:flex;"><span> <span style="color:#666">`</span>((<span style="color:#19177c">title</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">alist-get</span> <span style="color:#19177c">&#39;title</span> <span style="color:#19177c">data</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">subtitle</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">alist-get</span> <span style="color:#19177c">&#39;sitename</span> <span style="color:#19177c">data</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">main-lang</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#00f">nth</span> <span style="color:#666">0</span> <span style="color:#19177c">langs</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">other-lang</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#19177c">langs</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">file-name</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">start-process</span> <span style="color:#ba2121">&#34;xdg-open&#34;</span> <span style="color:#800">nil</span> <span style="color:#ba2121">&#34;xdg-open&#34;</span> <span style="color:#19177c">file-name</span>)))))))
</span></span></code></pre></div><p>Unfortunately, this part doesn&rsquo;t work that well, so we can&rsquo;t just uninstall Firefox or Chromium and browse the web from a PDF viewer.</p>
<p>The most common problem I&rsquo;ve encountered is incorrectly formed pictures, such as <code>.png</code> files without the boundary info. I&rsquo;m sure you&rsquo;ve also come across this if you ever tried to insert a lot of Internet pictures into a LaTeX document.</p>
<p>However, sans the pictures issue, for certain sites like Wikipedia this is usable. For instance, here&rsquo;s how the Emacs page looks:
<img src="/ox-hugo/pdf-emacs.png" alt=""></p>
<h2 id="youtube-transcripts">YouTube transcripts</h2>
<h3 id="getting-subtitles">Getting subtitles</h3>
<p>Finally, let&rsquo;s get to transcripts.</p>
<p>In principle, the YouTube API allows for downloading subtitles, but I&rsquo;ve found <a href="https://github.com/jdepoix/youtube-transcript-api">this awesome Python script</a> which does the same. You can install it from <code>pip</code>, or here&rsquo;s mine <a href="https://github.com/SqrtMinusOne/channel-q/blob/master/youtube-transcript-api.scm">Guix definition</a> once again.</p>
<p>Much like the previous cases, we need to invoke the program and save the output. The <a href="https://en.wikipedia.org/wiki/WebVTT">WebVTT</a> format will work well enough for our purposes. Here comes the function:</p>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">cl-defun</span> <span style="color:#19177c">my/youtube-subtitles-get</span> (<span style="color:#19177c">video-id</span> <span style="color:#19177c">callback</span> <span style="color:#008000">&amp;key</span> <span style="color:#19177c">file-name</span> <span style="color:#19177c">overwrite</span>)
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;Get subtitles for VIDEO-ID in WebVTT format.
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">Call CALLBACK when done.
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">FILE-NAME is a path to the resulting WebVTT file. If nil it&#39;s
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">generated randomly.
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">If a file with the given FILE-NAME already exists, the function will
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">invoke CALLBACK straight away without doing the rendering, unless
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">OVERWRITE is non-nil.&#34;</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> <span style="color:#19177c">file-name</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">file-name</span> (<span style="color:#00f">format</span> <span style="color:#ba2121">&#34;/tmp/%d.vtt&#34;</span> (<span style="color:#00f">random</span> <span style="color:#666">100000000</span>))))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#008000">and</span> (<span style="color:#00f">file-exists-p</span> <span style="color:#19177c">file-name</span>) (<span style="color:#19177c">not</span> <span style="color:#19177c">overwrite</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">funcall</span> <span style="color:#19177c">callback</span> <span style="color:#19177c">file-name</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let*</span> ((<span style="color:#19177c">buffer</span> (<span style="color:#19177c">generate-new-buffer</span> <span style="color:#ba2121">&#34;youtube-transcripts&#34;</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">proc</span> (<span style="color:#00f">start-process</span> <span style="color:#ba2121">&#34;youtube_transcript_api&#34;</span> <span style="color:#19177c">buffer</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;youtube_transcript_api&#34;</span> <span style="color:#19177c">video-id</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;--format&#34;</span> <span style="color:#ba2121">&#34;webvtt&#34;</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">set-process-sentinel</span>
</span></span><span style="display:flex;"><span> <span style="color:#19177c">proc</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">process</span> <span style="color:#19177c">_msg</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">status</span> (<span style="color:#00f">process-status</span> <span style="color:#19177c">process</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">code</span> (<span style="color:#00f">process-exit-status</span> <span style="color:#19177c">process</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cond</span> ((<span style="color:#008000">and</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">status</span> <span style="color:#19177c">&#39;exit</span>) (<span style="color:#00f">=</span> <span style="color:#19177c">code</span> <span style="color:#666">0</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">progn</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">with-current-buffer</span> (<span style="color:#00f">process-buffer</span> <span style="color:#19177c">process</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#00f">buffer-file-name</span> <span style="color:#19177c">file-name</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">save-buffer</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">kill-buffer</span> (<span style="color:#00f">process-buffer</span> <span style="color:#19177c">process</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">funcall</span> <span style="color:#19177c">callback</span> <span style="color:#19177c">file-name</span>)))
</span></span><span style="display:flex;"><span> ((<span style="color:#008000">or</span> (<span style="color:#008000">and</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">status</span> <span style="color:#19177c">&#39;exit</span>) (<span style="color:#00f">&gt;</span> <span style="color:#19177c">code</span> <span style="color:#666">0</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">eq</span> <span style="color:#19177c">status</span> <span style="color:#19177c">&#39;signal</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">err</span> (<span style="color:#008000">with-current-buffer</span> (<span style="color:#00f">process-buffer</span> <span style="color:#19177c">process</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">buffer-string</span>))))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">kill-buffer</span> (<span style="color:#00f">process-buffer</span> <span style="color:#19177c">process</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#d2413a;font-weight:bold">user-error</span> <span style="color:#ba2121">&#34;Error in youtube_transcript_api: %s&#34;</span> <span style="color:#19177c">err</span>)))))))
</span></span><span style="display:flex;"><span> <span style="color:#19177c">proc</span>)))
</span></span></code></pre></div><h3 id="elfeed-and-subed">elfeed and subed</h3>
<p>Now that we have a standalone function, let&rsquo;s invoke it with the current <code>elfeed-show-entry</code>:</p>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">setq</span> <span style="color:#19177c">my/elfeed-srt-dir</span> (<span style="color:#00f">expand-file-name</span> <span style="color:#ba2121">&#34;~/.elfeed/srt/&#34;</span>))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/elfeed-youtube-subtitles</span> (<span style="color:#19177c">entry</span> <span style="color:#008000">&amp;optional</span> <span style="color:#19177c">arg</span>)
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;Get subtitles for the current elfeed ENTRY.
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">Works only in the entry is a YouTube video.
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">If ARG is non-nil, re-fetch the subtitles regardless of whether
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">they were fetched before.&#34;</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span> (<span style="color:#00f">list</span> <span style="color:#19177c">elfeed-show-entry</span> <span style="color:#19177c">current-prefix-arg</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">video-id</span> (<span style="color:#19177c">cadr</span>
</span></span><span style="display:flex;"><span> (<span style="color:#00f">assoc</span> <span style="color:#ba2121">&#34;watch?v&#34;</span>
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">url-parse-query-string</span>
</span></span><span style="display:flex;"><span> (<span style="color:#00f">substring</span>
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">url-filename</span>
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">url-generic-parse-url</span> (<span style="color:#19177c">elfeed-entry-link</span> <span style="color:#19177c">entry</span>)))
</span></span><span style="display:flex;"><span> <span style="color:#666">1</span>))))))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> <span style="color:#19177c">video-id</span>
</span></span><span style="display:flex;"><span> (<span style="color:#d2413a;font-weight:bold">user-error</span> <span style="color:#ba2121">&#34;Can&#39;t get video ID from the entry&#34;</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/youtube-subtitles-get</span>
</span></span><span style="display:flex;"><span> <span style="color:#19177c">video-id</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">file-name</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">with-current-buffer</span> (<span style="color:#19177c">find-file-other-window</span> <span style="color:#19177c">file-name</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq-local</span> <span style="color:#19177c">elfeed-show-entry</span> <span style="color:#19177c">entry</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">goto-char</span> (<span style="color:#00f">point-min</span>))))
</span></span><span style="display:flex;"><span> <span style="color:#008000">:file-name</span> (<span style="color:#00f">concat</span> <span style="color:#19177c">my/elfeed-srt-dir</span>
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">elfeed-ref-id</span> (<span style="color:#19177c">elfeed-entry-content</span> <span style="color:#19177c">entry</span>))
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;.vtt&#34;</span>)
</span></span><span style="display:flex;"><span> <span style="color:#008000">:overwrite</span> <span style="color:#19177c">arg</span>)))
</span></span></code></pre></div><p>That opens up a <code>.vtt</code> buffer with the subtitles for the current video, which means now we can use the functionality of Sacha Chua&rsquo;s awesome package called <a href="https://github.com/sachac/subed">subed</a>.</p>
<p>This package, besides syntax highlighting, allows for controlling the MPV playback, for instance by moving the cursor in the subtitles buffer. Using that requires having the URL of the video in this buffer, which necessitates the line with <code>setq-local</code> in the previous function.</p>
<p>Also, the package launches its own instance of MPV to control it via JSON-IPC, so there seems to be no easy way to integrate it with EMMS. But at least I can reuse the <code>emms-player-mpv-parameters</code> variable, the method of setting which I&rsquo;ve discussed in a <a href="https://sqrtminusone.xyz/posts/2021-09-07-emms/">previous blog post</a>. The function is as follows:</p>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/subed-elfeed</span> (<span style="color:#19177c">entry</span>)
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;Open the video file from elfeed ENTRY in MPV.
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">This has to be launched from inside the subtitles buffer, opened
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">by the </span><span style="color:#19177c">`my/elfeed-youtube-subtitles&#39;</span><span style="color:#ba2121"> function.&#34;</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span> (<span style="color:#00f">list</span> <span style="color:#19177c">elfeed-show-entry</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> <span style="color:#19177c">entry</span>
</span></span><span style="display:flex;"><span> (<span style="color:#d2413a;font-weight:bold">user-error</span> <span style="color:#ba2121">&#34;No entry!&#34;</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#19177c">derived-mode-p</span> <span style="color:#19177c">&#39;subed-mode</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#d2413a;font-weight:bold">user-error</span> <span style="color:#ba2121">&#34;Not subed mode!&#34;</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq-local</span> <span style="color:#19177c">subed-mpv-arguments</span>
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seq-uniq</span>
</span></span><span style="display:flex;"><span> (<span style="color:#00f">append</span> <span style="color:#19177c">subed-mpv-arguments</span> <span style="color:#19177c">emms-player-mpv-parameters</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq-local</span> <span style="color:#19177c">subed-mpv-video-file</span> (<span style="color:#19177c">elfeed-entry-link</span> <span style="color:#19177c">entry</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">subed-mpv--play</span> <span style="color:#19177c">subed-mpv-video-file</span>))
</span></span></code></pre></div><p>And here&rsquo;s how it looks when used (the video on the screenshot is <a href="https://www.youtube.com/watch?v=qjAIXCmhCQQ">this System Crafters&rsquo; stream</a>):
<img src="/ox-hugo/pdf-subed.png" alt=""></p>
<p>Keep in mind that this function has to be launched inside the buffer opened by the <code>my/elfeed-youtube-subtitles</code> function.</p>
</div>
</div><div id="footer" class="mb-5">
<hr>
<div class="container text-center">
</div>
<div class="container text-center">
<a href="https://sqrtminusone.xyz/" title="Pavel Korytov, 2022"><small>Pavel Korytov, 2022</small></a>
</div>
</div>
</body>
</html>

View file

@ -63,6 +63,8 @@
<h1>Posts</h1>
<ul>
<li><a href="https://sqrtminusone.xyz/posts/2022-05-09-pdf/">2022-05-10 | Extending elfeed entries with a PDF viewer and subtitles fetcher</a></li>
<li><a href="https://sqrtminusone.xyz/posts/2022-02-12-literate/">2022-02-12 | A few cases of literate configuration</a></li>
<li><a href="https://sqrtminusone.xyz/posts/2022-01-03-exwm/">2022-01-03 | Using EXWM and perspective.el on multi-monitor setup</a></li>

View file

@ -6,7 +6,589 @@
<description>Recent content in Posts on SqrtMinusOne</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language>
<lastBuildDate>Sat, 12 Feb 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://sqrtminusone.xyz/posts/index.xml" rel="self" type="application/rss+xml" />
<lastBuildDate>Tue, 10 May 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://sqrtminusone.xyz/posts/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Extending elfeed entries with a PDF viewer and subtitles fetcher</title>
<link>https://sqrtminusone.xyz/posts/2022-05-09-pdf/</link>
<pubDate>Tue, 10 May 2022 00:00:00 +0000</pubDate>
<guid>https://sqrtminusone.xyz/posts/2022-05-09-pdf/</guid>
<content type="html">
&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/skeeto/elfeed&#34;&gt;elfeed&lt;/a&gt; is one of the most popular Emacs packages, and it&amp;rsquo;s also one in which I ended up investing a lot of effort. I wrote about the &lt;a href=&#34;https://sqrtminusone.xyz/posts/2021-09-07-emms/&#34;&gt;EMMS integration&lt;/a&gt; and even made a &lt;a href=&#34;https://github.com/SqrtMinusOne/elfeed-summary&#34;&gt;custom frontpage&lt;/a&gt; to my liking.&lt;/p&gt;
&lt;p&gt;However, sites frequently limit the amount of information shipped in the RSS feed. Oftentimes the entry doesn&amp;rsquo;t include the entire content (of which, by the way, this blog was guilty).&lt;/p&gt;
&lt;p&gt;Also, there&amp;rsquo;s non-textual content, of which in this post I consider YouTube subscriptions. It&amp;rsquo;s possible to watch YouTube from elfeed, for instance with the aforementioned EMMS integration, but we can do more.&lt;/p&gt;
&lt;p&gt;So, the plan for the post is to discuss:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;using &lt;a href=&#34;https://github.com/eafer/rdrview&#34;&gt;rdrview&lt;/a&gt; to extend elfeed articles;&lt;/li&gt;
&lt;li&gt;using &lt;a href=&#34;https://pandoc.org&#34;&gt;pandoc&lt;/a&gt; and LaTeX to convert articles to PDFs;&lt;/li&gt;
&lt;li&gt;using &lt;a href=&#34;https://github.com/jdepoix/youtube-transcript-api&#34;&gt;youtube-transcript-api&lt;/a&gt; to download YouTube subtitles and &lt;a href=&#34;https://github.com/sachac/subed&#34;&gt;subed&lt;/a&gt; to control the MPV playback;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also, heads up! You&amp;rsquo;ll need lexical binding enabled for the code blocks. The easiest way to accomplish this is to add the following to the first line of &lt;code&gt;init.el&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;;;; -*- lexical-binding: t -*-&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;rdrview&#34;&gt;rdrview&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/eafer/rdrview&#34;&gt;rdrview&lt;/a&gt; is a command-line tool to strip webpages from clutter, extracting only parts related to the actual content. It&amp;rsquo;s a standalone port of the corresponding feature of Firefox, called &lt;a href=&#34;https://support.mozilla.org/en-US/kb/firefox-reader-view-clutter-free-web-pages&#34;&gt;Reader View&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It seems like the tool &lt;a href=&#34;https://repology.org/project/rdrview/versions&#34;&gt;isn&amp;rsquo;t available&lt;/a&gt; in a whole lot of package repositories, but it&amp;rsquo;s pretty easy to compile. I&amp;rsquo;ve put together a &lt;a href=&#34;https://github.com/SqrtMinusOne/channel-q/blob/master/rdrview.scm&#34;&gt;Guix definition&lt;/a&gt;, which &lt;em&gt;one day&lt;/em&gt; I&amp;rsquo;ll submit to upstream.&lt;/p&gt;
&lt;h3 id=&#34;integrating-rdrview-with-emacs&#34;&gt;Integrating rdrview with Emacs&lt;/h3&gt;
&lt;p&gt;Let&amp;rsquo;s start by integrating &lt;code&gt;rdrview&lt;/code&gt; with Emacs. In the general case, we want to fetch both metadata and the actual content from the page.&lt;/p&gt;
&lt;p&gt;However, the interface of &lt;code&gt;rdrview&lt;/code&gt; is a bit awkward in this part, so we have the following options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;call &lt;code&gt;rdrview&lt;/code&gt; two times: with &lt;code&gt;-M&lt;/code&gt; flag to fetch the metadata, and without the flag to fetch the HTML;&lt;/li&gt;
&lt;li&gt;call &lt;code&gt;rdrview&lt;/code&gt; with &lt;code&gt;-T&lt;/code&gt; flag to append the metadata to the resulting HTML.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;ve decided to go with the second option. Here is a function that calls rdrview with the required flags:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;defun&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-get&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;callback&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Get the rdrview representation of URL.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;Call CALLBACK with the output.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let*&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;buffer&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;generate-new-buffer&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;rdrview&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;proc&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;start-process&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;rdrview&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;buffer&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;rdrview&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-T&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;title,sitename,body&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-H&amp;#34;&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;set-process-sentinel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;proc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;lambda&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;_msg&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;code&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-exit-status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;cond&lt;/span&gt; ((&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;exit&lt;/span&gt;) (&lt;span style=&#34;color:#00f&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;code&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;funcall&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;callback&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;with-current-buffer&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-buffer&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;buffer-string&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;kill-buffer&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-buffer&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;))) )
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ((&lt;span style=&#34;color:#008000&#34;&gt;or&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;exit&lt;/span&gt;) (&lt;span style=&#34;color:#00f&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;code&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;signal&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;err&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;with-current-buffer&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-buffer&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;buffer-string&lt;/span&gt;))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;kill-buffer&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-buffer&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#d2413a;font-weight:bold&#34;&gt;user-error&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Error in rdrview: %s&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;err&lt;/span&gt;)))))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;proc&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The function calls &lt;code&gt;callback&lt;/code&gt; with the output of &lt;code&gt;rdrview&lt;/code&gt;. This usually doesn&amp;rsquo;t take long, but it&amp;rsquo;s still nice to avoid freezing Emacs that way.&lt;/p&gt;
&lt;p&gt;Now we have to parse the output. The &lt;code&gt;-T&lt;/code&gt; flag puts the title in the &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; tag, the site name site in the &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt; tag, and the content in a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;. What&amp;rsquo;s more, headers of the content are often shifted, e.g. the top-level header may well end up being and &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;h3&amp;gt;&lt;/code&gt;, which does not look great in LaTeX.&lt;/p&gt;
&lt;p&gt;With that said, here&amp;rsquo;s a function that does the required changes:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;defun&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-parse&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;dom-string&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;dom&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;with-temp-buffer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;dom-string&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;libxml-parse-html-region&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;point-min&lt;/span&gt;) (&lt;span style=&#34;color:#00f&#34;&gt;point-max&lt;/span&gt;)))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;title&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;sitename&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;dolist&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;child&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;dom-children&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;dom-by-id&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;dom&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;readability-page-1&amp;#34;&lt;/span&gt;))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;when&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;listp&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;child&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;cond&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ((&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;child&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;title&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;dom-text&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;child&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ((&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;child&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h2&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;sitename&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;dom-text&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;child&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ((&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;child&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;div&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;child&lt;/span&gt;)))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;while&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;not&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;dom-by-tag&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h1&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;dom-search&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;lambda&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;el&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;when&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;listp&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;el&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;pcase&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;el&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h2&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setf&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;el&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h1&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h3&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setf&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;el&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h2&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h4&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setf&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;el&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h3&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h5&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setf&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;el&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h4&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h6&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setf&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;el&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;h5&lt;/span&gt;))))))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#666&#34;&gt;`&lt;/span&gt;((&lt;span style=&#34;color:#19177c&#34;&gt;title&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;title&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;sitename&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;sitename&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;with-temp-buffer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;dom-print&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;buffer-string&lt;/span&gt;)))))))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;using-rdrview-from-elfeed&#34;&gt;Using rdrview from elfeed&lt;/h3&gt;
&lt;p&gt;Because I didn&amp;rsquo;t find a smart way to advise the desired behavior into elfeed, here&amp;rsquo;s a modification of the &lt;code&gt;elfeed-show-refresh--mail-style&lt;/code&gt; function with two changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;it uses &lt;code&gt;rdrview&lt;/code&gt; to fetch the HTML;&lt;/li&gt;
&lt;li&gt;it saves the resulting HTML into a buffer-local variable (we&amp;rsquo;ll need that later).&lt;/li&gt;
&lt;/ul&gt;
&lt;!--listend--&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;defvar-local&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/elfeed-show-rdrview-html&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;nil&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;defun&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-elfeed-show&lt;/span&gt; ()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;interactive&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;unless&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#d2413a;font-weight:bold&#34;&gt;user-error&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;No elfeed entry in this buffer!&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-get&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-link&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;lambda&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;result&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let*&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;data&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-parse&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;result&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;inhibit-read-only&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;t&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;title&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-title&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;date&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;seconds-to-time&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-date&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;authors&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-meta&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;:authors&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;link&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-link&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;tags&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-tags&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;tagsstr&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;mapconcat&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;#&amp;#39;symbol-name&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;tags&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;, &amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;nicedate&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format-time-string&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;%a, %e %b %Y %T %Z&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;date&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;alist-get&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;content&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;data&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;feed&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-feed&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;feed-title&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-feed-title&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;feed&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;base&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;feed&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-compute-base&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-feed-url&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;feed&lt;/span&gt;)))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;erase-buffer&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Title: %s\n&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;title&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-subject&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;when&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry-author&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;dolist&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;author&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;authors&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;formatted&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed--show-format-author&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;author&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Author: %s\n&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;formatted&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-to&lt;/span&gt;))))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Date: %s\n&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;nicedate&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-other&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Feed: %s\n&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;feed-title&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-other&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;when&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;tags&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Tags: %s\n&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;tagsstr&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-other&lt;/span&gt;))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Link: &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-name&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-insert-link&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;link&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;link&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;\n&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;cl-loop&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;enclosure&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;in&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-enclosures&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;do&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Enclosure: &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;message-header-name&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;do&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-insert-link&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;enclosure&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;do&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;\n&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;\n&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-insert-html&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;base&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;propertize&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;(empty)\n&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;face&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;italic&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq-local&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/elfeed-show-rdrview-html&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;goto-char&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;point-min&lt;/span&gt;))))))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That way, calling &lt;code&gt;M-x my/rdrview-elfeed-show&lt;/code&gt; replaces the original content with one from &lt;code&gt;rdrview&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;how-well-does-it-work&#34;&gt;How well does it work?&lt;/h3&gt;
&lt;p&gt;Rather ironically, it works well with sites that already ship with proper RSS, like &lt;a href=&#34;https://protesilaos.com/&#34;&gt;Protesilaos Stavrou&amp;rsquo;s&lt;/a&gt; or &lt;a href=&#34;https://karthinks.com/software/simple-folding-with-hideshow/&#34;&gt;Karthik Chikmagalur&amp;rsquo;s&lt;/a&gt; blogs or &lt;a href=&#34;https://www.theatlantic.com/world/&#34;&gt;The Atlantic&lt;/a&gt; magazine.&lt;/p&gt;
&lt;p&gt;Of my other subscriptions, it does a pretty good job with &lt;a href=&#34;https://www.theverge.com/&#34;&gt;The Verge&lt;/a&gt;, which by default sends entries truncated by the words &amp;ldquo;Read the full article&amp;rdquo;. For &lt;a href=&#34;https://arstechnica.com/&#34;&gt;Ars Technica&lt;/a&gt;, it works only if the story is not large enough, otherwise the site returns its HTML-based pagination interface.&lt;/p&gt;
&lt;p&gt;For paywalled sites such as &lt;a href=&#34;https://www.nytimes.com/&#34;&gt;New York Times&lt;/a&gt; or &lt;a href=&#34;https://www.economist.com/&#34;&gt;The Economist&lt;/a&gt;, this usually doesn&amp;rsquo;t work (by the way, what&amp;rsquo;s the problem with providing individual RSS feeds for subscribers?). If you need this kind of thing, I&amp;rsquo;d suggest using the &lt;a href=&#34;https://github.com/RSS-Bridge/rss-bridge&#34;&gt;RSS-Bridge&lt;/a&gt; project. And if something is not available, contributing business logic there definitely makes more sense than implementing workarounds in Emacs Lisp.&lt;/p&gt;
&lt;h2 id=&#34;latex-and-pandoc&#34;&gt;LaTeX and pandoc&lt;/h2&gt;
&lt;p&gt;However, I also find that I&amp;rsquo;m not really a fan of reading articles from Emacs. Somehow what works for program code doesn&amp;rsquo;t work that well for natural text. When I have to, I usually switch the Emacs theme to a light one.&lt;/p&gt;
&lt;p&gt;But the best solution I&amp;rsquo;ve found so far is to render the required articles as PDFs. I may even print out some large articles I want to read.&lt;/p&gt;
&lt;h3 id=&#34;template&#34;&gt;Template&lt;/h3&gt;
&lt;p&gt;So first, we need a LaTeX template. Pandoc already ships with one, but I don&amp;rsquo;t like it too much, so I&amp;rsquo;ve put up a template from my LaTeX styles, targeting my preferred XeLaTeX engine.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll add the code here for completeness&amp;rsquo; sake, but if you use LaTeX, you&amp;rsquo;ll probably be better off using your own setup. Be sure to define the following variables:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;main-lang&lt;/code&gt; and &lt;code&gt;other-lang&lt;/code&gt; for polyglossia (or remove them if you have only one language)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;title&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subtitle&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;author&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;date&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;!--listend--&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-latex&#34; data-lang=&#34;latex&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\documentclass&lt;/span&gt;&lt;span style=&#34;color:#7d9029&#34;&gt;[a4paper, 12pt]&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;extarticle&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== Math ======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;amsmath&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% Math stuff
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;amssymb&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;mathspec&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== List ======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;enumitem&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;etoolbox&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlist&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;nosep, topsep=-10pt&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% Remove sep-s beetween list elements
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlist&lt;/span&gt;&lt;span style=&#34;color:#7d9029&#34;&gt;[enumerate]&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;label*=&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\arabic*&lt;/span&gt;.&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlist&lt;/span&gt;&lt;span style=&#34;color:#7d9029&#34;&gt;[enumerate,1]&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;after=&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\vspace&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;0.5&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\baselineskip&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlist&lt;/span&gt;&lt;span style=&#34;color:#7d9029&#34;&gt;[itemize,1]&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;after=&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\vspace&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;0.5&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\baselineskip&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\AtBeginEnvironment&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;itemize&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;%
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlist&lt;/span&gt;&lt;span style=&#34;color:#7d9029&#34;&gt;[enumerate]&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;label=&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\arabic*&lt;/span&gt;.&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlist&lt;/span&gt;&lt;span style=&#34;color:#7d9029&#34;&gt;[enumerate,1]&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;after=&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\vspace&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;0&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\baselineskip&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\providecommand&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\tightlist&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;%
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlength&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\itemsep&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;0pt&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlength&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\parskip&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;0pt&lt;span style=&#34;color:#008000&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== Link ======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;xcolor&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;hyperref&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% Links
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\hypersetup&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; colorlinks=true,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; citecolor=blue,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; filecolor=blue,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; linkcolor=blue,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; urlcolor=blue,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% Linebreaks for urls
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\expandafter\def\expandafter\UrlBreaks\expandafter&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\UrlBreaks&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% save the current one
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;%
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;%
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\do\u\do\v\do\w\do\x\do\y\do\z\do\A\do\B\do\C\do\D&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;%
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M\do\N&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;%
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;%
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\do\Y\do\Z&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== Table ======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;array&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;booktabs&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;longtable&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;multirow&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;calc&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== Images ======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;graphicx&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% Pictures
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\makeatletter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\def\maxwidth&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\ifdim\Gin&lt;/span&gt;@nat@width&amp;gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\linewidth\linewidth\else\Gin&lt;/span&gt;@nat@width&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\fi&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\def\maxheight&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\ifdim\Gin&lt;/span&gt;@nat@height&amp;gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\textheight\textheight\else\Gin&lt;/span&gt;@nat@height&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\fi&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\makeatother&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% Scale images if necessary, so that they will not overflow the page
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% margins by default, and it is still possible to overwrite the defaults
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% using explicit options in \includegraphics[width, height, ...]{}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setkeys&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;Gin&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;width=&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\maxwidth&lt;/span&gt;,height=&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\maxheight&lt;/span&gt;,keepaspectratio&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% Set default figure placement to htbp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\makeatletter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\def\fps&lt;/span&gt;@figure&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;htbp&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\makeatother&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\newcommand&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\noimage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;%
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlength&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\fboxsep&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;-&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\fboxrule&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;%
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\fbox&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\phantom&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\rule&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;150pt&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;100pt&lt;span style=&#34;color:#008000&#34;&gt;}}}&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% Framed box
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\makeatletter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\patchcmd&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\Gin&lt;/span&gt;@ii&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\begingroup&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% &amp;lt;search&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\begingroup\renewcommand&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\@&lt;/span&gt;latex@error&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;[2]&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\noimage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}}&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% &amp;lt;replace&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;{}&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% &amp;lt;success&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;{}&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% &amp;lt;failure&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\makeatother&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== Misc ======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;fancyvrb&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;csquotes&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#7d9029&#34;&gt;[normalem]&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;ulem&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% Quotes and verses style
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\AtBeginEnvironment&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;quote&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\singlespacing&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\AtBeginEnvironment&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;verse&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\singlespacing&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== Text spacing ======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;setspace&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% String spacing
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\onehalfspacing&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;indentfirst&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlength\parindent&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;0cm&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlength\parskip&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;6pt&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== Page layout ======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;[ &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% Margins
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;left=2cm,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;right=2cm,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;top=2cm,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bottom=2cm
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;]&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;geometry&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== Document sectioning ======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;titlesec&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\titleformat*&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\section&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\bfseries&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\titleformat*&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\subsection&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\bfseries&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\titleformat*&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\subsubsection&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\bfseries&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\titleformat*&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\paragraph&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\bfseries&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\titleformat*&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\subparagraph&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\bfseries\itshape&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% chktex 6
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\titlespacing*&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\section&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;0cm&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;12pt&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;3pt&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\titlespacing*&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\subsection&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;0cm&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;12pt&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;3pt&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\titlespacing*&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\subsubsection&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;0cm&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;12pt&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;0pt&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\titlespacing*&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\paragraph&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;0pt&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;6pt&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;6pt&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\titlespacing*&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\subparagraph&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;0pt&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;6pt&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;3pt&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\makeatletter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\providecommand&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\subtitle&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;[1]&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\apptocmd&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\@&lt;/span&gt;title&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\par&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\large&lt;/span&gt; #1 &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\par&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}}{}{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\makeatother&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== Pandoc =======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;if&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;highlighting&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;macros&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;highlighting&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;macros&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;endif&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;% ====== Language ======
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;polyglossia&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setdefaultlanguage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;main&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;lang&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setotherlanguage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;other&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;lang&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\defaultfontfeatures&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;Ligatures=&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;TeX&lt;span style=&#34;color:#008000&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setmainfont&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;Open Sans&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\newfontfamily\cyrillicfont&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;Open Sans&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setmonofont&lt;/span&gt;&lt;span style=&#34;color:#7d9029&#34;&gt;[Scale=0.9]&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;DejaVu Sans Mono&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\newfontfamily&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\cyrillicfonttt&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;DejaVu Sans Mono&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;[Scale=0.8]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;bidi&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\usepackage&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;microtype&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\setlength&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\emergencystretch&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}{&lt;/span&gt;3pt&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;if&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;title&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\title&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;title&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;endif&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;if&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;subtitle&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\subtitle&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;subtitle&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;endif&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;if&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;author&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\author&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;for&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;author&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;author&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;sep&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\and&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;endfor&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;endif&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;if&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;date&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\date&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;date&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;endif&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\begin&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;document&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\maketitle&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;body&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;\end&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;{&lt;/span&gt;document&lt;span style=&#34;color:#008000&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;invoking-pandoc&#34;&gt;Invoking pandoc&lt;/h3&gt;
&lt;p&gt;Now that we have the template, let&amp;rsquo;s save it somewhere and store the path to a variable:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-template&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;expand-file-name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;concat&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;user-emacs-directory&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;rdrview.tex&amp;#34;&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And let&amp;rsquo;s invoke pandoc. We need to pass the following flags:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--pdf-engine=xelatex&lt;/code&gt;, of course&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--template &amp;lt;path-to-template&amp;gt;&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-o &amp;lt;path-to-pdf&amp;gt;&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--variable key=value&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In fact, pandoc is a pretty awesome tool in the sense that it allows for feeding custom variables to rich-language templates.&lt;/p&gt;
&lt;p&gt;So, the rendering function is as follows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;cl-defun&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-render&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;variables&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;callback&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;&amp;amp;key&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;overwrite&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Render CONTENT with pandoc.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;TYPE is a file extension as supported by pandoc, for instance,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;html or txt. VARIABLES is an alist that is fed into the
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;template. After the rendering is complete successfully, CALLBACK
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;is called with the resulting PDF.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;FILE-NAME is a path to the resulting PDF. If nil it&amp;#39;s generated
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;randomly.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;If a file with the given FILE-NAME already exists, the function will
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;invoke CALLBACK straight away without doing the rendering, unless
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;OVERWRITE is non-nil.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;unless&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;/tmp/%d.pdf&amp;#34;&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;random&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;100000000&lt;/span&gt;))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;params&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;temp-file-name&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;/tmp/%d.%s&amp;#34;&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;random&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;100000000&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;type&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;cl-loop&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;key&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;value&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;variables&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;when&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;do&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;push&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--variable&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;params&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;push&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;%s=%s&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;key&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;value&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;params&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;params&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;nreverse&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;params&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;file-exists-p&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;) (&lt;span style=&#34;color:#19177c&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;overwrite&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;funcall&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;callback&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;with-temp-file&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;temp-file-name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;insert&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;proc&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;apply&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;#&amp;#39;start-process&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;pandoc&amp;#34;&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;get-buffer-create&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;*Pandoc*&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;pandoc&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;temp-file-name&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-o&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--pdf-engine=xelatex&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--template&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-template&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;params&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;set-process-sentinel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;proc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;lambda&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;_msg&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;code&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-exit-status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;cond&lt;/span&gt; ((&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;exit&lt;/span&gt;) (&lt;span style=&#34;color:#00f&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;code&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;message&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Done!&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;funcall&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;callback&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ((&lt;span style=&#34;color:#008000&#34;&gt;or&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;exit&lt;/span&gt;) (&lt;span style=&#34;color:#00f&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;code&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;signal&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#d2413a;font-weight:bold&#34;&gt;user-error&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Error in pandoc. Check the *Pandoc* buffer&amp;#34;&lt;/span&gt;)))))))))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;opening-elfeed-entries&#34;&gt;Opening elfeed entries&lt;/h3&gt;
&lt;p&gt;Now we have everything required to open elfeed entries.&lt;/p&gt;
&lt;p&gt;Also, in my case elfeed entries come in two languages, so I have to set &lt;code&gt;main-lang&lt;/code&gt; and &lt;code&gt;other-lang&lt;/code&gt; variables accordingly. Here&amp;rsquo;s the main function:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/elfeed-pdf-dir&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;expand-file-name&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;~/.elfeed/pdf/&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;defun&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/elfeed-open-pdf&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;overwrite&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Open the current elfeed ENTRY with a pdf viewer.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;If OVERWRITE is non-nil, do the rendering even if the resulting
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;PDF already exists.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;interactive&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;list&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;current-prefix-arg&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;authors&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;mapcar&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;lambda&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;m&lt;/span&gt;) (&lt;span style=&#34;color:#00f&#34;&gt;plist-get&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;m&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;:name&lt;/span&gt;)) (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-meta&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;:authors&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;feed-title&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-feed-title&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-feed&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;tags&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;mapconcat&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;#&amp;#39;symbol-name&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-tags&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;) &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;, &amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;date&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format-time-string&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;%a, %e %b %Y&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;seconds-to-time&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-date&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-deref&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-content&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;concat&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/elfeed-pdf-dir&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-ref-id&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-content&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;.pdf&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;main-language&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;english&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;other-language&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;russian&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;unless&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#d2413a;font-weight:bold&#34;&gt;user-error&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;No content!&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;subtitle&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;cond&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;seq-empty-p&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;authors&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;feed-title&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ((&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;not&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;seq-empty-p&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;authors&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;string-match-p&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;regexp-quote&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;authors&lt;/span&gt;)) &lt;span style=&#34;color:#19177c&#34;&gt;feed-title&lt;/span&gt;)) &lt;span style=&#34;color:#19177c&#34;&gt;feed-title&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#800&#34;&gt;t&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;concat&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;string-join&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;authors&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;, &amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;\\\\&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;feed-title&lt;/span&gt;))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;when&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;member&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;ru&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-tags&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;main-language&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;russian&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;other-language&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;english&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-render&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;bound-and-true-p&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/elfeed-show-rdrview-html&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/elfeed-show-rdrview-html&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;content&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-content-type&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#666&#34;&gt;`&lt;/span&gt;((&lt;span style=&#34;color:#19177c&#34;&gt;title&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;(&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-title&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;subtitle&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;subtitle&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;date&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;date&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;tags&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;tags&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;main-lang&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;main-language&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;other-lang&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;other-language&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;lambda&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;start-process&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;xdg-open&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;nil&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;xdg-open&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;:file-name&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;:overwrite&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;current-prefix-arg&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If the &lt;code&gt;my/elfeed-show-rdrview-html&lt;/code&gt; variable is bound and true, then the content in this buffer was retrieved via &lt;code&gt;rdrview&lt;/code&gt;, so we&amp;rsquo;ll use that instead of the output of &lt;code&gt;elfeed-deref&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Now we can open elfeed entries in a PDF viewer, which I find much nicer to read. Given that RSS feeds generally ship with simpler HTML than the regular websites, results usually look awesome:&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://sqrtminusone.xyz/ox-hugo/pdf-prot.png&#34;/&gt;
&lt;/figure&gt;
&lt;h3 id=&#34;opening-arbitrary-sites&#34;&gt;Opening arbitrary sites&lt;/h3&gt;
&lt;p&gt;As you may have noticed, we also can display arbitrary web pages with this setup, so let&amp;rsquo;s go ahead and implement that:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;defun&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/get-languages&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;url&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;main-lang&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;english&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;other-lang&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;russian&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;when&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;string-match-p&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;rx&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;.ru&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#19177c&#34;&gt;url&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;main-lang&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;russian&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;other-lang&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;english&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;list&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;main-lang&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;other-lang&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;defun&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-open&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;overwrite&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;interactive&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;url&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;read-from-minibuffer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;URL: &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;bound-and-true-p&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-link&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;)))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;when&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;string-empty-p&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;url&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#d2413a;font-weight:bold&#34;&gt;user-error&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;URL is empty&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;list&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;current-prefix-arg&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-get&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;url&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;lambda&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;res&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;data&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-parse&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;res&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;langs&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;my/get-languages&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;url&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;my/rdrview-render&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;alist-get&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;content&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;data&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;html&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#666&#34;&gt;`&lt;/span&gt;((&lt;span style=&#34;color:#19177c&#34;&gt;title&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;(&lt;span style=&#34;color:#19177c&#34;&gt;alist-get&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;title&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;data&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;subtitle&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;(&lt;span style=&#34;color:#19177c&#34;&gt;alist-get&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;sitename&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;data&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;main-lang&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;(&lt;span style=&#34;color:#00f&#34;&gt;nth&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;langs&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;other-lang&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;,&lt;/span&gt;(&lt;span style=&#34;color:#00f&#34;&gt;nth&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;langs&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;lambda&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;start-process&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;xdg-open&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;nil&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;xdg-open&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;)))))))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Unfortunately, this part doesn&amp;rsquo;t work that well, so we can&amp;rsquo;t just uninstall Firefox or Chromium and browse the web from a PDF viewer.&lt;/p&gt;
&lt;p&gt;The most common problem I&amp;rsquo;ve encountered is incorrectly formed pictures, such as &lt;code&gt;.png&lt;/code&gt; files without the boundary info. I&amp;rsquo;m sure you&amp;rsquo;ve also come across this if you ever tried to insert a lot of Internet pictures into a LaTeX document.&lt;/p&gt;
&lt;p&gt;However, sans the pictures issue, for certain sites like Wikipedia this is usable. For instance, here&amp;rsquo;s how the Emacs page looks:
&lt;img src=&#34;https://sqrtminusone.xyz/ox-hugo/pdf-emacs.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;youtube-transcripts&#34;&gt;YouTube transcripts&lt;/h2&gt;
&lt;h3 id=&#34;getting-subtitles&#34;&gt;Getting subtitles&lt;/h3&gt;
&lt;p&gt;Finally, let&amp;rsquo;s get to transcripts.&lt;/p&gt;
&lt;p&gt;In principle, the YouTube API allows for downloading subtitles, but I&amp;rsquo;ve found &lt;a href=&#34;https://github.com/jdepoix/youtube-transcript-api&#34;&gt;this awesome Python script&lt;/a&gt; which does the same. You can install it from &lt;code&gt;pip&lt;/code&gt;, or here&amp;rsquo;s mine &lt;a href=&#34;https://github.com/SqrtMinusOne/channel-q/blob/master/youtube-transcript-api.scm&#34;&gt;Guix definition&lt;/a&gt; once again.&lt;/p&gt;
&lt;p&gt;Much like the previous cases, we need to invoke the program and save the output. The &lt;a href=&#34;https://en.wikipedia.org/wiki/WebVTT&#34;&gt;WebVTT&lt;/a&gt; format will work well enough for our purposes. Here comes the function:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;cl-defun&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/youtube-subtitles-get&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;video-id&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;callback&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;&amp;amp;key&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;overwrite&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Get subtitles for VIDEO-ID in WebVTT format.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;Call CALLBACK when done.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;FILE-NAME is a path to the resulting WebVTT file. If nil it&amp;#39;s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;generated randomly.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;If a file with the given FILE-NAME already exists, the function will
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;invoke CALLBACK straight away without doing the rendering, unless
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;OVERWRITE is non-nil.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;unless&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;format&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;/tmp/%d.vtt&amp;#34;&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;random&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;100000000&lt;/span&gt;))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;file-exists-p&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;) (&lt;span style=&#34;color:#19177c&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;overwrite&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;funcall&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;callback&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let*&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;buffer&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;generate-new-buffer&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;youtube-transcripts&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;proc&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;start-process&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;youtube_transcript_api&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;buffer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;youtube_transcript_api&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;video-id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--format&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;webvtt&amp;#34;&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;set-process-sentinel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;proc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;lambda&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;_msg&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;code&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-exit-status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;cond&lt;/span&gt; ((&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;exit&lt;/span&gt;) (&lt;span style=&#34;color:#00f&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;code&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;with-current-buffer&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-buffer&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;buffer-file-name&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;save-buffer&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;kill-buffer&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-buffer&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;funcall&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;callback&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ((&lt;span style=&#34;color:#008000&#34;&gt;or&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;and&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;exit&lt;/span&gt;) (&lt;span style=&#34;color:#00f&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;code&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;eq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;signal&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;err&lt;/span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;with-current-buffer&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-buffer&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;buffer-string&lt;/span&gt;))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;kill-buffer&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;process-buffer&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;process&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#d2413a;font-weight:bold&#34;&gt;user-error&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Error in youtube_transcript_api: %s&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;err&lt;/span&gt;)))))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;proc&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;elfeed-and-subed&#34;&gt;elfeed and subed&lt;/h3&gt;
&lt;p&gt;Now that we have a standalone function, let&amp;rsquo;s invoke it with the current &lt;code&gt;elfeed-show-entry&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;setq&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/elfeed-srt-dir&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;expand-file-name&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;~/.elfeed/srt/&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;defun&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/elfeed-youtube-subtitles&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;&amp;amp;optional&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;arg&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Get subtitles for the current elfeed ENTRY.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;Works only in the entry is a YouTube video.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;If ARG is non-nil, re-fetch the subtitles regardless of whether
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;they were fetched before.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;interactive&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;list&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;current-prefix-arg&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#19177c&#34;&gt;video-id&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;cadr&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;assoc&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;watch?v&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;url-parse-query-string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;substring&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;url-filename&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;url-generic-parse-url&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-link&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;))))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;unless&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;video-id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#d2413a;font-weight:bold&#34;&gt;user-error&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Can&amp;#39;t get video ID from the entry&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;my/youtube-subtitles-get&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;video-id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;lambda&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;with-current-buffer&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;find-file-other-window&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;file-name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq-local&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;goto-char&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;point-min&lt;/span&gt;))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;:file-name&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;concat&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/elfeed-srt-dir&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-ref-id&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-content&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;.vtt&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#008000&#34;&gt;:overwrite&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;arg&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That opens up a &lt;code&gt;.vtt&lt;/code&gt; buffer with the subtitles for the current video, which means now we can use the functionality of Sacha Chua&amp;rsquo;s awesome package called &lt;a href=&#34;https://github.com/sachac/subed&#34;&gt;subed&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This package, besides syntax highlighting, allows for controlling the MPV playback, for instance by moving the cursor in the subtitles buffer. Using that requires having the URL of the video in this buffer, which necessitates the line with &lt;code&gt;setq-local&lt;/code&gt; in the previous function.&lt;/p&gt;
&lt;p&gt;Also, the package launches its own instance of MPV to control it via JSON-IPC, so there seems to be no easy way to integrate it with EMMS. But at least I can reuse the &lt;code&gt;emms-player-mpv-parameters&lt;/code&gt; variable, the method of setting which I&amp;rsquo;ve discussed in a &lt;a href=&#34;https://sqrtminusone.xyz/posts/2021-09-07-emms/&#34;&gt;previous blog post&lt;/a&gt;. The function is as follows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;defun&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;my/subed-elfeed&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Open the video file from elfeed ENTRY in MPV.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;This has to be launched from inside the subtitles buffer, opened
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;by the &lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;`my/elfeed-youtube-subtitles&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt; function.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;interactive&lt;/span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;list&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;elfeed-show-entry&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;unless&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#d2413a;font-weight:bold&#34;&gt;user-error&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;No entry!&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;unless&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;derived-mode-p&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;&amp;#39;subed-mode&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#d2413a;font-weight:bold&#34;&gt;user-error&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Not subed mode!&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq-local&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;subed-mpv-arguments&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;seq-uniq&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#00f&#34;&gt;append&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;subed-mpv-arguments&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;emms-player-mpv-parameters&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#008000&#34;&gt;setq-local&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;subed-mpv-video-file&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;elfeed-entry-link&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;entry&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;subed-mpv--play&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;subed-mpv-video-file&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And here&amp;rsquo;s how it looks when used (the video on the screenshot is &lt;a href=&#34;https://www.youtube.com/watch?v=qjAIXCmhCQQ&#34;&gt;this System Crafters&amp;rsquo; stream&lt;/a&gt;):
&lt;img src=&#34;https://sqrtminusone.xyz/ox-hugo/pdf-subed.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Keep in mind that this function has to be launched inside the buffer opened by the &lt;code&gt;my/elfeed-youtube-subtitles&lt;/code&gt; function.&lt;/p&gt;
</content>
</item>
<item>
<title>A few cases of literate configuration</title>
<link>https://sqrtminusone.xyz/posts/2022-02-12-literate/</link>

View file

@ -2,22 +2,25 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://sqrtminusone.xyz/posts/2022-02-12-literate/</loc>
<lastmod>2022-02-12T00:00:00+00:00</lastmod>
</url><url>
<loc>https://sqrtminusone.xyz/tags/emacs/</loc>
<lastmod>2022-02-12T00:00:00+00:00</lastmod>
<lastmod>2022-05-10T00:00:00+00:00</lastmod>
</url><url>
<loc>https://sqrtminusone.xyz/posts/2022-05-09-pdf/</loc>
<lastmod>2022-05-10T00:00:00+00:00</lastmod>
</url><url>
<loc>https://sqrtminusone.xyz/</loc>
<lastmod>2022-02-12T00:00:00+00:00</lastmod>
<lastmod>2022-05-10T00:00:00+00:00</lastmod>
</url><url>
<loc>https://sqrtminusone.xyz/tags/org-mode/</loc>
<lastmod>2022-02-12T00:00:00+00:00</lastmod>
<lastmod>2022-05-10T00:00:00+00:00</lastmod>
</url><url>
<loc>https://sqrtminusone.xyz/posts/</loc>
<lastmod>2022-02-12T00:00:00+00:00</lastmod>
<lastmod>2022-05-10T00:00:00+00:00</lastmod>
</url><url>
<loc>https://sqrtminusone.xyz/tags/</loc>
<lastmod>2022-05-10T00:00:00+00:00</lastmod>
</url><url>
<loc>https://sqrtminusone.xyz/posts/2022-02-12-literate/</loc>
<lastmod>2022-02-12T00:00:00+00:00</lastmod>
</url><url>
<loc>https://sqrtminusone.xyz/tags/exwm/</loc>

View file

@ -63,6 +63,8 @@
<h1>emacs</h1>
<ul>
<li><a href="https://sqrtminusone.xyz/posts/2022-05-09-pdf/">2022-05-10 | Extending elfeed entries with a PDF viewer and subtitles fetcher</a></li>
<li><a href="https://sqrtminusone.xyz/posts/2022-02-12-literate/">2022-02-12 | A few cases of literate configuration</a></li>
<li><a href="https://sqrtminusone.xyz/posts/2022-01-03-exwm/">2022-01-03 | Using EXWM and perspective.el on multi-monitor setup</a></li>

View file

@ -6,7 +6,18 @@
<description>Recent content in emacs on SqrtMinusOne</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language>
<lastBuildDate>Sat, 12 Feb 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://sqrtminusone.xyz/tags/emacs/index.xml" rel="self" type="application/rss+xml" />
<lastBuildDate>Tue, 10 May 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://sqrtminusone.xyz/tags/emacs/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Extending elfeed entries with a PDF viewer and subtitles fetcher</title>
<link>https://sqrtminusone.xyz/posts/2022-05-09-pdf/</link>
<pubDate>Tue, 10 May 2022 00:00:00 +0000</pubDate>
<guid>https://sqrtminusone.xyz/posts/2022-05-09-pdf/</guid>
<description>Intro elfeed is one of the most popular Emacs packages, and it&amp;rsquo;s also one in which I ended up investing a lot of effort. I wrote about the EMMS integration and even made a custom frontpage to my liking.
However, sites frequently limit the amount of information shipped in the RSS feed. Oftentimes the entry doesn&amp;rsquo;t include the entire content (of which, by the way, this blog was guilty).
Also, there&amp;rsquo;s non-textual content, of which in this post I consider YouTube subscriptions.</description>
</item>
<item>
<title>A few cases of literate configuration</title>
<link>https://sqrtminusone.xyz/posts/2022-02-12-literate/</link>

View file

@ -63,9 +63,9 @@
<h1>Tags</h1>
<ul>
<li><a href="https://sqrtminusone.xyz/tags/emacs/">2022-02-12 | emacs</a></li>
<li><a href="https://sqrtminusone.xyz/tags/emacs/">2022-05-10 | emacs</a></li>
<li><a href="https://sqrtminusone.xyz/tags/org-mode/">2022-02-12 | org-mode</a></li>
<li><a href="https://sqrtminusone.xyz/tags/org-mode/">2022-05-10 | org-mode</a></li>
<li><a href="https://sqrtminusone.xyz/tags/exwm/">2022-01-03 | exwm</a></li>

View file

@ -6,11 +6,11 @@
<description>Recent content in Tags on SqrtMinusOne</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language>
<lastBuildDate>Sat, 12 Feb 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://sqrtminusone.xyz/tags/index.xml" rel="self" type="application/rss+xml" />
<lastBuildDate>Tue, 10 May 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://sqrtminusone.xyz/tags/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>emacs</title>
<link>https://sqrtminusone.xyz/tags/emacs/</link>
<pubDate>Sat, 12 Feb 2022 00:00:00 +0000</pubDate>
<pubDate>Tue, 10 May 2022 00:00:00 +0000</pubDate>
<guid>https://sqrtminusone.xyz/tags/emacs/</guid>
<description></description>
@ -19,7 +19,7 @@
<item>
<title>org-mode</title>
<link>https://sqrtminusone.xyz/tags/org-mode/</link>
<pubDate>Sat, 12 Feb 2022 00:00:00 +0000</pubDate>
<pubDate>Tue, 10 May 2022 00:00:00 +0000</pubDate>
<guid>https://sqrtminusone.xyz/tags/org-mode/</guid>
<description></description>

View file

@ -63,6 +63,8 @@
<h1>org-mode</h1>
<ul>
<li><a href="https://sqrtminusone.xyz/posts/2022-05-09-pdf/">2022-05-10 | Extending elfeed entries with a PDF viewer and subtitles fetcher</a></li>
<li><a href="https://sqrtminusone.xyz/posts/2022-02-12-literate/">2022-02-12 | A few cases of literate configuration</a></li>
</ul>

View file

@ -6,7 +6,18 @@
<description>Recent content in org-mode on SqrtMinusOne</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language>
<lastBuildDate>Sat, 12 Feb 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://sqrtminusone.xyz/tags/org-mode/index.xml" rel="self" type="application/rss+xml" />
<lastBuildDate>Tue, 10 May 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://sqrtminusone.xyz/tags/org-mode/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Extending elfeed entries with a PDF viewer and subtitles fetcher</title>
<link>https://sqrtminusone.xyz/posts/2022-05-09-pdf/</link>
<pubDate>Tue, 10 May 2022 00:00:00 +0000</pubDate>
<guid>https://sqrtminusone.xyz/posts/2022-05-09-pdf/</guid>
<description>Intro elfeed is one of the most popular Emacs packages, and it&amp;rsquo;s also one in which I ended up investing a lot of effort. I wrote about the EMMS integration and even made a custom frontpage to my liking.
However, sites frequently limit the amount of information shipped in the RSS feed. Oftentimes the entry doesn&amp;rsquo;t include the entire content (of which, by the way, this blog was guilty).
Also, there&amp;rsquo;s non-textual content, of which in this post I consider YouTube subscriptions.</description>
</item>
<item>
<title>A few cases of literate configuration</title>
<link>https://sqrtminusone.xyz/posts/2022-02-12-literate/</link>