<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Breno Viana</title>
    <description>The latest articles on DEV Community by Breno Viana (@brenomfviana).</description>
    <link>https://dev.to/brenomfviana</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F466515%2F98fbf095-8589-4f4c-a299-9a6f0dbef935.webp</url>
      <title>DEV Community: Breno Viana</title>
      <link>https://dev.to/brenomfviana</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/brenomfviana"/>
    <language>en</language>
    <item>
      <title>Installing Unity Hub on Ubuntu 22.04</title>
      <dc:creator>Breno Viana</dc:creator>
      <pubDate>Wed, 06 Jul 2022 17:08:00 +0000</pubDate>
      <link>https://dev.to/brenomfviana/installing-unity-hub-on-ubuntu-42l0</link>
      <guid>https://dev.to/brenomfviana/installing-unity-hub-on-ubuntu-42l0</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;There are two problems in the Unity Hub installation tutorial (&lt;a href="https://docs.unity3d.com/hub/manual/InstallHub.html#install-hub-linux" rel="noopener noreferrer"&gt;Installing the Unity Hub on Linux&lt;/a&gt;):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ubuntu 22.04 uses OpenSSL 3 while Unity Editors use OpenSSL 1.0 (&lt;a href="https://forum.unity.com/threads/workaround-for-libssl-issue-on-ubuntu-22-04.1271405/" rel="noopener noreferrer"&gt;Workaround for libssl issue on Ubuntu 22.04&lt;/a&gt;);&lt;/li&gt;
&lt;li&gt;The second instruction uses the &lt;code&gt;apt-key&lt;/code&gt; command, which is deprecated on Ubuntu 22.04 (&lt;a href="https://www.linuxuprising.com/2021/01/apt-key-is-deprecated-how-to-add.html" rel="noopener noreferrer"&gt;apt-key Is Deprecated. How To Add OpenPGP Repository Signing Keys Without It&lt;/a&gt;).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Thus, I decided to provide this brief tutorial with the appropriate commands.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tutorial
&lt;/h2&gt;

&lt;p&gt;Downloading OpenSSL 1.0:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download libssl1.0.0_1.0.2n-1ubuntu5.10_amd64.deb from &lt;a href="http://archive.ubuntu.com/ubuntu/pool/main/o/openssl1.0/" rel="noopener noreferrer"&gt;http://archive.ubuntu.com/ubuntu/pool/main/o/openssl1.0/&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Installing OpenSSL 1.0:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo dpkg -i libssl1.0.0_1.0.2n-1ubuntu5.10_amd64.deb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Adding the Unity3D repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo sh -c 'echo "deb https://hub.unity3d.com/linux/repos/deb stable main" &amp;gt; /etc/apt/sources.list.d/unityhub.list'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Adding the public signing key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wget -qO - https://hub.unity3d.com/linux/keys/public | sudo tee /etc/apt/trusted.gpg.d/unityhub.asc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Installing the Unity Hub:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update
sudo apt install unityhub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Uninstalling the Unity Hub:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt remove unityhub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>gamedev</category>
      <category>unity3d</category>
      <category>ubuntu</category>
      <category>linux</category>
    </item>
    <item>
      <title>Introduction to Procedural Content Generation</title>
      <dc:creator>Breno Viana</dc:creator>
      <pubDate>Tue, 24 May 2022 16:49:16 +0000</pubDate>
      <link>https://dev.to/brenomfviana/introduction-to-procedural-content-generation-5de</link>
      <guid>https://dev.to/brenomfviana/introduction-to-procedural-content-generation-5de</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Several games from the industry make use of Procedural Content Generation (PCG) to generate levels (e.g., Moonlighter), maps (e.g., Minecraft), weapons (e.g., Borderlands franchise), among other types of content. And such a feature interests so much the public that it is highlighted in advertisements for these games. But what is PCG? According to Togelius et al. [1], Procedural Content Generation "is the algorithmic creation of game content with limited or indirect user input." Thus, the creative process of PCG methods can be entirely performed by computers or associated with human designers or gamers [2].&lt;/p&gt;

