• What is the best geometry configuration for a standard novel of a large size?
    by Cham on July 9, 2026 at 8:00 pm

    I'm writing a large science-fiction novel and currently set my geometry package to a default 8.5 x 11'' standard format, and it's all fine. But I'm curious of the way it would look like once reduced to a typical novel size, as found in libraries. So what should be the configuration I should use for the geometry package, to get all the pages and margins to a typical "large size" novel? I believe it's 6 x 9" (but I need to work in cm for an eventual French publisher), and I know nothing about the margins used. I'm looking for something that looks like the Dune novel (Frank Herbert), in the Robert Laffont publisher, as an example, or maybe something like the large versions of The Lord of the Rings (Tolkien). Also, what line spacing and font size should I use for this kind of novel? 12pt is clearly too large, but I'm wondering about 10pt or 11pt, or even something in between? Here's the MWE code I'm playing with: \documentclass[11pt,twoside]{book} \usepackage[T1]{fontenc} \usepackage[tt=false]{libertinus} \usepackage[french]{babel} \usepackage[stretch=50]{microtype} \usepackage[ papersize={14.8cm,21cm}, % Format A5 inner=2cm, outer=1.5cm, top=2cm, bottom=2cm, headheight=14pt, includeheadfoot, showframe ]{geometry} %\usepackage{setspace} \raggedbottom %\onehalfspacing %\setstretch{1.25} \setlength{\parindent}{1.5em} % Indentation de première ligne des paragraphes. \linespread{1.1} %\setlength{\parskip}{0pt} % Espacement des paragraphes. \usepackage[bottom,symbol,perpage]{footmisc} \usepackage{titlesec} \usepackage{fancyhdr} \pagestyle{fancy} \fancyhf{} \fancyfoot[C]{\thepage} \fancyfoot[LO,RE]{\small\nouppercase{\textcopyright Copyright notice}} \fancyhead[CE]{\normalsize\scshape\nouppercase{Novel title}} \fancyhead[CO]{\normalsize\itshape\nouppercase{\leftmark}} \titleformat{\chapter}[display]{\normalfont\huge\bfseries\centering}{\chaptertitlename\ \thechapter}{20pt}{\Huge} \usepackage{blindtext} \begin{document} \mainmatter \pagestyle{fancy} \chapter{Chapter title} \Blindtext \end{document}

  • Simulating a granular concrete surface texture in TikZ
    by Sebastiano on July 9, 2026 at 4:06 pm

    I have this my image in Adobe Illustrator. How can I simulate a coarse-grained concrete surface with the libraries? \documentclass{article} \usepackage{tikz} \usetikzlibrary{patterns} \begin{document} \begin{tikzpicture}[scale=1] \draw[->,thick] (-3.2,-1.65)--(4.3,-1.65) node[below right] {$x$}; % ground \fill[pattern=north east lines,pattern color=gray] (-3.2,-1.9) rectangle (4,-1.65); \end{tikzpicture} \end{document}

  • issue: cleveref and unicode-math print the label below figures
    by mayonnaise on July 9, 2026 at 3:28 pm

    I have the following MWE: \documentclass[]{article} \usepackage{fontspec} \usepackage{unicode-math} \usepackage[colorlinks=false,linktocpage=true]{hyperref} \usepackage{cleveref} \begin{document} \begin{figure}[htbp] \centering \caption{Here is a caption} \label{thelabel} \end{figure} \end{document} and in the PDF, below the caption is printed "helabel", centered and in the same font family. If I disable either cleveref or unicode-math, the problem disappears (though it seems to come back with certain packages, such as \usepackage{mhchem}) I'm using ubuntu, texlive 2025 and VScode with the Latex Workshop extension. Thank you for your help

  • Save label and caption for later use
    by Manuel Schmidt on July 9, 2026 at 2:25 pm

    I am trying to figure out why tufte-latex [labels][1] are broken after I updated texlive using LuaLatex The following MWE has the problematic parts from tufte-latex and shows that the unicode-math package interferes with the boxes defined by tufte-latex. \documentclass{article} \makeatletter \usepackage{graphicx} \usepackage{etoolbox} \usepackage{unicode-math} % <- remove this \newsavebox{\@tufte@figure@box} \newsavebox{\@tufte@caption@box} \newcommand{\@tufte@stored@caption}{} \newcommand{\@tufte@stored@label}{} \NewDocumentEnvironment {afigure}{}{% \begin{figure} \NewCommandCopy\@tufte@orig@caption\caption \NewCommandCopy\@tufte@orig@label\label % store caption and label \RenewDocumentCommand{\caption}{O{0pt}m}{\gdef\@tufte@stored@caption{##2}}% \RenewDocumentCommand{\label}{m}{\gdef\@tufte@stored@label{##1}}% % build figure box for later use \begin{lrbox}{\@tufte@figure@box}% \begin{minipage}[t]{\linewidth} }{% \end{minipage}% \end{lrbox}% % build caption box (this goes into the margin in tufte) \begin{lrbox}{\@tufte@caption@box}% \begin{minipage}[t]{\marginparwidth} \@tufte@orig@caption{\@tufte@stored@caption} \@tufte@orig@label{\@tufte@stored@label} \end{minipage}% \end{lrbox}% \begin{minipage}[t]{\linewidth} \usebox{\@tufte@figure@box} \usebox{\@tufte@caption@box} \end{minipage} \end{figure} } \makeatother \begin{document} \begin{afigure} \includegraphics[width=3cm]{example-grid-100x100pt} \caption{grid} \label{grid} \end{afigure} Label of Fig~\ref{grid}. \end{document}

  • Fixed spacing and hanging indentation in imakeidx index
    by test on July 9, 2026 at 1:11 pm

    I am currently working on the index of my dissertation, and my supervisor has requested that there be a fixed horizontal space between the index entries and the page numbers. In addition, if either an entry or its page numbers wrap onto a second line, the continuation line should always be indented by 0.4 cm. How can I achieve this? I have read in several forum posts that this cannot be done with imakeidx and that I would need to switch to xindy. Is that correct? Just to make sure, this is the layout I am trying to achieve: Genesis 1–3 9 1, 2100 1 1, 800 2, 4, 6, 8, 11, 18, 20, 15, 22, 25, 30 1, 91111- 22222 4 Here is my MWE: \documentclass{scrbook} \usepackage{imakeidx} \usepackage{hyperref} \makeindex \begin{document} \section{First section} Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam rutrum aliquet elit in pellentesque. Proin nulla eros, consequat nec\index{1@pu} convallis vel, vulputate vitae purus\index{0@purusu rusuru surus Schönheitswahnsinn}. Pellentesque consequat euismod sapien, ac porttitor diam laoreet id. Pellentesque habitant morbi tristique senectus\index{senectus} et netus et malesuada fames ac turpis egestas. Sed vehicula magna orci, nec congue sem congue ac. Sed fringilla aliquam interdum. Nullam quis commodo massa.\index{Schönheitswahnsinn abc def ghi jklmnopq} \pagebreak A \pagebreak TEST \pagebreak Test \pagebreak B \index{0@Genesis!1} \pagebreak C \pagebreak Test \pagebreak Test \pagebreak Test \index{0@Exodus!2, 100} \printindex \end{document}

  • Different characters pasted depending on fontspec option Renderer=OpenType active or not
    by Denis Bitouzé on July 9, 2026 at 1:07 pm

    Consider the following MCE compiled with lualatex: \documentclass{article} \usepackage{fontspec} \setmonofont{RobotoMono-Regular.ttf}[ % Renderer=OpenType ] \begin{document} \texttt{/} \end{document} From the PDF produced, if the / character is copied, it is pasted as expected, i.e. as a “slash” (/), also known as “solidus”: codepoint 47, #o57, #x2f. But, if Renderer=OpenType is uncommented, the / character is pasted as a “division slash” (∕): codepoint 8725, #o21025, #x2215. How can we explain this strange behavior?

  • Colouring words using text colour of title block
    by Jo Jo on July 9, 2026 at 12:36 pm

    How can I use the text colour of a block title in some words of regular text in a frame? Below, find a code (of course, I have to replace \color{blue} by something else that gives the colour of the text in title block) \documentclass{beamer} \usetheme{AnnArbor} \begin{document} \begin{frame} \begin{block}{My title} This is block \end{block} Let me colour this {\color{blue}WORD} with title colour block \end{frame} \end{document}

  • Unicode-math interferes with float
    by Manuel Schmidt on July 9, 2026 at 11:49 am

    I am trying to figure out why tufte-latex labels are broken after I updated texlive using LuaLatex The following MWE has the problematic parts from tufte-latex and shows that the unicode-math package interferes with @float used by tufte-latex. \documentclass{article} \makeatletter \usepackage{unicode-math} % <- remove this \usepackage{graphicx} \usepackage{etoolbox} \newcommand{\@tufte@stored@caption}{} \newcommand{\@tufte@stored@label}{} \NewDocumentEnvironment { afigure }{ }{ \global\let\@tufte@orig@caption\caption% \global\let\@tufte@orig@label\label% % store caption and caption offset \RenewDocumentCommand{\caption}{O{0pt}m}{\gdef\@tufte@stored@caption{##2}}% % store label \RenewDocumentCommand{\label}{m}{\gdef\@tufte@stored@label{##1}}% \begin{figure} }{ \@tufte@orig@caption{\@tufte@stored@caption} \@tufte@orig@label{\@tufte@stored@label} \end{figure} } \makeatother \begin{document} \begin{afigure} \includegraphics[width=3cm]{example-grid-100x100pt} \caption{grid} \label{grid} \end{afigure} Label of Fig~\ref{grid} \end{document} With unicode-math, the \ref just shows ??. Without unicode-math, the correct label Fig. 1 is shown. Any idea how I can fix this?

  • Programmatically set the length of TikZ line so that both itself and an east anchored node at its starting point have a given length
    by Denis Bitouzé on July 9, 2026 at 10:18 am

    I would like to draw a TikZ line with an east anchored node at its starting point, such that both the line and the node globally having a given width. For example, in the following MCE example, how can I programmatically set the length \mywidth so that the line and the “Foo” node have a combined length of 50 mm? \documentclass{article} \usepackage{tikz} \usepackage[showframe,type=alledgesT]{fgruler} \newlength\mywidth \setlength\mywidth{40mm} \begin{document} \noindent% \tikz \draw (0,0) node[anchor=east,draw] {Foo} -- (\mywidth,0); \end{document}

  • Count the number of no-empty delimited arguments
    by myhsia on July 9, 2026 at 8:31 am

    I defined a function \__foo:w #1+#2+#3, like the MWE below \documentclass{article} \begin{document} \ExplSyntaxOn \cs_new:Npn \__foo:w #1 + #2 + #3 \q_stop { \textbf{#1},~ \textit{#2} \tl_if_blank:eF {#3} { ,~ \texttt{#3} } } \__foo:w tex + live + 2026 \q_stop % \__foo:w tex+live \q_stop \ExplSyntaxOff \end{document} But if users use \foo:w tex+live, due to the second delimiter + could not be founded, then error arises: File ended while scanning use of \foo:w <inserted text> Certainly, I know I can use l3seq, but I think it is not an elegant way. Is there a way to allow the usage \__foo:w tex+live \q_stop? Note \textbf, \textit, \texttt are just for demoing; in fact, I will use other personal defined functions.

  • How to make a relatively more beautiful classification table of quadratic functions?
    by D G on July 9, 2026 at 12:16 am

    Objectives: remove top left cell all contents are vertically and horizontally centered well balanced padding in each cell make it relatively much more beautiful \documentclass[12pt,border=12pt]{standalone} \usepackage{amsmath,array,tikz} \usetikzlibrary{math} \newcommand{\graph}[2][]{ \begin{tikzpicture}[baseline=(current bounding box.center)] \draw[blue,thick,->] (-1.5,#2)--(1.5,#2) node[right]{$x$}; \draw[red,thick,domain=-1.5:1.5,samples=100] plot(\x,{#1\x*\x/2}); \end{tikzpicture} } \renewcommand{\arraystretch}{1.8} \setlength{\tabcolsep}{18pt} \begin{document} \begin{tabular}{| >{\centering\arraybackslash}m{2.2cm}| >{\centering\arraybackslash}m{5.2cm}| >{\centering\arraybackslash}m{5.2cm}|} \cline{2-3} & $\mathbf{a>0}$ & $\mathbf{a<0}$ \\ \hline $\mathbf{D<0}$ & \graph{-1/2} & \graph[-]{1/2} \\ \hline $\mathbf{D=0}$ & \graph{0} & \graph[-]{0} \\ \hline $\mathbf{D>0}$ & \graph{1/2} & \graph[-]{-1/2} \\ \hline \end{tabular} \end{document} Any improvements are always welcome!

  • Inside a longtblr, how can I split an itemize list — wrapped in a minipage — across pages?
    by Ommo on July 8, 2026 at 9:54 pm

    I found that "itemize" works inside "longtblr" when it is wrapped with a "minipage": \usepackage [ a4paper, left = 0.2cm, right = 0.2cm, top = 0.1cm, bottom = 0.2cm, ] {geometry} \usepackage{tabularray} \usepackage{lipsum} \newcommand{\rowgap}{10pt} \begin{document} \begin{center} \DefTblrTemplate{firsthead, middlehead,lasthead}{default}{} \begin{longtblr}[presep=-4pt,postsep=0pt] {colspec = {p{3.2cm}X},width=\textwidth,colsep=0pt,rowsep=0pt} 1 December 1871 & Some intro text:\\ & \lipsum[1-3] \\[\rowgap] 15 June 2016 & Some text:\\ & \begin{minipage}[t]{\linewidth} \begin{itemize} \item \lipsum[7] \item \lipsum[8] \item \lipsum[9] \end{itemize} \end{minipage} \\[\rowgap] 30 March 2051 & Other intro text:\\ & Hello man! \\[\rowgap] \end{longtblr} \end{center} \end{document} That code produces the following output: However, if one of the "itemize" entries is made longer, for example, \item \lipsum[7] \item \lipsum[8] \item \lipsum[9-11] the "minipage" prevents the "itemize" environment from breaking across pages. As a result, the entire list is moved to the second page instead of being split between the first and second pages, producing the following output: My question: inside a "longtblr", how can I split an "itemize" list — wrapped in a "minipage" — across pages? Should I wrap my "itemize" list in a different environment that allows it to split across pages? If so, which one? Are there any other solutions for using "itemize" inside "longtblr"? EDIT (9 July 2026): Thanks, everyone, for your comments! I realize I didn't explain why I chose to use a table here. My intention is to take advantage of some features that — to my understanding — are specific to the table environment. For example, the ability to highlight particular rows and columns by applying different colors: \documentclass[11pt,english]{article} \usepackage [ a4paper, left = 0.2cm, right = 0.2cm, top = 0.1cm, bottom = 0.2cm, ] {geometry} \usepackage{tabularray} \usepackage{lipsum} \newcommand{\rowgap}{10pt} \usepackage{xcolor} \definecolor{MyColor1}{rgb}{0.22,0.45,0.70} % light blue \definecolor{MyColor2}{rgb}{0.55,0.75,0.65} % mint green \begin{document} \begin{center} \DefTblrTemplate{firsthead, middlehead,lasthead}{default}{} \begin{longtblr}[presep=-4pt,postsep=0pt] {colspec = {p{3.2cm}X},width=\textwidth,colsep=0pt,rowsep=0pt} 1 December 1871 & Some intro text:\\ & \lipsum[1-3] \\[\rowgap] \SetRow{bg=MyColor1!20} 15 June 2016 & Some text:\\ & \begin{minipage}[t]{\linewidth} \begin{itemize} \item \lipsum[7] \item \lipsum[8] \item \lipsum[9] \end{itemize} \end{minipage} \\[\rowgap] \SetRow{bg=MyColor2!20} 30 March 2051 & Other intro text:\\ & Hello man! \\[\rowgap] \end{longtblr} \end{center} \end{document} Which gives this output: I was therefore wondering whether \begin{description} ... \end{description} can provide the same functionality. So far, I have not been able to find a way to reproduce this feature within the "description" environment.

  • latexml: shows on web page
    by Nasser on July 8, 2026 at 5:26 pm

    this mwe \documentclass{article} \usepackage{longtable} \title{A longtable example} \begin{document} \begin{center} \begin{longtable}{|l|l|l|} \caption{A sample long table.} \label{tab:long} \\\hline One & abcdef ghjijklmn & 123.456778 \\ One & abcdef ghjijklmn & 123.456778 \\ One & abcdef ghjijklmn & 123.456778 \\ One & abcdef ghjijklmn & 123.456778 \\ One & abcdef ghjijklmn & 123.456778 \\\hline \end{longtable} \end{center} \end{document} Compiled using latexml 0.8.8 >latexml --dest=B.xml B.tex latexml (LaTeXML version 0.8.8) processing B.tex Conversion complete: No obvious problems (reqd. 0.69s) >latexmlpost --format=html5 --dest=B.htm B.xml latexmlpost (LaTeXML version 0.8.8) paginating /mnt/g/public_html/my_notes/solving_ODE/current_version/TESTS/dvi_optimize/B.xml Postprocessing complete No obvious problems (reqd. 0.08s) The HTML shows this The raw HTML is &lt;!DOCTYPE html&gt;<html lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>A longtable example</title> <!--Generated on Wed Jul 8 12:33:43 2026 by LaTeXML (version 0.8.8) http://dlmf.nist.gov/LaTeXML/.--> <link rel="stylesheet" href="LaTeXML.css" type="text/css"> <link rel="stylesheet" href="ltx-article.css" type="text/css"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> </head> <body> ... Why does this happen with this input and is there a solution? which latexml /usr/bin/latexml Update Here is minimal example. It still happens. >cat B.tex \documentclass{article} \begin{document} text \end{document} > and >latexml --dest=B.xml B.tex latexml (LaTeXML version 0.8.8) processing B.tex Conversion complete: No obvious problems (reqd. 0.70s) >latexmlpost --format=html5 --dest=B.htm B.xml latexmlpost (LaTeXML version 0.8.8) paginating /mnt/g/public_html/my_notes/solving_ODE/current_version/TESTS/dvi_optimize/B.xml Postprocessing complete No obvious problems (reqd. 0.08s) > and >cat B.htm &lt;!DOCTYPE html&gt;<html lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Untitled Document</title> <!--Generated on Wed Jul 8 13:32:28 2026 by LaTeXML (version 0.8.8) http://dlmf.nist.gov/LaTeXML/.--> I am using WSL 1.0 linux under windows 10. Do not know if this has anything to do with this. >which perl /usr/bin/perl >perl --version This is perl 5, version 38, subversion 2 (v5.38.2) built for x86_64-linux-gnu-thread-multi

  • tex4ht: error on longtable ! Misplaced \noalign
    by Nasser on July 8, 2026 at 5:04 pm

    This MWE \documentclass{article} \usepackage{longtable} \title{A longtable example} \begin{document} \begin{center} \begin{longtable}{|l|l|l|} \caption{A sample long table.} \label{tab:long} \\ \hline \multicolumn{1}{|c|}{\textbf{First column}} & \multicolumn{1}{c|}{\textbf{Second column}} & \multicolumn{1}{c|}{\textbf{Third column}} \\ \hline \endfirsthead \multicolumn{3}{c}% {{\bfseries \tablename\ \thetable{} -- continued from previous page}} \\ \hline \multicolumn{1}{|c|}{\textbf{First column}} & \multicolumn{1}{c|}{\textbf{Second column}} & \multicolumn{1}{c|}{\textbf{Third column}} \\ \endhead \multicolumn{3}{|r|}{{Continued on next page}} \\ \endfoot \hline \endlastfoot One & abcdef ghjijklmn & 123.456778 \\ One & abcdef ghjijklmn & 123.456778 \\ One & abcdef ghjijklmn & 123.456778 \\ One & abcdef ghjijklmn & 123.456778 \\ One & abcdef ghjijklmn & 123.456778 \end{longtable} \end{center} \end{document} compiles OK with lualatex lualatex B.tex This is LuaHBTeX, Version 1.26.3 (TeX Live 2027/dev) restricted system commands enabled. (./B.tex LaTeX2e <2025-11-01> L3 programming layer <2026-03-20> (/usr/local/texlive/2026/texmf-dist/tex/latex/base/article.cls Document Class: article 2025/01/22 v1.4n Standard LaTeX document class (/usr/local/texlive/2026/texmf-dist/tex/latex/base/size10.clo)) (/usr/local/texlive/2026/texmf-dist/tex/latex/tools/longtable.sty) (/usr/local/texlive/2026/texmf-dist/tex/latex/l3backend/l3backend-luatex.def) No file B.aux. [1 Non-PDF special ignored!{/usr/local/texlive/2026/texmf-var/fonts/map/pdftex/upd map/pdftex.map}] (./B.aux) LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right. ) 426 words of node memory still in use: 3 hlist, 1 vlist, 1 rule, 2 glue, 3 kern, 1 glyph, 4 attribute, 52 glue_spec , 4 attribute_list, 1 write nodes avail lists: 2:268,3:42,4:2,5:37,6:2,7:904,9:222,10:1,11:28 </usr/local/texlive/2026/texmf-dist/fonts/opentype/public/lm/lmroman10-bold.otf ></usr/local/texlive/2026/texmf-dist/fonts/opentype/public/lm/lmroman10-regular .otf> Output written on B.pdf (1 page, 8949 bytes). Transcript written on B.log. and gives But gives compile error with tex4ht: make4ht -ulm default -a debug B.tex "mathjax,htm" ... This is LuaTeX, Version 1.26.3 (TeX Live 2027/dev) restricted system commands enabled. LaTeX2e <2025-11-01> L3 programming layer <2026-03-20> .... (/usr/local/texlive/2026/texmf-dist/tex/latex/l3backend/l3backend-dvips.def) (./B.aux) (/usr/local/texlive/2026/texmf-dist/tex/latex/lm/ot1lmtt.fd) ! Misplaced \noalign. \a:hline ->\ifx \ar:cnt \:UnDef \else \o:noalign: {\append:def \hline:s {\a:... l.13 \hline \multicolumn{1}{|c|}{\textbf{First column}} & \multicolumn{1}{c|... ? Why does this happen? Since the code compiles OK with lualatex, should it not also compile OK with tex4ht? TL 2026 >which make4ht /usr/local/texlive/2026/bin/x86_64-linux/make4ht >make4ht --version make4ht version v0.4e

  • How to escape @ character while inputting a file in TeXInfo?
    by niru on July 8, 2026 at 1:58 pm

    I want to load luaotfload.sty with TeXInfo and here is my minimal code: \input texinfo @documentencoding UTF-8 @setfilename sample.info @settitle sample @include luaotfload.sty @bye If I use PDFTEX=luatex texi2pdf inn.texi, it produces the following: : Undefined control sequence. l.3 %% by Elie Roux <elie.roux@telecom -bretagne.eu> ? If I understand correctly, TeXInfo treats @ as a special character and turns the words following it into TeX control sequences, but the issue is that it should ignore TeX comments, which it is not. This could be a bug, but I thought I might have missed something very obvious.

  • Trail or trace of a moving charged particle
    by Sebastiano on July 8, 2026 at 12:31 pm

    I think in 2019 I built the following image with Adobe Illustrator for my book. Now, since there are so many images in pdf, I am slowly creating them in TikZ code. I wanted to know if there is something to create a trail for the blue particle similar to the main image or any other idea you have. Thank you. \documentclass{article} \usepackage{tikz} \usetikzlibrary{arrows.meta} \tikzset{rhtip/.tip={Triangle[line width=1pt, fill=white, length=9pt, width=9pt]}, pics/clock/.style args={#1/#2}{ code={ \def\dist{0.38} \draw[thin] (0,0) circle (\dist); \draw[line width=.7pt] (0,0) -- ({0.16*cos(90-30*#1-0.5*#2)}, {0.16*sin(90-30*#1-0.5*#2)}); \draw[line width=.7pt] (0,0) -- ({0.28*cos(90-6*#2)}, {0.28*sin(90-6*#2)}); } } } \begin{document} \begin{tikzpicture}[scale=.8] \draw[->] (0,0) -- (4.8,0) node[right] {$x$}; \draw[->] (0,0) -- (0,4.8) node[above] {$z$}; \draw[->] (0,0) -- (1.8,1.1) node[above] {$y$}; \node at (-0.4,4.3) {$\Sigma$}; \shade[ball color=cyan] (2.7,1.2) circle (0.2); \draw[brown!80!black,line width=2pt,-rhtip] (2.9,1.2)--(3.8,1.2) node[midway,above left] {$\mathbf{u}$}; \pic at (2.5,2.5) {clock={1/10}}; \node[blue!60!black] at (3.35,2.9) {$C(u)$}; \begin{scope}[shift={(5,1)}] \draw[->] (0,0)--(4.5,0) node[right] {$x'$}; \draw[->] (0,0)--(0,4.8) node[above] {$z'$}; \draw[->] (0,0)--(1.8,1.1) node[above] {$y'$}; \node at (-0.4,4.3) {$\Sigma'$}; \draw[magenta,line width=2pt,-rhtip] (0,3.6)--(1.8,3.6) node[midway,above] {$\mathbf{v}$}; \draw[green!60!black,line width=2pt,-rhtip] (2.1,1.3)--(3.7,1.3) node[midway,below] {$\mathbf{u}'$}; \pic at (2.5,2.5) {clock={2/20}}; \node[blue!60!black] at (3.55,2.9) {$C'(u')$}; \end{scope} \end{tikzpicture} \end{document}

  • How to custom arrow style with `chemfig` within `\hreac`?
    by Explorer on July 8, 2026 at 12:23 pm

    This post is the follow-up of my previous question and jlab's answer, together with the comment: You can't use custom arrows with \hreac. It's why I redefined an existing one. Here below is the code to show "You can't use custom arrows with \hreac." % https://tex.stackexchange.com/a/764525 % https://tex.stackexchange.com/a/484655 \documentclass{article} \usepackage{chemfig} \ExplSyntaxOn \definearrow3{===}{% \CF_arrowshiftnodes{#3}% \path[allow ~ upside ~ down](\CF_arrowstartnode)--(\CF_arrowendnode)% node[pos=0,sloped,yshift=\CF_arrowdoublesep](\CF_arrowstartnode @u0){}% node[pos=0,sloped,yshift=-\CF_arrowdoublesep](\CF_arrowstartnode @d0){}% node[pos=1,sloped,yshift=\CF_arrowdoublesep](\CF_arrowstartnode @u1){}% node[pos=1,sloped,yshift=-\CF_arrowdoublesep](\CF_arrowstartnode @d1){};% \draw (\CF_arrowstartnode @u0)--(\CF_arrowstartnode @u1);% \draw (\CF_arrowstartnode @d1)--(\CF_arrowstartnode @d0);% \CF_arrowdisplaylabel{#1}{0.5}+\CF_arrowstartnode{#2}{0.5}-\CF_arrowendnode% } \ExplSyntaxOff \begin{document} \schemestart A\arrow{===}B \schemestop \hreac A >{===} B \endhreac \end{document} The custom arrow style === here, was allowed in \schemestart...\schemeend, but NOT within \hreac...\endhreac: \CF_error ...e {Package \CFname \space Error: #1.} l.28 >{===} ? Any suggestion on allowing === with \hreac? IMHO, === was common-seen with stoichiometric equation (see texdoc chemformula, sec 9. Arrows). If possible, if chemfig could provide more user-friendly interface to custom arrow, that would be better.

  • Nomenclature in 4 columns in 2 column document
    by Hkp on July 8, 2026 at 8:13 am

    I am trying to create a two-column nomenclature section in LaTeX. My goal is to have the nomenclature entries fill the first column and then continue automatically in the second column on the same page (similar to the normal behavior of a two-column document). I am currently using the following code: \input{nomenclature} \begin{multicols}{2} \printnomenclature[0.06\textwidth] \end{multicols} The code successfully creates two columns, but the nomenclature only fills the first column. Instead of continuing to the second column on the same page, it starts a new page. I have attached an example showing the issue. Could anyone please suggest how to fix this problem or recommend a better approach? Thank you very much for your help. Here is one one of my example with the same problem: \documentclass[10pt,twocolumn,a4paper]{article} \usepackage{nomencl} \makenomenclature \usepackage{multicol} \begin{document} \title{Test} \author{} \date{} \maketitle % Problematic part \begin{multicols}{2} \printnomenclature[0.06\textwidth] \end{multicols} \nomenclature[Y]{AR}{Aspect Ratio} \nomenclature[Y]{EOC}{Extended Outlet Channel} \nomenclature[Y]{HEx}{Heat Exchanger} %Roman \nomenclature[A]{$a$}{Dimensionless thermal diffusivity} \nomenclature[A]{${A_{cr,d}}$}{As-designed cross-sectional area of channels in the HEx} \nomenclature[A]{${A_{s,d}}$}{As-designed surface area of the channels in the HEx} \nomenclature[A]{${A_{s,Iso,eff.}}$}{Isolation effective surface area} \nomenclature[A]{$A_j$}{Eigenfunction coefficient} \nomenclature[A]{Bi}{Biot number} \nomenclature[A]{$c_{p,m}$}{Specific heat capacity under constant pressure} \nomenclature[A]{$c_{s}$}{Mean adiabatic speed of sound} \nomenclature[A]{$D_h$}{Hydraulic diameter} % Greek \nomenclature[G]{$\alpha$}{mean heat transfer coefficient (Biot number calculations)} \nomenclature[G]{$\alpha_{CWHF}$}{mean heat transfer coefficient with the constant wall heat flux calculation methodology} \nomenclature[G]{$\alpha_{CWT}$}{mean heat transfer coefficient with the constant wall temperature calculation methodology} \nomenclature[G]{$\Delta p$}{pressure drop} \nomenclature[G]{$\Delta\xi$}{standard error of the arithmetic mean} \nomenclature[G]{$\zeta$}{measured quantity} \nomenclature[G]{$\Theta$}{Dimensionless temperature} \nomenclature[G]{$\theta$}{Alternative dimensionless temperature notation (if used)} \nomenclature[G]{$\lambda$}{mean heat conductivity (Biot number calculations)} \nomenclature[G]{$\lambda_m$}{mean heat conductivity} \nomenclature[G]{$\lambda_j$}{Eigenvalue (j-th mode)} \nomenclature[G]{$\mu_m$}{mean dynamic viscosity} \nomenclature[G]{$\Phi_j$}{Eigenfunction (j-th mode)} \nomenclature[G]{$\xi$}{arithmetic mean} \nomenclature[G]{$\rho$}{mean density} \nomenclature[G]{$\sigma$}{standard deviation} % Subscripts \nomenclature[L]{$0$}{Reference (2D thermally fully developed length calculations)} \nomenclature[L]{$avg.$}{Average} \nomenclature[L]{$b$}{Bulk} \nomenclature[L]{$con$}{Contraction} \nomenclature[L]{$expn$}{Expansion} \nomenclature[L]{$h$}{Hydraulic} \nomenclature[L]{$hyd$}{Hydrodynamic} \nomenclature[L]{$i$}{individual data point over time} \nomenclature[L]{$in$}{Inlet} \nomenclature[L]{$j$}{individual measurement position at one axial position} \nomenclature[L]{$m$}{Mean} \nomenclature[L]{$out$}{Outlet} \nomenclature[L]{$w$}{Wall} \nomenclature[L]{$\infty$}{Infinity} \end{document} I also created one additional TEX file to create nomenclature: TEXFile name(without .tex extension)= latexmkrc add_cus_dep('nlo', 'nls', 0, 'makenomenclature'); sub makenomenclature { system("makeindex -s nomencl.ist -o \"$_[0].nls\" \"$_[0].nlo\""); }

  • How to tweak baseline in the state of chemical substances in chemfig `hreac` environment?
    by Explorer on July 8, 2026 at 8:11 am

    I want to replicate the following: Where (l) for liquid, and (g) for gas, now I have the following code: \documentclass{article} \usepackage[stixtwo]{fontsetup} \usepackage{chemfig} \usepackage{extarrows} \begin{document} \setchemfig{atom sep=1.5em} \hreac \chemfig{CO_2}(g) + \chemfig{[:210]O*3(--(-)-)}(g) % > ${}\xlongequal{\phantom{xxxx}}{}$ % not work with good baseline \chemfig{[:-90]O=*5(-O--(-)-O-)}(l) \endhreac \end{document}

  • How to prevent \setmainfont from affecting \mathbf in LaTeX? [duplicate]
    by Vincent on July 8, 2026 at 8:05 am

    I want to set the main text font to Arial using:\setmainfont{Arial} but I don't want the font used by \mathbf to be affected by Arial. I want \mathbf to keep the original default font. How can I achieve this? The following is my code: \documentclass{ctexart} \usepackage{amsmath,amssymb} \setmainfont{Arial} \begin{document} Hello world! with \verb|\setmainfont{Arial}| $\mathbf{N}_{+}$ \end{document} which gives: Noted that \mathbf also changed the N, which was not I was after, I want the Hello world! to be sans serif with Arial, while the \mathbf{N} gives the default bold N symbol with latinmodernmath.otf, the serif one as below:

  • Context: How to achieve the exact equivalent of LaTeX's [H] float placement for figures in ConTeXt? [duplicate]
    by Nasser on July 8, 2026 at 5:54 am

    ps. I had help with google AI working on this, but it could not figure how to do it either. I am translating a document from LaTeX to ConTeXt. In LaTeX, I use \begin{figure}[H] (from the float package) to entirely disable floating. It forces the image to stay exactly where it is written, and guarantees that any text written below the figure code stays below it on the page (instead of flowing backward to fill vertical gaps). I am trying to achieve this same behavior in ConTeXt using the export=yes backend, but my text written after the figure keeps jumping above it if the image is pushed to a new page. Here is my context code, and below that the latex code and screen shot showing the difference. context: \setupbackend[export=yes] \setupwhitespace[big] \starttext And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text \startplacefigure[ title={This is the figure caption}, reference={fig:myimage}, location={force,none} %location={here,always} ] \externalfigure[image][width=0.95\textwidth] \stopplacefigure THIS TEXT SHOULD ALWAYS BE BELOW the image above. \stoptext compiling using context B.tex gives Here is the latex compiled with lualatex \documentclass[12pt,oneside]{book} \usepackage{graphicx} \usepackage{float} \begin{document} And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text And this is some text. some random text \begin{figure}[H] \centering \includegraphics[width=0.95\textwidth]{example-image-a} \end{figure} THIS TEXT SHOULD ALWAYS BE BELOW the image above. \end{document} This is the PDF I have tried location={force}, location={here,always}, and location={force,none}, but none of them match the absolute non-floating behavior of [H]. If the image is large, the trailing text still flows backward to the previous page. How can I turn off floating entirely for a \startplacefigure block while preserving the automatic numbering, caption title, and cross-reference hook? TL 2026 on Linux. ps. google AI also asked me to add this to my question: "Mentions export=yes: This is critical because some custom box hacks in ConTeXt bypass the exporter. Telling them you need the XML export ensures they provide a solution that safely preserves your tags for your Python script."

  • tex4ht: different math generated for math in array on the HTML than PDF
    by Nasser on July 8, 2026 at 3:59 am

    This MWE \documentclass[12pt,oneside]{book} \usepackage{amsmath} \usepackage{array} \begin{document} \[ \begin {array}{>{\displaystyle }r @{\;} >{\displaystyle }l} y'&=y^{{1}/{3}}\\ y \left (0\right )&=1\\ \end {array} \] \end{document} compiled with lualatex gives But using make4ht -ulm default -a debug B.tex "mathjax,htm" gives The raw html is <!DOCTYPE html> <html lang='en-US' xml:lang='en-US'> <head><title></title> <meta charset='utf-8' /> <meta content='TeX4ht (https://tug.org/tex4ht/)' name='generator' /> <meta content='width=device-width,initial-scale=1' name='viewport' /> <link href='B.css' rel='stylesheet' type='text/css' /> <meta content='B.tex' name='src' /> <script>window.MathJax = { tex: { tags: "ams", }, }; </script> <script async='async' id='MathJax-script' src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml-full.js' type='text/javascript'></script> </head><body> <div class='mathjax-block'>\[ \begin {array}{&gt;{\displaystyle }r @{\;} &gt;{\displaystyle }l} y'&amp;=y^{{1}/{3}}\\ y \left (0\right )&amp;=1\\ \end {array} \]</div> </body> </html> Is there a way to fix the formatting in HTML so it is like the PDF (i.e. the spacings around the = is off in mathjax) ps. I know I can change the latex. But I have important reason for using \begin {array}{>{\displaystyle }r @{\;} >{\displaystyle }l} instead of say align or something else (too long to explain here, it depends on context I am using this latex code in). This is only a MWE to show the difference. So I do not want to change the latex code. ps. It should be possible to correct this using new mathjax configuration in my .cfg, but I am not sure how. I think I know of only one person who would know how to do this 🙂 Update Here is screen shot showing difference between fonts used by V 3.5 and V 4.0

  • Cleveref custom cross-reference type gets swallowed in presence of amsmath
    by Ben Steffan on July 7, 2026 at 5:51 pm

    I am trying to solve the same problem as the OP of this question, that is, set up some way to distinguish between equations and diagrams in a document and have it automatically be recognized by cleveref. The top answer there works beautifully... that is, as long as you don't load amsmath. If you do load it, then \cref will start referring to diagrams as equations again. For sake of self-containedness, here's an MWE based on that in the linked answer: \documentclass{article} \usepackage{tikz} \usetikzlibrary{cd} %\usepackage{amsmath} \usepackage{hyperref} \usepackage[noabbrev]{cleveref} \newcounter{diagram} \newenvironment{diagram}[1][]{% \begin{equation}% \begin{tikzcd}[#1]% \setcounter{diagram}{\value{equation}}% \addtocounter{diagram}{-1}% \refstepcounter{diagram}% }{% \end{tikzcd}% \end{equation}% } \crefname{diagram}{diagram}{diagrams} \creflabelformat{diagram}{(#2#1#3)} \begin{document} \begin{diagram}\label{diag:a} A \ar[r] & B \end{diagram} The above is \cref{diag:a}. \end{document} This produces the diagram together with "The above is diagram (1).", as desired. If you uncomment line 5, it instead produces the diagram with "The above is equation (1)." I'd be grateful for a solution with a similar use pattern that works in the presence of amsmath. In particular, I'd like to avoid the triple nesting \begin{diagram} \begin{equation} \begin{tikzcd} % ... \end{tikzcd} \end{equation} \end{diagram} that is common to the other answers at the linked question, if possible.

  • `hidden` attribute in `\HCode` removed unless given value
    by Stephen Powell on July 7, 2026 at 3:00 pm

    When I convert this file \documentclass{article} \begin{document} \HCode{<span hidden>}abc\HCode{</span>} \HCode{<span hidden="true">}def\HCode{</span>} \end{document} to HTML using make4ht (MikTeX 24.4), the relevant part of the output is: <span>abc </span> <span hidden='true'>def</span> It seems that the attribute hidden has been stripped from the first <span>, where it has no value, but kept in the second <span>, where it is given a (redundant) value. Is this the intended behavior or a bug? Is it documented somewhere?

  • Equation numbers with symbol not colored in the alignat environment
    by Sebastiano on July 7, 2026 at 1:18 pm

    Why are equation numbers not colored in the alignat environment? Equation numbers are colored correctly in equation (for example), but not in alignat. Is this expected behavior, or am I missing some configuration? Related: An elegant aspect for enumerate the equations of a book \documentclass{book} \usepackage[most,theorems, breakable,skins]{tcolorbox} \usepackage{mathtools,amssymb,amsthm} \usepackage[margin=1in]{geometry} \usepackage[svgnames, dvipsnames, table, x11names]{xcolor} \usepackage{pifont} \definecolor{ocre}{RGB}{243,102,25} %---------------------------------------------------------------------------------- % Change number equations with sections %---------------------------------------------------------------------------------- \usepackage{chngcntr} \counterwithin{equation}{section} \renewcommand{\theequation}{\thesection-\arabic{equation}} \newcommand{\eqnnumsymbol}{\textcolor{ocre}{\reflectbox{\ding{228}}}} \makeatletter \newtagform{bbrackets}% <name> [\textbf]% Internal style {(}% Left bracket {\ifnum\pdfstrcmp{\@currenvir}{equation}=0 \eqnnumsymbol% \else \ifnum\pdfstrcmp{\@currenvir}{align}=0 \eqnnumsymbol% \fi \fi )}% Right bracket \makeatother \usetagform{bbrackets} \newcounter{dummy} \numberwithin{dummy}{section} \theoremstyle{ocrenumbox} \newtheorem{theoremeT}[dummy]{Teorema} \newtheorem{problem}{Problema}[chapter] \newtheorem{exerciseT}{Esercizio}[chapter] \theoremstyle{blacknumex} \newtheorem{exampleT}{Esempio}[chapter] \theoremstyle{blacknumbox} \newtheorem{vocabulary}{Vocabolario}[chapter] \newtheorem{definitionT}{Definizione}[section] \newtheorem{corollaryT}[dummy]{Corollario} \newtheorem{lemmaT}[dummy]{Lemma} \newtheorem{osservationT}[dummy]{Osservazione} \theoremstyle{ocrenum} \newtheorem{propositionT}[dummy]{Proposizione} % Definition box \newtcolorbox{dBox}{ enhanced, breakable, colback=LightGoldenrodYellow, colframe=LightSlateGray, boxrule=0pt, borderline west={4pt}{0pt}{LightSlateGray}, sharp corners, left=5pt, right=5pt, top=2pt, bottom=5pt, before skip=7pt, after skip=7pt } \newenvironment{definition} {\begin{dBox}\begin{definitionT}} {\end{definitionT}\end{dBox}} \begin{document} \begin{definition} Data $y_{0}\in\mathcal{C}^{1}([a,b])$ e $\delta>0$ si definiscono due intorni di $y_{0}$: \begin{alignat}{2} \mathcal{I}_{\delta}^{0}(y_{0}) &=\{y\in\mathcal{C}^{1}([a,b])\colon d_{0}(y,y_{0})<\delta\} &\qquad& \text{\textbf{intorno forte} di $y_{0}$ in $\mathcal{C}^{1}([a,b])$,}\\ \mathcal{I}_{\delta}^{1}(y_{0}) &=\{y\in\mathcal{C}^{1}([a,b])\colon d_{1}(y,y_{0})<\delta\} && \text{\textbf{intorno debole} di $y_{0}$ in $\mathcal{C}^{1}([a,b])$.} \end{alignat} \begin{equation} \mathcal{I}_{\delta}^{0}(y_{0}) \end{equation} \end{definition} \begin{equation} \mathcal{I}_{\delta}^{0}(y_{0}) \end{equation} \end{document} Addendum %------------------------------------------------------------------- % Change number equations with sections with ding %------------------------------------------------------------------- \usepackage{chngcntr} \counterwithin{equation}{section} \newcommand{\eqnnumsymbol}{\textcolor{ocre}{\reflectbox{\ding{228}}}} \newcommand{\eqnformat}{% \ifnum\pdfstrcmp{\@currenvir}{equation}=0 \bfseries\sffamily% \else \ifnum\pdfstrcmp{\@currenvir}{align}=0 \bfseries\sffamily% \else \ifnum\pdfstrcmp{\@currenvir}{multline}=0 \bfseries\sffamily% \else \ifnum\pdfstrcmp{\@currenvir}{gather}=0 \bfseries\sffamily% \else \mdseries \fi\fi\fi\fi} \newtagform{bbrackets}% <name> [\eqnformat]% Internal style {(\bgroup}% {\ifnum\pdfstrcmp{\@currenvir}{equation}=0 \eqnnumsymbol% \else \ifnum\pdfstrcmp{\@currenvir}{align}=0 \eqnnumsymbol% \else \ifnum\pdfstrcmp{\@currenvir}{multline}=0 \eqnnumsymbol% \else \ifnum\pdfstrcmp{\@currenvir}{gather}=0 \eqnnumsymbol% \fi\fi\fi\fi \egroup)}% Right bracket \usetagform{bbrackets}

  • Vertically center cells in tabularray [duplicate]
    by Thomas on July 7, 2026 at 12:19 pm

    I'm trying to display three logos for the first slide of a presentation, that have various sizes and dimensions. I'm trying to align them vertically, but I do not manage to set the option of my tblr environment right. I found a silimar question on this forum, but the solution proposed (vertically center the last column only) is not working in my case. The example of this previous topic works well, but when I try to use it with my images, the other cells are no longer vertically centered but aligned at the bottom... Here is a MWE, I my beamer I use \includegraphics instead of the TikZ macros here, but the results is the same. \documentclass{article} \usepackage{tikz} \usepackage{tabularray} \newcommand{\logoA}{\tikz \draw [fill=red!50] (0,0) rectangle (2,1);} \newcommand{\logoB}{\tikz \draw [fill=blue!50!yellow] (0,0) rectangle (3,1);} \newcommand{\logoC}{\tikz \draw [fill=green!50] (0,0) circle (1.2cm);} \begin{document} \begin{tblr}{colspec = {Q[c,m]Q[c,m]Q[c,m]}} \hline \logoA & \logoB & \logoC \\ \hline % hline only for visualize the border of the table \end{tblr} \end{document}

  • Left indices for atoms
    by Brasil on July 6, 2026 at 10:03 pm

    Is it possible to right align the left upper and lower indices that characterize atomic properties using \chemfig? Example: \chemfig{^{14}_6C} prints out the following: However, I would like to have the following: How to get it? EDIT: adding a MWE \documentclass[border=1mm]{standalone} \usepackage{chemfig} \begin{document} \chemfig{^{14}_6C} \end{document}

  • Simplest way to fill format text using a loop, preferably using built in loops?
    by scribe on July 6, 2026 at 9:29 pm

    Here is what I want to do in LaTeX but in Python, data = [ ('path/to/file1', 'Caption for file1.', 'fig:label1'), ('path/to/file2', 'Caption for file2.', 'fig:label2'), ('path/to/file3', 'Caption for file3.', 'fig:label3'), ('path/to/file4', 'Caption for file4.', 'fig:label4') ] for entry in data: print( f'\\begin{{figure}}[htbp]\n\ \\centering\n\ \\includegraphics[width=0.8\\textwidth]{{{entry[0]}}}\n\ \\caption{{{entry[1]}}}\n\ \\label{{{entry[2]}}}\n\\end{{figure}}' ) This will result in the following text over the console, \begin{figure}[htbp] \centering \includegraphics[width=0.8\textwidth]{path/to/file1} \caption{Caption for file1.} \label{fig:label1} \end{figure} \begin{figure}[htbp] \centering \includegraphics[width=0.8\textwidth]{path/to/file2} \caption{Caption for file2.} \label{fig:label2} \end{figure} \begin{figure}[htbp] \centering \includegraphics[width=0.8\textwidth]{path/to/file3} \caption{Caption for file3.} \label{fig:label3} \end{figure} \begin{figure}[htbp] \centering \includegraphics[width=0.8\textwidth]{path/to/file4} \caption{Caption for file4.} \label{fig:label4} \end{figure} How do I do this but in LaTeX? I know how to run simple loops like shown here: https://www.dickimaw-books.com/latex/admin/html/docsvlist.shtml \newcommand*{\mylist}{Parrot,Canary,Zebra,Arara,Duck}% \makeatletter \@for\thisitem:=\mylist\do{\thisitem. } \makeatother However, I not sure how to run a loop over a list of lists and index the inner list.

  • PDF Type 6 shadings: How to properly build them using TeX?
    by Jasper Habicht on July 5, 2026 at 8:19 pm

    This question might be off-topic, but the reason I ask it here is that I want to eventually create a module for a LaTeX package to enable the use of conic gradients via PDF Type 6 shadings which are also known as Coons Patch Mash Tiling. Also, please do not read this as "fix my issue for me" question. Rather, I appreciate any pointers to where I could be wrong. I understand that this topic is highly specialised, so I don't expect anybody to actually fix it completely or even partially. Now, as far as I understand, such shadings are essentially encoded as object stream in a PDF with the following object structure as basis (of course the object number and the contents of the stream and its length are different in a real document): 1 0 obj << /ShadingType 6 /ColorSpace /DeviceRGB /BitsPerCoordinate 16 /BitsPerComponent 8 /BitsPerFlag 2 /Decode [ 0 100 0 100 0 1 0 1 0 1 ] /Length 0 >> stream 00... endstream The stream defines the patches. Each path can be thought of a (distorted) rectangle of which the four sides are described as cubic Bézier curves. Therefore, each of the four edges of the patch has four control points, which means that there are twelve such points needed to describe a patch. Also, each corner of the patch is assigned a color. Now, in a mesh, the patches are attached to each other so that they share a common edge. To identify the shared edge, a flag is added to each patch which describes which edge is shared. A 0 flag identifies the initial patch, a 1 flag means that the right edge of the previous patch is used as the left edge of the current patch. There are more flags, but we only need these two for this case. If edges are shared, the relevant control points and colors are omitted in the description of the patch in the stream. So, if we take the sizes as described by /BitsPerCoordinate, \BitsPerComponent and /BitsPerFlag (let us assume 16, 8, and 2 respectively, also let us assume RGB), we get the following binary representation of the a patch with flag 0: Flag: 2 bits Points: 12 points, 16 bits for the x coordinate, 16 bits for the y coordinate Colors: 4 colors, 8 bits for the red part, 8 bits for the green part, 8 bits for the blue part For a patch with flag 1, we get: Flag: 2 bits Points: 8 points, 16 bits for the x coordinate, 16 bits for the y coordinate Colors: 2 colors, 8 bits for the red part, 8 bits for the green part, 8 bits for the blue part Maybe I got something wrong here already, which might explain why things don't work. Anyways, my question is why the following does not result in the desired output. My idea for a conic shading was to create patches that look like slices of a pie. Like this: I first tried without the rounded edge and just set the control points to be equal to the relevant corner, hoping that this would result in a triangle-shaped rectangle. So my patches would adhere to the following logic: Patch 1: Flag = 0 Points: (50, 50) (50, 50) (100, 50) (100, 50) (100, 50) (50, 100) (50, 100) (50, 100) (50, 50) (50, 50) (50, 50) (50, 50) Colors: (255,0,0) (191,0,64) (191,0,64) (255,0,0) Patch 2: Flag = 1 Points: (50, 100) (0, 50) (0, 50) (0, 50) (50, 50) (50, 50) (50, 50) (50, 50) Colors: (128,0,128) (128,0,128) Patch 3: Flag = 1 Points: (0, 50) (50, 0) (50, 0) (50, 0) (50, 50) (50, 50) (50, 50) (50, 50) Colors: (64,0,191) (64,0,191) Patch 4: Flag = 1 Points (50, 0) (100, 50) (100, 50) (100, 50) (50, 50) (50, 50) (50, 50) (50, 50) Colors: (0,0,255) (0,0,255) But, the output is totally not what it should look like although I think that the stream is correct. Acrobat also complains about something being wrong. It looks like this: 21 0 obj << /ShadingType 6 /ColorSpace /DeviceRGB /BitsPerCoordinate 16 /BitsPerComponent 8 /BitsPerFlag 2 /Decode [ 0 100 0 100 0 1 0 1 0 1 ] /Length 350 >> stream 20002000200020003FFFE0003FFFE0003FFFE00020003FFFE0003FFFE0003FFFE00020002000200020002000200020003FC0002FC0102FC0103FC00018000FFFF00008000000080000000800080008000800080008000800080008000800080800080400020002000000020000000200000002000200020002000200020002000200010002FD0002FD80000000FFFF8000FFFF8000FFFF8000800080008000800080008000800080000000FF0000FF endstream endobj So, my question is: What am I missing? Where is the probably simple but basic problem? The following is an MWE intended for testing. It contains a few helper funcitons and the relevant functions from the package where the code eventually is supposed to be included. It should work with PDFLaTeX and LuaLaTeX: \DocumentMetadata{uncompress} \documentclass[]{article} \usepackage{l3draw} \ExplSyntaxOn % a few helper functions \cs_new:Npn \__hawkdraw_tuple_use_i:w ( #1 , #2 ) {#1} \cs_new:Npn \hawkdraw_tuple_use_i:n #1 { \fp_to_dim:n { \exp_last_unbraced:Ne \__hawkdraw_tuple_use_i:w { \fp_eval:n {#1} } } } \cs_new:Npn \__hawkdraw_tuple_use_ii:w ( #1 , #2 ) {#2} \cs_new:Npn \hawkdraw_tuple_use_ii:n #1 { \fp_to_dim:n { \exp_last_unbraced:Ne \__hawkdraw_tuple_use_ii:w { \fp_eval:n {#1} } } } \cs_new_protected:Npn \hawkdraw_support_pdfliteral:n #1 { \sys_if_engine_luatex:TF { \tex_pdfextension:D literal {#1} } { \tex_pdfliteral:D {#1} } } \cs_new_protected:Npn \hawkdraw_support_pdfxform:nnN #1#2#3 { \tex_immediate:D \tex_pdfxform:D \tl_if_empty:nF {#1} { attr {#1} } resources {#2} #3 } \cs_new_protected:Npn \hawkdraw_support_pdflastxform: { \tex_pdflastxform:D } \cs_new_protected:Npn \hawkdraw_support_pdfrefxform:N #1 { \tex_pdfrefxform:D \int_use:N #1 \scan_stop: } \cs_generate_variant:Nn \hawkdraw_support_pdfrefxform:N { c } % === % relevant code from the package \box_new:N \l__hawkdraw_shading_object_box \cs_new_protected:Npn \hawkdraw_shading_set:nnn #1#2#3 { \hbox_set_to_wd:Nnn \l__hawkdraw_shading_object_box { 100bp } { \vbox_to_ht:nn { 100bp } { \skip_vertical:n { 0pt plus 1fil } \hawkdraw_support_pdfliteral:n { /Sh ~ sh } } \skip_horizontal:n { 0pt plus 1fil } } \pdf_object_new:n { hawkdraw_shading_ #1 } \tl_if_empty:nTF {#3} { \pdf_object_write:nne { hawkdraw_shading_ #1 } { dict } { #2 } } { \pdf_object_write:nne { hawkdraw_shading_ #1 } { stream } { {#2} {#3} } } \hawkdraw_support_pdfxform:nnN { } { /Shading ~ << ~ /Sh ~ \pdf_object_ref:n { hawkdraw_shading_ #1 } ~ >> } \l__hawkdraw_shading_object_box \int_const:cn { c__hawkdraw_shading_ #1 _int } { \hawkdraw_support_pdflastxform: } } \cs_new_protected:Npn \hawkdraw_shading_use:n #1 { \hawkdraw_support_pdfrefxform:c { c__hawkdraw_shading_ #1 _int } } % === \cs_new:Npn \hawkdraw_convert_bin_to_hex:n #1 { \__hawkdraw_convert_bin_to_hex_aux:w #1 \q_stop } \cs_generate_variant:Nn \hawkdraw_convert_bin_to_hex:n { e } \cs_new:Npn \__hawkdraw_convert_bin_to_hex_aux:w #1 \q_stop { \int_compare:nNnF { \tl_count:n {#1} } < { 4 } { \__hawkdraw_convert_bin_to_hex_aux:NNNNw #1 \q_stop } } \cs_new:Npn \__hawkdraw_convert_bin_to_hex_aux:NNNNw #1#2#3#4#5 \q_stop { \int_format:nn { \int_from_bin:n {#1#2#3#4} } { 1X } \__hawkdraw_convert_bin_to_hex_aux:w #5 \q_stop } % === \cs_generate_variant:Nn \color_export:nnN { e } \cs_generate_variant:Nn \str_set_convert:Nnnn { Ne } \seq_new:N \l__hawkdraw_shading_conic_colors_seq \seq_new:N \l__hawkdraw_shading_conic_colors_bin_seq \cs_new_protected:Npn \hawkdraw_shading_conic_stream:N #1 { \tl_set:Ne #1 { \hawkdraw_convert_bin_to_hex:e { \seq_map_indexed_function:NN \l__hawkdraw_shading_conic_colors_bin_seq \__hawkdraw_shading_conic_stream_aux:nn } } } \cs_new:Npn \__hawkdraw_shading_conic_stream_aux:nn #1#2 { % skip first entry representing color at first edge \int_compare:nNnF {#1} = { 1 } { % flag (2 bit) \int_format:nn { \int_compare:nNnTF {#1} = { 2 } { 0 } { 1 } } { 0>2b } % four patches for each of the n colors % patch is pie segment going from 0 to 360 / ( n * 4 ) % points of first patch (12 points, 2 x 16 bits each \int_compare:nNnT {#1} = { 2 } { \prg_replicate:nn { 2 } { \__hawkdraw_shading_conic_stream_point_polar:nn { 0 } { 360 / ( \seq_count:N \l__hawkdraw_shading_conic_colors_bin_seq - 1 ) * ( #1 - 2 ) } } \prg_replicate:nn { 2 } { \__hawkdraw_shading_conic_stream_point_polar:nn { 1 } { 360 / ( \seq_count:N \l__hawkdraw_shading_conic_colors_bin_seq - 1 ) * ( #1 - 2 ) } } } \__hawkdraw_shading_conic_stream_point_polar:nn { 1 } { 360 / ( \seq_count:N \l__hawkdraw_shading_conic_colors_bin_seq - 1 ) * ( #1 - 2 ) } \prg_replicate:nn { 3 } { \__hawkdraw_shading_conic_stream_point_polar:nn { 1 } { 360 / ( \seq_count:N \l__hawkdraw_shading_conic_colors_bin_seq - 1 ) * ( #1 - 1 ) } } \prg_replicate:nn { 3 } { \__hawkdraw_shading_conic_stream_point_polar:nn { 0 } { 360 / ( \seq_count:N \l__hawkdraw_shading_conic_colors_bin_seq - 1 ) * ( #1 - 1 ) } } \__hawkdraw_shading_conic_stream_point_polar:nn { 0 } { 360 / ( \seq_count:N \l__hawkdraw_shading_conic_colors_bin_seq - 1 ) * ( #1 - 2 ) } % colors (4 colors, 3 x 8 bits each) \int_compare:nNnT {#1} = { 2 } { \seq_item:Nn \l__hawkdraw_shading_conic_colors_bin_seq { #1 - 1 } } #2 #2 \int_compare:nNnT {#1} = { 2 } { \seq_item:Nn \l__hawkdraw_shading_conic_colors_bin_seq { #1 - 1 } } } } \cs_new:Npn \__hawkdraw_shading_conic_stream_point_polar:nn #1#2 { % get from point polar % normalize to 65535 \int_format:nn { \fp_to_int:n { \hawkdraw_tuple_use_i:n { ( 50bp , 50bp ) + ( \draw_point_polar:nn { #1 * 50bp } {#2} ) } / 100bp * 65535 } } { 0>16b } \int_format:nn { \fp_to_int:n { \hawkdraw_tuple_use_ii:n { ( 50bp , 50bp ) + ( \draw_point_polar:nn { #1 * 50bp } {#2} ) } / 100bp * 65535 } } { 0>16b } } \cs_new_protected:Npn \__hawkdraw_shading_color_set_bin_value:n #1 { \seq_put_right:Ne \l__hawkdraw_shading_conic_colors_bin_seq { \int_format:nn { \int_from_hex:n {#1} } { 0>24b } } } \cs_generate_variant:Nn \__hawkdraw_shading_color_set_bin_value:n { V } % start , % start!25!mid , start!50!mid , start!75!mid , mid , % mid!25!end , mid!50!end , mid!75!end , end \cs_new_protected:Npn \hawkdraw_shading_color_set_bin_values:n #1 { \seq_clear:N \l__hawkdraw_shading_conic_colors_bin_seq \seq_set_from_clist:Nn \l__hawkdraw_shading_conic_colors_seq {#1} \seq_map_indexed_inline:Nn \l__hawkdraw_shading_conic_colors_seq { \int_compare:nNnTF {##1} = { 1 } { \color_export:enN { \seq_item:Nn \l__hawkdraw_shading_conic_colors_seq { 1 } } { HTML } \l__hawkdraw_shading_color_value_tmp_tl \__hawkdraw_shading_color_set_bin_value:V \l__hawkdraw_shading_color_value_tmp_tl } { \color_export:enN { \seq_item:Nn \l__hawkdraw_shading_conic_colors_seq { ##1 - 1 } ! 75 ! ##2 } { HTML } \l__hawkdraw_shading_color_value_tmp_tl \__hawkdraw_shading_color_set_bin_value:V \l__hawkdraw_shading_color_value_tmp_tl \color_export:enN { \seq_item:Nn \l__hawkdraw_shading_conic_colors_seq { ##1 - 1 } ! 50 ! ##2 } { HTML } \l__hawkdraw_shading_color_value_tmp_tl \__hawkdraw_shading_color_set_bin_value:V \l__hawkdraw_shading_color_value_tmp_tl \color_export:enN { \seq_item:Nn \l__hawkdraw_shading_conic_colors_seq { ##1 - 1 } ! 25 ! ##2 } { HTML } \l__hawkdraw_shading_color_value_tmp_tl \__hawkdraw_shading_color_set_bin_value:V \l__hawkdraw_shading_color_value_tmp_tl \color_export:enN { ##2 } { HTML } \l__hawkdraw_shading_color_value_tmp_tl \__hawkdraw_shading_color_set_bin_value:V \l__hawkdraw_shading_color_value_tmp_tl } } } \cs_new_protected:Npn \hawkdraw_shading_conic:n #1 { \int_if_exist:cF { c__hawkdraw_shading_ conic . #1 _int } { \hawkdraw_shading_color_set_bin_values:n {#1} \hawkdraw_shading_conic_stream:N \l_tmpa_tl \hawkdraw_shading_set:nnn { conic . #1 } { /ShadingType ~ 6 ~ /ColorSpace ~ /DeviceRGB ~ /BitsPerCoordinate ~ 16 ~ /BitsPerComponent ~ 8 ~ /BitsPerFlag ~ 2 ~ /Decode ~ [ ~ 0 ~ 100 ~ % x 0 ~ 100 ~ % y 0 ~ 1 ~ % R 0 ~ 1 ~ % G 0 ~ 1 ~ % B ] ~ } { \tl_use:N \l_tmpa_tl } } } \ExplSyntaxOff \begin{document} \ExplSyntaxOn \hawkdraw_shading_conic:n { red , blue } \hbox_set:Nn \l_tmpa_box { \hawkdraw_shading_use:n { conic.red,blue } } \box_use:N \l_tmpa_box \ExplSyntaxOff \end{document}

  • French text in superscript
    by Phil8544 on July 5, 2026 at 4:08 pm

    What package I have to use if I want to get French text in superscript? I want to write "57ème croche sur 92" with the term "ème" in superscript.