{"id":2420,"date":"2026-07-29T14:02:20","date_gmt":"2026-07-29T14:02:20","guid":{"rendered":"https:\/\/www.tarleton.edu\/math\/?page_id=2420"},"modified":"2026-07-29T16:52:25","modified_gmt":"2026-07-29T16:52:25","slug":"accessibility-using-latex","status":"publish","type":"page","link":"https:\/\/www.tarleton.edu\/math\/accessibility-using-latex\/","title":{"rendered":"Accessibility Using LaTeX"},"content":{"rendered":"\n<h2 id=\"setup-used-199dc34f-bb59-43f5-9725-f93f31e66eb1\" class=\"wp-block-heading\">Setup Used<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">LaTeX is used by many for the creation of PDF documents. Here we explore how to make such PDFs documents accessible.  TeXLive 2026 is utilized and the document is compiled via <strong>lualatex filename.tex<\/strong> in order turn <strong>filename.tex<\/strong> into a PDF. Of course it is easier to configure an IDE (Integrated Development Environment) such as TeXstudio to save typing. It is possible to use TeXLive 2025, but you will need to utilize the development branch <strong>lualatex-dev filename.tex<\/strong> in order to create a PDF. Earlier versions of TeXLive may not work. Additionally, only TeXLive has been tested, although it is likely that MiKTeX or other recent distributions of LaTeX would work.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For some things to work properly, you will need to make sure that your IDE includes <strong>&#8211;shell-escape<\/strong> flag to <strong>lualatex.exe<\/strong>. This allows external programs to be executed and allows <strong>lualatex.ext<\/strong> to run <strong>python.exe<\/strong> or even <strong>TikZ<\/strong> if you are using the added <strong>external<\/strong> library for enhanced speed.  For example, you might run <strong>lualatex &#8211;shell-escape my_document.tex<\/strong> in the command line or configure the IDE. There are other reasons for shell escape. Keep using LaTeX and you&#8217;ll find them! <em>This can be dangerous as it allows LaTeX to execute any command line script on your machine. Code from an external source can be dangerous!<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Files used in this tutorial include<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em><a href=\"https:\/\/www.tarleton.edu\/math\/accessibility-using-latex-code-poor\/\" data-type=\"link\" data-id=\"https:\/\/www.tarleton.edu\/math\/accessibility-using-latex-code-poor\/\">Poor LaTeX Code<\/a><\/em>: This generates a very poorly accessible document.<\/li>\n\n\n\n<li><em><a href=\"https:\/\/www.tarleton.edu\/math\/wp-content\/uploads\/sites\/130\/2026\/07\/latex-python-pdf-poor.pdf\" data-type=\"link\" data-id=\"https:\/\/www.tarleton.edu\/math\/wp-content\/uploads\/sites\/130\/2026\/07\/latex-python-pdf-poor.pdf\">latex-python-pdf-poor.pdf<\/a><\/em>: Created from the above <em>*.tex<\/em> file. Canvas&#8217; Ally tool reports 6%.<\/li>\n\n\n\n<li><em><a href=\"https:\/\/www.tarleton.edu\/math\/accessibility-latex-code-accessible\/\" data-type=\"link\" data-id=\"https:\/\/www.tarleton.edu\/math\/accessibility-latex-code-accessible\/\">Accessible LaTeX Code<\/a><\/em>: This generates a very accessible document.<\/li>\n\n\n\n<li><em><a href=\"https:\/\/www.tarleton.edu\/math\/wp-content\/uploads\/sites\/130\/2026\/07\/latex-python-pdf.pdf\" data-type=\"link\" data-id=\"https:\/\/www.tarleton.edu\/math\/wp-content\/uploads\/sites\/130\/2026\/07\/latex-python-pdf.pdf\">latex-python-pdf.pdf<\/a><\/em>: Created from the above <em>*.tex<\/em> file. Canvas&#8217; Ally tool reports 100%.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Document Structure<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">There are two different paths which LaTeX can follow for including MathML in PDF documents. One generates a PDF which uses structure elements to contain MathML. The other includes MathML in embedded and associated files. This page covers the former.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A basic LaTeX file might look like the following.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>% ------------------------------------------------------------\n%   Document Preamble Settings for Tagged, Accessible PDF\n% ------------------------------------------------------------\n\n% Modern LaTeX document options and metadata (requires TeX Live 2026+ and LuaLaTeX)\n\\DocumentMetadata{\n\tpdfversion = 2.0,        % Use PDF 2.0 for enhanced features and compatibility\n\tlang       = en-US,      % Specify main document language (improves accessibility)\n\tpdfstandard=ua-2,        % Enable PDF\/UA-2 conformance for universal accessibility\n\ttagging    = on,         % Activate structural tagging of document elements\n\t% Uncomment below for custom math tagging and alternate modules if needed:\n\t%tagging-setup = {math\/setup=mathml-AF, extra-modules={verbatim-af}}\n\ttagging-setup = {math\/setup={mathml-SE}, % Configure Math as Structure Elements\n\t\tmath\/alt\/use = true,    % Embed alternative LaTeX source in math (impacts accessibility)\n\t\textra-modules = {verbatim-af} % Add module for verbatim environments\n\t}\n}\n\n\\documentclass{article} % Or some other class file\n\n% ========== Packages for extra features ==========\n\\usepackage{amsmath,amsthm}       % For better math typesetting\n\\usepackage&#91;colorlinks]{hyperref}      % For clickable links and PDF bookmarks\n\\usepackage{unicode-math}  % Maps LaTeX commands for mathematical characters to the Unicode Mathematical Alphanumeric Symbols block.\n\\usepackage{graphicx}      % For including images\n\\pagestyle{empty}          % (Optional) Removes page numbers (nicer for examples)\n\n\\usepackage{authblk}\t\t% Helps with author names and affiliations\n\n\\newtheorem{theorem}{Theorem}&#91;section]  % Numbering resets when a section changes\n\\newtheorem{corollary}{Corollary}&#91;theorem]  % Numbering resets when a new theorem happens\n\\newtheorem{lemma}&#91;theorem]{Lemma}  % Uses the same counter as Theorem\n\\newtheorem{definition}{Definition}  % Uses the same counter as Theorem\n\\newtheorem{example}{Example}  % Uses the same counter as Theorem\n\n\\usepackage{tikz}\n\\usetikzlibrary{positioning}\n\n\\usepackage&#91;executable=python.exe]{pyluatex}  % Because I'm using Python\n\n% Other Packages or commands as needed\n\n\\begin{document}\n   \\title{Cool Title}\n   \\date{28 July 2026}\n   \\author{Your Name} \n   \\affil{Where are you?}\n\n   \\maketitle\n\n   % Your awesome document using \\chapter{}, \\section{}, etc as needed\n\\end{document}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Preamble<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The following code block is placed before the typical <strong>\\documentclass{article}<\/strong>. A <em>pdfversion<\/em> of 2.0 specifies that the more modern version of PDF documents is being utilized allowing better accessibility features.   The <em>lang<\/em> specifies the English language is utilized. The standard <em>pdfstandard<\/em> line indicates that <em>PDF\/UA-2<\/em> standard is being used. The line <em>tagging=on<\/em> indicates that sections, lists, math, etc. are tagged as specified through <em>tagging-setup<\/em> line. The tagging setup uses structural elements, allows alternative LaTeX source in math, and add a module for verbatim environments.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>% ------------------------------------------------------------\n%   Document Preamble Settings for Tagged, Accessible PDF\n% ------------------------------------------------------------\n\n% Modern LaTeX document options and metadata (requires TeX Live 2026+ and LuaLaTeX)\n\\DocumentMetadata{\n\tpdfversion = 2.0,        % Use PDF 2.0 for enhanced features and compatibility\n\tlang       = en-US,      % Specify main document language (improves accessibility)\n\tpdfstandard=ua-2,        % Enable PDF\/UA-2 conformance for universal accessibility\n\ttagging    = on,         % Activate structural tagging of document elements\n\t% Uncomment below for custom math tagging and alternate modules if needed:\n\t%tagging-setup = {math\/setup=mathml-AF, extra-modules={verbatim-af}}\n\ttagging-setup = {math\/setup={mathml-SE}, % Configure Math as Structure Elements\n\t\tmath\/alt\/use = true,    % Embed alternative LaTeX source in math (impacts accessibility)\n\t\textra-modules = {verbatim-af} % Add module for verbatim environments\n\t}\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If you wish to have a PDF which includes MathML inside embedded and associated files, then uncomment the line containing <em>tagging-setup = {math\/setup=mathml-AF, extra-modules={verbatim-af}}<\/em> and comment the next three lines.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We don&#8217;t explicitly include the <strong>tagpdf<\/strong> package because <strong>tagging = on<\/strong> will load the package for us.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Some Nice Packages<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">There are an amazing number of interesting LaTeX packages which can be utilized. Here we use several as shown above. in particular, <em>pyluatex<\/em> adds Python capabilities to the document, <em>tikz<\/em> is great for creating custom diagrams, <em>authbolk<\/em> is used to indicate author data, <em>graphicx<\/em> is the standard for including images such as <em>*.PNG<\/em> or <em>*.PDF<\/em>.  The libraries <em>amsmath<\/em> and <em>amsthm<\/em> are nice additions and allow more flexible mathematical structures and theorems. Finally, <em>hyerref<\/em> allows nice hyperlinks and bookmarks and <em>unicode-math<\/em> allows usage of Unicode.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Best Practices<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Sections, Theorems, Lists, Math, Etc.<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Make sure that you use <strong>\\chapter{Some Name}<\/strong>, <strong>\\section{Some Name}<\/strong>, etc to correctly tag chapters and sections in the PDF document.  Paragraphs are automatically tagged as <em>paragraphs<\/em>. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Math environments which also include the standard environment such as <strong>$x^2$<\/strong> as well as the more interesting environments such as <strong>\\begin{equation}<\/strong>&#8230;<strong>\\end{equation}<\/strong> or <strong>\\begin{align}<\/strong> .. <strong>\\end{align}<\/strong> are tagged as mathematics.  <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lists such as <em>itemize<\/em>, <em>enumerate<\/em>, or <em>description<\/em> are tagged as lists.  Links using <strong>\\href{}<\/strong> or <strong>\\url{}<\/strong> are tagged as links.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use <strong>\\begin{theorem}<\/strong>&#8230;<strong>\\end{theorem}<\/strong> to create appropriately tagged theorem environments (or definitions, examples, etc.). The <strong>amsmath<\/strong> and <strong>amsthm<\/strong> packages help with creation of such structures. Do not use <strong>\\textbf{Theorem}<\/strong> as this will not be properly tagged. But you could create custom tags.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Custom tagging<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">However, custom content such as your own environments or macros are not automatically tagged. Additionaly raw boxes or some low-level content such as <strong>\\hbox{}<\/strong> are not tagged. This will need manual tagging using <strong>\\tagstructbegin<\/strong> and <strong>\\tagstructend<\/strong> to ensure it is correctly identified as a paragraph. For example, the following code snippet would tag several lines as a <em>paragraph<\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>%--- Manual structure tagging commands (from tagpdf package) ---\n\\tagstructbegin{tag=P}         % Begin a new structure element (a paragraph, \"P\")\n\\tagmcbegin{tag=P}             % Begin marked content for the same paragraph\nThis paragraph is manually wrapped with \\texttt{\\string\\tagstructbegin} and \\texttt{\\string\\tagstructend} commands to ensure it is correctly identified as a paragraph structure element in the output PDF's structure tree.\n\\tagmcend                     % Ends marked content\n\\tagstructend                 % Ends the structure element\n%--- End manual tagging ---<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Note that since <strong>tagging=on<\/strong> is inside the <strong>\\DocumentMetaData{&#8230;}<\/strong>, we don&#8217;t explicitly include the <strong>tagpdf<\/strong> package.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There are a lot of different tags available. Rather that <strong>\\tagstructbegin{tag=P}<\/strong> where <strong>P<\/strong> represents <em>paragraph<\/em>, you can use <strong>Part<\/strong> is a high level method for grouping multiple chapters or sections together. <strong>Aside<\/strong> is used for blocks of content that are separate from the main flow, such as sidebars or callouts.  Headings such as <strong>H1<\/strong>, <strong>H2<\/strong>, through <strong>H6<\/strong> can be used with <strong>H<\/strong> a generic heading tag.  You can specify a title using <strong>Title<\/strong>. Lists, tables, and figures are also possible and so much more.  Searching online will be a good idea for these as it gets more and more involved.  When possible, let LaTeX tag as many things as possible for you.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Tables<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Tables need to have a header row. A minimal working example would be<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\\tagpdfsetup{table\/header-rows={1}} % This identifies the header row as the first row\n\\begin{tabular}{|l|c|c|}\n\t\\hline\n\tFruit &amp; Calories &amp; Fiber (g) \\\\\n\t\\hline\n\tApple  &amp; 52       &amp; 2.4 \\\\\n\tBanana &amp; 89       &amp; 2.6 \\\\\n\tOrange &amp; 47       &amp; 2.4 \\\\\n\t\\hline\n\\end{tabular}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Of course, you might have two or more rows.  I decided the table should be centered.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\\begin{center}\n\t\\tagpdfsetup{table\/header-rows={1,2}} % This identifies the header rows as the first two rows\n\t\\begin{tabular}{l|r}\n\t\t\\multicolumn{2}{c}{Example}\\\\\n\t\tName &amp; Value\\\\\n\t\tThis &amp; 11 \\\\\n\t\tThat &amp; 2\n\t\\end{tabular}\n\\end{center}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Even better would be a table with a caption and a label which can be cross referenced using the standard LaTeX command <strong>\\ref{tab-sec-slope}<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\\begin{table}&#91;h]\n\t\\centering\n\t\\caption{Slopes of three different secant lines.}\\label{tab-sec-slope}\n\t\\tagpdfsetup{table\/header-rows={1}}  % This identifies the header row as the first row\n\t\\begin{tabular}{c|c}\n\t\t\\hline\n\t\t$x$ &amp; $m_{sec} = \\dfrac{f(x)-f(a)}{x-a}$ \\\\\\hline\n\t\t$-\\dfrac{3}{2}$ &amp; $-\\dfrac{13}{4}$ \\\\\n\t\t$\\dfrac{1}{2}$ &amp; $\\dfrac{5}{4}$ \\\\\n\t\t$\\dfrac{1}{2}$ &amp; $\\dfrac{17}{4}$ \n\t\\end{tabular}\n\\end{table}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">It is also possible to specify one or more columns. For example, use the following code to indicate <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\\begin{center}\n    % Define the structural header matrix\n    \\tagpdfsetup{\n        table\/header-rows={1,2},       % Rows 1 &amp; 2 contain structural time headers\n        table\/header-columns={1,2}     % Columns 1 &amp; 2 contain product categorization headers\n    }\n    \n    \\begin{tabular}{ll|cc}\n        % --- ROW 1 (Header Row) ---\n        % Cells 1 &amp; 2 are empty corner headers. Cells 3 &amp; 4 span under a 2026 grouping.\n        &amp; &amp; \\multicolumn{2}{c}{\\textbf{Fiscal Year 2026}} \\\\ \n        \n        % --- ROW 2 (Header Row) ---\n        % Cells 1 &amp; 2 finish the corner. Cells 3 &amp; 4 provide the sub-headers.\n        \\textbf{Division} &amp; \\textbf{Product} &amp; \\textbf{Q1 Target} &amp; \\textbf{Q2 Target} \\\\ \\hline\n        \n        % --- ROW 3 (Data Row) ---\n        % Columns 1 &amp; 2 are treated as row headers (&lt;TH&gt;). Columns 3 &amp; 4 are data (&lt;TD&gt;).\n        Software &amp; Cloud SaaS &amp; \\$50k &amp; \\$65k \\\\ \n        \n        % --- ROW 4 (Data Row) ---\n        Software &amp; On-Premise &amp; \\$20k &amp; \\$15k \\\\ \\hline\n        \n        % --- ROW 5 (Data Row) ---\n        Hardware &amp; Servers    &amp; \\$80k &amp; \\$95k \n    \\end{tabular}\n\\end{center}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Figures<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Who doesn&#8217;t like figures?  We always need to include <em>alt-text<\/em> with figures, whether they are simply images included or a true figure.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A basic figure block with a label which can be references using <strong>Figure~\\ref{fig-sec-tan}<\/strong> (note that the &#8220;~&#8221; after the word <em>Figure<\/em> is optional, but indicates a non-breaking space so that the word <em>Figure<\/em> and the figure <em>number<\/em> are not separated at the end of a line) is shown below.  The important part is the use of <strong>alt={The graph&#8230;}<\/strong> within the <strong>\\includegraphics<\/strong> command which specifies the alternative text for the figure. Note that a minimal figure can be generated by simply using the <strong>\\includegraphics<\/strong> command with the alternative text.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>% --- Figure with embedded alternative text (accessibility for images) ---\n\\begin{figure}&#91;h]\n\t\\centering\n\t% Use the 'alt' key directly within \\includegraphics\n\t\\includegraphics&#91;width=\\linewidth, alt={The graph of $f(x)$ with its tangent line and several secant lines.}]{secant_tangent_lines_by_hand.png}\n\t\\caption{The graph of $f(x)$ with its tangent line and several secant lines.}\\label{fig-sec-tan}\n\\end{figure}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For a purely decorative image, use <strong>\\includegraphics[artifact]{image.png}<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a picture of a unicode character, use <strong>\\includegraphics[actualtext=B]{image.png}<\/strong> to indicate that <strong>image.png<\/strong> represents the letter &#8220;B&#8221;.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Python<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">It is possible to include Python generated images. The following code will generate a damped sign wave, save the image under the name <em>secant-tangent-python.pdf<\/em>.  This is particularly nice since the code which created the image is embedded within the document.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Be sure to include <strong>\\usepackage[executable=python.exe]{pyluatex} % Because I&#8217;m using Python<\/strong> to load the <em>pyluatex<\/em> package. The optional argument <strong>executable=python.exe<\/strong> is used to specify which Python interpreter is to be run. This is particularly useful when there are multiple Python environments.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For some things to work properly, you will need to make sure that your IDE includes <strong>&#8211;shell-escape<\/strong> flag to <strong>lualatex.exe<\/strong>. This allows external programs to be executed and allows <strong>lualatex.ext<\/strong> to run <strong>python.exe<\/strong>.  For example, you might run <strong>lualatex &#8211;shell-escape my_document.tex<\/strong> in the command line or configure the IDE. <em>This can be dangerous as it allows LaTeX to execute any command line script on your machine. Code from an external source can be dangerous!<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\\begin{python}\nimport numpy as np \nimport matplotlib.pyplot as plt \n\nx = np.linspace(-4, 6, 1000) \nf = -x**3 + 4*x**2 - x - 6 \n\nl1 = -13*x\/4 + 3 \nl2 = 5*x\/4 - 15\/4 \nl3 = 15*x\/4 - 15\/2 \nl4 = 17*x\/4 - 33\/4 \n\nfig, ax = plt.subplots(figsize=(8, 3)) \n\nax.plot(x, f, color='blue', linewidth=2, label='f(x) = -x^3+4x^2-x-6') \nax.plot(x, l1, '--', color='red', linewidth=1.5, label='y = -13x\/4 + 3') \nax.plot(x, l2, '--', color='green', linewidth=1.5, label='y = 5x\/4 - 15\/4') \nax.plot(x, l3, '--', color='brown', linewidth=1.5, label='y = 15x\/4 - 15\/2') \nax.plot(x, l4, color='black', linewidth=1.5, label='y = 17x\/4 - 33\/4') \n\nx0, y0 = 3\/2, -15\/8 \nax.plot(x0, y0, 'ko', markersize=6) \nax.plot(-3\/2, 63\/8, 'ro') \nax.plot(-1\/2, -35\/8, 'go', markersize=6) \nax.plot(1\/2, -45\/8, 'o', color = 'brown', markersize=6) \n\nax.set_xlim(x.min(), x.max()) \nax.set_ylim(-10, 10) \nax.axhline(0, color='gray', lw=0.6) \nax.axvline(0, color='gray', lw=0.6) \nax.set_xlabel('x')\nax.set_ylabel('y') \nax.legend(loc='best', fontsize=9) \nax.grid(alpha=0.3)\n\nfig.savefig('secant-tangent-python.pdf')\nplt.close()\n\\end{python}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The next few lines of code will include the image using the ideas above.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>% Display the figure.\n\\begin{figure}&#91;ht]\n\t\\centering\n\t\\includegraphics&#91;width=\\linewidth, alt={The graph of $f(x)$ with its tangent line and several secant lines.}]{secant-tangent-python.pdf}\n\t\\caption{The graph of $f(x)$ with its tangent line and several secant lines. Generated by Python embedded in the \\LaTeX\\ document.}\\label{fig-sec-tan-2}\n\\end{figure}<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\">Tikz<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">TikZ is a common package for generating images. To make them accessible, you still <em>alt-text<\/em> and can include the optional caption and a label when wrapping with a <em>figure block<\/em>.  The following code snippet illustrates how to reference a TikZ figure. Note that within the <strong>\\begin{tikzpicture}<\/strong> block, there is <strong>{alt=TikZ figure.<\/strong> which generates alternative text.  A caption and referenceable label are done in the typical manner.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For some things to work properly, you will need to make sure that your IDE includes <strong>&#8211;shell-escape<\/strong> flag to <strong>lualatex.exe<\/strong>. This allows external programs to be executed and allows <strong>TikZ<\/strong> to use the added <strong>external<\/strong> library for enhanced speed. The TikZ library will create and store TikZ drawings as PDF files. Seek the documentation for more information about <em>externalization<\/em> as it is not covered on this page.  You will run <strong>lualatex &#8211;shell-escape my_document.tex<\/strong> in the command line or configure the IDE. <em>This can be dangerous as it allows LaTeX to execute any command line script on your machine. Code from an external source can be dangerous!<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Often people utilize TikZ to generate figures. See Figure~\\ref{fig-myTikZ}.\n\n\\begin{figure}&#91;h]\n\t\\centering\n\t\\begin{tikzpicture}&#91;\n\t\troundnode\/.style={circle, draw=green!60, fill=green!5, very thick, minimum size=7mm},\n\t\tsquarednode\/.style={rectangle, draw=red!60, fill=red!5, very thick, minimum size=5mm},\n\t\t]{alt=TikZ figure.}\n\t\t%Nodes\n\t\t\\node&#91;squarednode]      (maintopic)                              {2};\n\t\t\\node&#91;roundnode]        (uppercircle)       &#91;above=of maintopic] {1};\n\t\t\\node&#91;squarednode]      (rightsquare)       &#91;right=of maintopic] {3};\n\t\t\\node&#91;roundnode]        (lowercircle)       &#91;below=of maintopic] {4};\n\t\t\n\t\t%Lines\n\t\t\\draw&#91;-&gt;] (uppercircle.south) -- (maintopic.north);\n\t\t\\draw&#91;-&gt;] (maintopic.east) -- (rightsquare.west);\n\t\t\\draw&#91;-&gt;] (rightsquare.south) .. controls +(down:7mm) and +(right:7mm) .. (lowercircle.east);\n\t\\end{tikzpicture}\n\t\\caption{My nice TikZ figure.}\\label{fig-myTikZ}\n\\end{figure}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">References<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Below are some links for more information.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/latex3.github.io\/tagging-project\/\" data-type=\"link\" data-id=\"https:\/\/latex3.github.io\/tagging-project\/\">The LaTeX Tagged PDF Project<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pdfa.org\/resource\/iso-14289-pdfua\/\" data-type=\"link\" data-id=\"https:\/\/pdfa.org\/resource\/iso-14289-pdfua\/\">PDF Association ISO 14289-1<\/a> PDF\/UA-1<\/li>\n\n\n\n<li><a href=\"https:\/\/pdfa.org\/iso-14289-2-pdfua-2\/\" data-type=\"link\" data-id=\"https:\/\/pdfa.org\/iso-14289-2-pdfua-2\/\">PDF Association ISO 14289-2<\/a> PDF\/UA-2<\/li>\n\n\n\n<li><a href=\"https:\/\/latex3.github.io\/tagging-project\/documentation\/wtpdf\/larger-example\" data-type=\"link\" data-id=\"https:\/\/latex3.github.io\/tagging-project\/documentation\/wtpdf\/larger-example\">Generate (Small) Tagged PDF Documents<\/a> Used to create (smallish) PDF documents using <em>lualatex-dev<\/em> in TeXLive 2025.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Setup Used LaTeX is used by many for the creation of PDF documents. Here we explore how to make such PDFs documents accessible. TeXLive 2026 is utilized and the document &#8230;<\/p>\n","protected":false},"author":1002,"featured_media":580,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-fullwidth.php","meta":{"_acf_changed":false,"inline_featured_image":false,"advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","footnotes":""},"class_list":["post-2420","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"coauthors":[],"author_meta":{"author_link":"https:\/\/www.tarleton.edu\/math\/author\/emmerttarleton-edu\/","display_name":"Emmert, Dr. Keith"},"relative_dates":{"created":"Posted 2 days ago","modified":"Updated 2 days ago"},"absolute_dates":{"created":"Posted on July 29, 2026","modified":"Updated on July 29, 2026"},"absolute_dates_time":{"created":"Posted on July 29, 2026 2:02 pm","modified":"Updated on July 29, 2026 4:52 pm"},"featured_img_caption":"","featured_img":false,"series_order":"","_links":{"self":[{"href":"https:\/\/www.tarleton.edu\/math\/wp-json\/wp\/v2\/pages\/2420","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tarleton.edu\/math\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.tarleton.edu\/math\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.tarleton.edu\/math\/wp-json\/wp\/v2\/users\/1002"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tarleton.edu\/math\/wp-json\/wp\/v2\/comments?post=2420"}],"version-history":[{"count":42,"href":"https:\/\/www.tarleton.edu\/math\/wp-json\/wp\/v2\/pages\/2420\/revisions"}],"predecessor-version":[{"id":2607,"href":"https:\/\/www.tarleton.edu\/math\/wp-json\/wp\/v2\/pages\/2420\/revisions\/2607"}],"wp:attachment":[{"href":"https:\/\/www.tarleton.edu\/math\/wp-json\/wp\/v2\/media?parent=2420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}