&lt;p&gt;The use of PCG brings several advantages to game developers since it can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;decrease the need for human game designers to create content;&lt;/li&gt;
&lt;li&gt;increase the productivity of these designers;&lt;/li&gt;
&lt;li&gt;increase the creativity through design suggestions;&lt;/li&gt;
&lt;li&gt;provide the control of game features (e.g., difficulty balancing);&lt;/li&gt;
&lt;li&gt;act as a game feature to provide content variety.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The definition of Togelius et al. is good; however, to better understand how PCG methods work, we also need to understand their classifications. Thus, following, I describe the taxonomy of PCG defined by Togelius, Shaker, and Nelson [2]. In addition, a former advisor and I renamed the title of each class to better refer to each one of them [3].&lt;/p&gt;

&lt;h2&gt;
  
  
  Taxonomy
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Content Requirement
&lt;/h4&gt;

&lt;p&gt;Content requirement refers to necessary and optional game content. Content is necessary when it is required to finalize the game, e.g., a key to open a locked door that gives access to a boss room. In contrast, players can ignore the optional content without penalization, e.g., any common coin in a level. Thus, when generating necessary content may require tests to ensure feasibility.&lt;/p&gt;

&lt;h4&gt;
  
  
  Outcome Randomness
&lt;/h4&gt;

&lt;p&gt;Outcome Randomness regards the generated content if it presents or not randomness. Thus, a PCG technique is considered deterministic when it generates the same content for the same parameters. On the other hand, it is stochastic when, given the same parameters, it always generates different content. Although it is not common, it is possible to create deterministic PCG algorithms.&lt;/p&gt;

&lt;h4&gt;
  
  
  Generation Time
&lt;/h4&gt;

&lt;p&gt;Generation Time refers to the moment of the game content generation. The content can be generated before the gameplay, i.e., offline, or during the gameplay, while the player is playing the game, i.e., online. Offline content is the most common in the industry. In contrast, online content generation is mostly applied in Infinite Runner games.&lt;/p&gt;

&lt;h4&gt;
  
  
  Generation Control
&lt;/h4&gt;

&lt;p&gt;Generation Control defines the method regarding its degrees of control provided. Such control is provided basically through parameters that can be composed of a single random seed (a single dimension of control) or by a set of parameters (two or more dimensions of control). For instance, a PCG method can receive the number of locked doors, the number of keys to open these doors, and a list of enemies that may spawn in the level's rooms.&lt;/p&gt;

&lt;h4&gt;
  
  
  Generation Method
&lt;/h4&gt;

&lt;p&gt;The generation method can be carried out in different ways. The most common in the industry is the constructive method; this method generates the content at once in a single execution without checking feasibility. In contrast, generate-and-test methods perform tests to validate the content feasibility, quality, or both. Besides, there are also Machine Learning and Reinforcement Learning-based PCG approaches.&lt;/p&gt;

&lt;h4&gt;
  
  
  Generality
&lt;/h4&gt;

&lt;p&gt;Generality regards the target audience for which the content is generated. Thus, if a PCG method creates content for all players, its generation is generic. On the other hand, when a technique learns the gamers' tastes and uses them to generate targeted content, the approach is performing adaptive generation. For example, Left 4 Dead (Valve Corporation, 2008) adjusts the difficulty of enemies based on the emotional intensity [2]. However, adaptation is not trivial to implement in a game, mainly if multiple contents are involved.&lt;/p&gt;

&lt;h4&gt;
  
  
  Content Authorship
&lt;/h4&gt;

&lt;p&gt;Regarding content authorship, we call a PCG method an automatic generation if the content is generated only by a computer (the user sets only the algorithm's inputs). On the other hand, we classify a tool as mixed authorship when it presents support to human game designers by providing suggestions based on the designer changings. Unfortunately, I do not know if mixed-initiative tools are available in the industry. But there is a very interesting tool being developed by the gamer research group of Malmö University [4]. It is called Evolutionary Dungeon Designer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;That is it! I hope you learned a bit more of PCG with this post. If you are interested in developing PCG algorithms, check my post: &lt;a href="https://dev.to/brenomfviana/what-do-you-need-to-learn-to-develop-robust-pcg-techniques-46gb"&gt;What do you need to learn to develop robust PCG techniques?&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;[1] What is procedural content generation? Mario on the borderline (&lt;a href="https://doi.org/10.1145/2000919.2000922" rel="noopener noreferrer"&gt;https://doi.org/10.1145/2000919.2000922&lt;/a&gt;).&lt;br&gt;
[2] Procedural Content Generation in Games, Introduction, (&lt;a href="http://pcgbook.com/wp-content/uploads/chapter01.pdf" rel="noopener noreferrer"&gt;http://pcgbook.com/wp-content/uploads/chapter01.pdf&lt;/a&gt;).&lt;br&gt;
[3] Procedural Dungeon Generation: A Survey (&lt;a href="https://doi.org/10.5753/jis.2021.999" rel="noopener noreferrer"&gt;https://doi.org/10.5753/jis.2021.999&lt;/a&gt;).&lt;br&gt;
[4] Evolutionary Dungeon Designer (&lt;a href="https://games.mau.se/research/eddy/" rel="noopener noreferrer"&gt;https://games.mau.se/research/eddy/&lt;/a&gt;).&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>games</category>
      <category>pcg</category>
    </item>
    <item>
      <title>What do you need to learn to develop robust PCG techniques?</title>
      <dc:creator>Breno Viana</dc:creator>
      <pubDate>Sat, 21 May 2022 15:22:43 +0000</pubDate>
      <link>https://dev.to/brenomfviana/what-do-you-need-to-learn-to-develop-robust-pcg-techniques-46gb</link>
      <guid>https://dev.to/brenomfviana/what-do-you-need-to-learn-to-develop-robust-pcg-techniques-46gb</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The game industry has become the most popular and profitable entertainment industry globally [1]. Since then, more and more games provide massive maps, a high number of game features, and, thus, different ways of gameplay. However, there is a high cost of production to develop such game features. Therefore, to help decrease the cost and increase the speed of the game development is wise to use Procedural Content Generation (PCG) techniques. For instance, PCG techniques may create 3D maps to work as sketches for human designers that can fine-tune the places that require careful designs. We can apply this process to any game level. Besides, we can also use PCG as a game feature by creating content during the game session, thus, providing different playthroughs.&lt;/p&gt;

&lt;p&gt;To help beginners, I made this list of things that I think are essential to learning to create robust PCG techniques: programming, data structures, software architecture, and randomness.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Programming
&lt;/h2&gt;

&lt;p&gt;PCG techniques are software, so there is no way to develop them without learning to program them. The specific programming language does not matter; we can develop PCG methods with any language. The most important is knowing the programming logic to create the sequence of steps required to build content. However, since you want to develop games, it is wise to learn a language used for a game engine, for instance, learn C# and create games with Unity.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Data Structures
&lt;/h2&gt;

&lt;p&gt;We need to know data structures well and how to create new ones to define good representations (encodings) for the content we want to generate. The way we represent the content is crucial for any PCG technique. For instance, it may be better to represent levels with grids instead of graphs (a more advanced data representation) since we easily control the level space in grids.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Software Architecture
&lt;/h2&gt;

&lt;p&gt;It is important to maintain our projects well designed when developing software. To do so, we need to learn software architecture and design patterns. Thus, we can fix errors and extend the PCG method more easily. For instance, if we want to add locked doors and keys to our levels, we will need to redesign the data structure that represents our levels. Therefore, it will be easier if we maintain our project well designed.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Randomness
&lt;/h2&gt;

&lt;p&gt;Finally, we need to understand how the randomness method we use works. Yes, we can develop PCG techniques without randomness; however, we could not generate a wide variety of content, which is the most interesting thing about PCG. Therefore, randomness is crucial when developing PCG techniques. We need to save the seed we use to feed the random number generator. Thus, we can reproduce the sequence of random numbers and, hence, possible errors in our PCG methods.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;[1] Gaming: The Most Lucrative Entertainment Industry By Far (&lt;a href="https://www.statista.com/chart/22392/global-revenue-of-selected-entertainment-industry-sectors/" rel="noopener noreferrer"&gt;https://www.statista.com/chart/22392/global-revenue-of-selected-entertainment-industry-sectors/&lt;/a&gt;).&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>games</category>
      <category>pcg</category>
    </item>
    <item>
      <title>My experience using Unity3D on Manjaro i3</title>
      <dc:creator>Breno Viana</dc:creator>
      <pubDate>Sun, 25 Oct 2020 15:00:46 +0000</pubDate>
      <link>https://dev.to/brenomfviana/my-experience-using-unity3d-on-manjaro-i3-40ad</link>
      <guid>https://dev.to/brenomfviana/my-experience-using-unity3d-on-manjaro-i3-40ad</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Last year Unity Technologies have announced the Linux support for Unity3D. Currently, the company grants support for Ubuntu and CentOS distros (You can see more details in &lt;a href="https://blogs.unity3d.com/2019/05/30/announcing-the-unity-editor-for-linux/" rel="noopener noreferrer"&gt;this post&lt;/a&gt;). However, I'm currently a &lt;a href="https://manjaro.org/downloads/community/i3/" rel="noopener noreferrer"&gt;Manjaro i3&lt;/a&gt; user, and, in this post, I'm briefly describing my experience using Unity3D in this distro.&lt;/p&gt;

&lt;h1&gt;
  
  
  Background
&lt;/h1&gt;

&lt;p&gt;I'm a Linux user for almost 7 years. I see myself as an intermediate user since I can solve some problems without much difficulty (yes, I'm talking about the NVidia drivers). Last year a friend of mine presented the Manjaro i3 to me. I found out the i3 to be an amazing window manager, and I already knew that Manjaro is an excellent OS.&lt;/p&gt;

&lt;p&gt;This year I started my master's at &lt;a href="https://www.icmc.usp.br/" rel="noopener noreferrer"&gt;USP-ICMC (Universidade de São Paulo - Instituto de Ciências Matemáticas e de Computação)&lt;/a&gt;, and I joined the Games Research Group. Since Unity3D is the default game engine of our group, I started to learn it. Although there is no official support for Manjaro, I decided to use the engine in this distro. Moreover, I'm a novice game developer.&lt;/p&gt;

&lt;h1&gt;
  
  
  My experience
&lt;/h1&gt;

&lt;p&gt;I have been using the 2019 LTS version of Unity3D for just over two months. Despite being a short time, I think I have interesting things to share. In general, Unity3D has good support for Linux, but I did find some problems.&lt;/p&gt;

&lt;p&gt;The first annoying thing is: since Unity3D is compiled as an &lt;a href="https://appimage.org/" rel="noopener noreferrer"&gt;AppImage&lt;/a&gt;, it is not possible to run the engine directly on &lt;a href="https://wiki.archlinux.org/index.php/dmenu" rel="noopener noreferrer"&gt;dmenu&lt;/a&gt;. To open the Unity3D from dmenu, I had to create a &lt;a href="https://stackoverflow.com/questions/955460/how-do-linux-binary-installers-bin-sh-work" rel="noopener noreferrer"&gt;bin file&lt;/a&gt;. It wasn't difficult, but the need to do this is annoying.&lt;/p&gt;

&lt;p&gt;Second, Unity3D (in Majaro i3) is quite slow to load new assets, and to update them. It is even slower to compile the C# scripts. But, maybe, I think it's slow because I'm used to not using such a heavy editor.&lt;/p&gt;

&lt;p&gt;Third, and the most annoying problem is the GUI bug:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flaqhzau2k3qmsk6fd24u.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flaqhzau2k3qmsk6fd24u.gif" alt="The most annoying bug" width="600" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fourth, my account was not recognized by the editor after I logged in to the UnityHub. When I needed to download some assets from the Asset Store, I couldn't. I had to log in again to the Asset Store in the editor (I saw this solution online, but I lost the link and didn't find). However, it seems that this problem was solved this week.&lt;/p&gt;

&lt;p&gt;Fifth, the real big problem of using Unity3D on Manjaro i3 is the crashes. This problem doesn't happen so frequently. Hardly ever, while I was searching for some solution or while I was watching a tutorial video, the editor crashed (maybe because the Unity3D consumes too much memory). The crashes are more frequent when in the build, but when the builds turned out successful, they work well.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;I don't know if all those problems happen on the officially supported distros or if they happen only because I'm using Manjaro i3 (probably some of them). Although those problems, it's been nice to develop games with Unity3D. Since the games I develop aren't too big, I don't build games frequently, and the build is usually fast, so I think I can live with this problem.&lt;/p&gt;

&lt;p&gt;And that is it. Thanks for reading!&lt;/p&gt;

&lt;h1&gt;
  
  
  Downloading Unity3D on Manjaro
&lt;/h1&gt;

&lt;p&gt;There are two ways of using Unity3D on Manjaro, or you download the &lt;a href="https://forum.unity.com/threads/unity-hub-v-1-6-0-is-now-available.640792/" rel="noopener noreferrer"&gt;official AppImage&lt;/a&gt;, or you download from &lt;a href="https://wiki.archlinux.org/index.php/Unity3D" rel="noopener noreferrer"&gt;AUR&lt;/a&gt; (currently experimental).&lt;/p&gt;

</description>
      <category>linux</category>
      <category>gamedev</category>
      <category>unity3d</category>
      <category>manjaro</category>
    </item>
    <item>
      <title>Using multiple footnotes in float environments</title>
      <dc:creator>Breno Viana</dc:creator>
      <pubDate>Fri, 11 Sep 2020 01:06:50 +0000</pubDate>
      <link>https://dev.to/brenomfviana/footnotes-in-float-environments-1jge</link>
      <guid>https://dev.to/brenomfviana/footnotes-in-float-environments-1jge</guid>
      <description>&lt;h1&gt;
  
  
  The problems
&lt;/h1&gt;

&lt;p&gt;I was writing my MSc thesis when I just tried to add two footnotes in the captions of two subfigures. The result of my first try was something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F5cyikcxvns5fqj69zjyw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F5cyikcxvns5fqj69zjyw.png" alt="Alt Text" width="800" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Well, the problem is that I expected the footnotes to be at the bottom of the page. And I solved it quite fast by using &lt;code&gt;\footnotemark[...]&lt;/code&gt; and &lt;code&gt;\footnotetext[...]{...}&lt;/code&gt;. However, another problem arose: only the label of the last footnote was linkable and I wanted both to be linkable.&lt;/p&gt;

&lt;h1&gt;
  
  
  The fix
&lt;/h1&gt;

&lt;p&gt;I googled a lot but no solution was good enough to solve both problems. I found some solutions proposing using the &lt;code&gt;footnotehyper&lt;/code&gt; package but they did not help with the first problem. After some hours I found this 2012 &lt;a href="https://texblog.org/2012/02/03/using-footnote-in-a-table/" rel="noopener noreferrer"&gt;post&lt;/a&gt; showing the &lt;code&gt;savenotes&lt;/code&gt; environment of &lt;code&gt;footnote&lt;/code&gt; package. It did not solve my second problem, but I realized that the &lt;code&gt;footnotehyper&lt;/code&gt; could be based on the &lt;code&gt;footnote&lt;/code&gt; so I could use the &lt;code&gt;savenotes&lt;/code&gt; environment as well. And it worked finely! More about the &lt;code&gt;footnotehyper&lt;/code&gt; documentation &lt;a href="https://ctan.math.illinois.edu/macros/latex/contrib/footnotehyper/footnotehyper.pdf" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  The code
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;&lt;span class="k"&gt;\documentclass&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;article&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;\usepackage&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;geometry&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;\geometry&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;a5paper,landscape,margin=0.5in&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;\usepackage&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;hyperref&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;\usepackage&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;graphicx&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;\usepackage&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;caption,subcaption&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;\usepackage&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;footnotehyper&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;\begin{document}&lt;/span&gt;

&lt;span class="k"&gt;\pagestyle&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;empty&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;\begin{savenotes}&lt;/span&gt;
    &lt;span class="nt"&gt;\begin{figure}&lt;/span&gt;[ht]
        &lt;span class="k"&gt;\centering&lt;/span&gt;
        &lt;span class="k"&gt;\caption&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;Animals.&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;\label&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;fig:animals&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nt"&gt;\begin{subfigure}&lt;/span&gt;[b]&lt;span class="p"&gt;{&lt;/span&gt;0.48&lt;span class="k"&gt;\textwidth&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;\centering&lt;/span&gt;
            &lt;span class="k"&gt;\caption&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;A cat.&lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;\label&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;fig:cat&lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;\includegraphics&lt;/span&gt;&lt;span class="na"&gt;[width=\textwidth]&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;cat.jpg&lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;\caption*&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;Source: &lt;span class="k"&gt;\href&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;https://unsplash.com&lt;span class="p"&gt;}{&lt;/span&gt;Unsplash&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;\footnote&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;Source: &lt;span class="k"&gt;\href&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;https://unsplash.com/photos/kjERLXaHjXc&lt;span class="p"&gt;}{&lt;/span&gt;https://unsplash.com/photos/kjERLXaHjXc&lt;span class="p"&gt;}&lt;/span&gt;.&lt;span class="p"&gt;}&lt;/span&gt;.&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nt"&gt;\end{subfigure}&lt;/span&gt;
        ~
        &lt;span class="nt"&gt;\begin{subfigure}&lt;/span&gt;[b]&lt;span class="p"&gt;{&lt;/span&gt;0.48&lt;span class="k"&gt;\textwidth&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;\centering&lt;/span&gt;
            &lt;span class="k"&gt;\caption&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;A dog.&lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;\label&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;fig:dog&lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;\includegraphics&lt;/span&gt;&lt;span class="na"&gt;[width=\textwidth]&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;dog.jpg&lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;\caption*&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;Source: &lt;span class="k"&gt;\href&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;https://unsplash.com&lt;span class="p"&gt;}{&lt;/span&gt;Unsplash&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;\footnote&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;Source: &lt;span class="k"&gt;\href&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;https://unsplash.com/photos/N04FIfHhv&lt;span class="p"&gt;_&lt;/span&gt;k&lt;span class="p"&gt;}{&lt;/span&gt;https://unsplash.com/photos/N04FIfHhv&lt;span class="k"&gt;\_&lt;/span&gt;k&lt;span class="p"&gt;}&lt;/span&gt;.&lt;span class="p"&gt;}&lt;/span&gt;.&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nt"&gt;\end{subfigure}&lt;/span&gt;
    &lt;span class="nt"&gt;\end{figure}&lt;/span&gt;
&lt;span class="nt"&gt;\end{savenotes}&lt;/span&gt;

&lt;span class="nt"&gt;\end{document}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  The result
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fzw1n9pu5ki5lztzi4vfp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fzw1n9pu5ki5lztzi4vfp.png" alt="Alt Text" width="800" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  References
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;I took the images of the &lt;a href="https://unsplash.com/photos/kjERLXaHjXc" rel="noopener noreferrer"&gt;cat&lt;/a&gt; and the &lt;a href="https://unsplash.com/photos/N04FIfHhv_k" rel="noopener noreferrer"&gt;dog&lt;/a&gt; from &lt;a href="https://unsplash.com/" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>latex</category>
      <category>footnote</category>
      <category>float</category>
    </item>
  </channel>
</rss>
