Tag Info

New answers tagged

4

I get no error with the first example, unless I add a blank line between \let\macro\foo and A: \def\foo#1\par{\vbox{#1}} \def\bar#1\par{\hbox{#1}} \let\macro\foo \macro A paragraph consisting of text. \let\macro\bar \macro A paragraph consisting of text. \everypar={\macro} A paragraph consisting of text. \let\macro\foo A paragraph consisting of text. ...


9

The conditional \ifx does no expansion and it compares the next two tokens. So in your test it compares \myarg with the first token in #1. Therefore the test will be always false, because #1 is the name of a section level counter. Adding \expandafter before \ifx would not help, even adding braces around #1: \expandafter\ifx\myarg{#1}\mytest would become ...


1

It occurred to me that \tikz[remember page,overlay] must already wait until the page is laid out in order to work right. Nor will it change the layout since it overlays the existing text. \documentclass{memoir} \usepackage{tikzpagenodes} \newlength{\tempx} \newlength{\tempy} \newcommand*\shybar{\ifvmode\tikz[remember picture,overlay]% start of paragraph ...


4

I understand, that you are expecting a plain TeX solution, as it is suggested by tex-core tag, hence $$ 1+1=2 \eqno{\rm IV} $$ \bye


23

If you don't want to do the conversion, \documentclass{article} \usepackage{amsmath} \newcommand{\RN}[1]{% \textup{\uppercase\expandafter{\romannumeral#1}}% } \begin{document} \[ \RN{4}+\RN{12}=\RN{16} \] \end{document} If you also don't want to do the arithmetic \documentclass{article} \usepackage{amsmath} \usepackage{xparse} \ExplSyntaxOn ...


2

For the sake of completeness. The conversion to roman numeral will be done automatically. \documentclass[varwidth,math]{standalone}% change it back to your own document class \newcounter{x} \def\ToRomanEmpire#1{\setcounter{x}{#1}\Roman{x}} \begin{document} \[ \ToRomanEmpire{1999} + \ToRomanEmpire{15} = \ToRomanEmpire{2014} \] \end{document}


2

\documentclass{article} \usepackage{mathtools} \begin{document} \[ \text{IV}\times\text{V}=\text{XX} \] \end{document}


8

A space following a digit always terminates the <number> and is absorbed so \foo=2 \otherMacro would assign 2 to \foo followed (with no space) by the expansion of \othermacro Any other non expandable non digit token terminates the <number> but is replaced so \foo=2\relax\otherMacro assigns 2 to \foo then the token stream has \relax and the ...


4

I was inspired by Bruno's solution but I suggest to use only one full expandable pass. The main effect is reached by \expandafter\ifx\csname foo\endcsname\fi which expands to nothing but sets the \foo to \relax. This is only sole assignment done at expand processor level. All other assignments are done in main processor of TeX. ...


9

The \vtop box will be \hsize wide, so it disappears beyond the left margin. Try with \hbox to0pt{\hss\vtop{\hsize=4cm def}\hss} and you'll see it appear in the left margin. Let's do \hbox to 0pt{\hss\vtop{def}\hss}\showlists and the log will show ### vertical mode entered at line 0 ### current page: \glue(\topskip) 3.05556 \hbox(6.94444+0.0)x0.0, ...


2

Short answer: one can find the natural width of the box, the exact amount of stretch if it is finite (otherwise one can only say "it's infinite"), and similarly the exact amount of shrink if it is finite. Let us assume for definiteness that \mybox is a horizontal box such as \newbox\mybox \setbox\mybox\hbox spread 5pt{Some text perhaps.} To find its ...


6

What do we know about \mathon and \mathoff? They are displayed by \showbox, \showlists and in other situations where the contents of a box or of a typeset list are written to the terminal or the log file. As can be read in paragraph "12. Displaying boxes", all these are implemented through the procedure show_node_list, which displays a node list (the data ...


4

In tex.web, you'll find 3826: @ @<Display math node |p|@>= 3827: begin print_esc("math"); 3828: if subtype(p)=before then print("on") 3829: else print("off"); 3830: if width(p)<>0 then 3831: begin print(", surrounded "); print_scaled(width(p)); 3832: end; 3833: end making it part of the "procedure Display math node. \mathon and \mathoff is ...


5

I have a little bit different opinion about \bgroup versus \begingroup than the previous answer. First, I give a short explanation about TeX internals: The { and } (more exactly the tokens with catcode 1 and 2) have four different meanings in TeX: they are the syntactic part of macro definitions: \def\foo...{...} each sequence of tokens scanned as single ...


2

Here's just a “semi-generalization” (with expl3) of the solution provided by egreg. I tried exactly that before asking this question (just touching catcodes of ^^M and using an auxiliar command, inspired by the definition of \obeylines) but, unfortunately for me, it didn't work (I need more training with catcodes and groups and where to change catcodes and ...


5

TeX processes its input using several processors: input processor -> token processor -> expand processor -> main processor A gastro-anatomical terminology is mentioned in the TeXbook for this but I never use this terminology. The Input processor reads lines from file, appends \endlinechar and (maybe) re-encodes the line and outputs each line as a buffer ...


10

In the first definition, the argument is delimited by a space and a \par token: \long\def\testA#1 {\begin{quote}#1\end{quote}} \long\def\testB#1 \par{\begin{quote}#1\end{quote}} \ifx\testA\testB\message{EQUAL}\else\message{DIFFERENT}\fi prints EQUAL The first end-of-line in \testA is converted to a space token; the second one is converted to a \par ...


2

Such active characters let to the original character work exactly the same as the original character, except in delimited arguments from macros defined prior to the category code change, and within \csname...\endcsname constructions. \def\delimited#1&{} \let\amp& \catcode`&=\active \let&\amp {\delimited...&} % BOOM: & is not seen ...


4

Here's my take; it is assumed that \@nil doesn't appear in the expansion of the second argument. \documentclass{article} \makeatletter \def\TrimBraces#1#2{\expandafter\TrimBraces@aux#2\@nil{#1}} \def\TrimBraces@aux#1\@nil#2{\def#2{#1}} \makeatother \def\a{Test} \TrimBraces\x\a \show\x %-- should be ->Test \def\b{{Test}} \TrimBraces\x\b \show\x %-- ...


6

My solution is only a little alternative to David's solution. The main point is the same: TeX removes outer braces from separated parameter if they exist: \def\aa#1\separator{...} \aa {text}\separator -- #1 is text \aa {text}b\separator -- #1 is {text}b And my solution: ...


6

\documentclass{article} \usepackage{etoolbox} \begin{document} \def\TrimBraces#1#2{\expandafter\zzz\expandafter#1\expandafter{\expandafter\zz#2\zz}} \def\zz#1\zz{#1} \def\zzz#1#2{\expandafter\def\expandafter#1\expandafter{#2}} \def\a{Test} \TrimBraces\x\a \show\x %-- should be ->Test % OK \def\b{{Test}} \TrimBraces\x\b \show\x %-- should be ->Test ...


12

Ah the \ifnum funky brace groups beloved of TeX\halign programmers:-) ` is part of the syntax for a number in TeX. 125 is a decimal "7D is hex and `} is the character code of the specified character (which is also 125 as it happens). So.... {\ifnum0=`}\fi the inner \ifnum is testing if 0=125 which is false so when expanded this is ...


0

Maybe you need this: \newdimen\savedprevdepth \vbox{ \hbox{X} \savedprevdepth=\prevdepth \hrule \prevdepth=\savedprevdepth \hbox{Y} } \bye Explanation: \prevdepth primitive register is set to the depth of the last box in the vertical list. It is set to magic value -1000pt when the vertical list is empty or when the \hrule is inserted to the vertical ...


1

Actually this is not a property that is unique to \hbox. The happens due the default spacing defined above and below the \hrule construct. You can change the spacing manually by using the \kern command. \vbox{ \hbox{X} \hrule \kern2pt %change the pts according to your needs \hbox{Y} } Alternatively, you could also define a macro for this.


3

%!TEX TS-program = pdftex \catcode`@=11 \long\def\@firstoftwo#1#2{#1} \long\def\@secondoftwo#1#2{#2} \def\first#1{\@firstoftwo#1} \def\last#1{\@secondoftwo#1} \catcode`@=12 \first{{+tokens1+}{--tokens2--}} \last{{+tokens1+}{--tokens2--}} \bye Of course, if you don't have (or want) anything to do with LaTeX. There's no need for \@firstoftwo while ...


4

Quoting from the TeXbook, page 79 (last single dangerous bend) Exception: No interline glue is inserted before or after a rule box. You can also inhibit interline glue by saying \nointerlineskip between boxes. In the case without the rule, the interline glue is added as usual: compute the sum s of the depth of the upper line and the height of the ...


19

An individual macro may only have one definition, but a combination of macros can parse the input stream: \def\aprint#1at#2,#3{The text ``#1'' shall be printed at $#2 \abovewithdelims()0pt #3$} \def\bprint#1by#2,#3{The text ``#1'' shall be printed by #2 and #3 Doe} \def\print#1#2{\csname#2print\endcsname{#1}#2} \print{Testtext}at 2,3 ...


5

The calculations can be done by \pgfmathsetmacro: \pgfmathsetmacro\vx{\asx-\sqx} \pgfmathsetmacro\vy{\asy-\sqy} \pgfmathsetmacro\magv{sqrt(\vx*\vx + \vy*\vy)} \pgfmathsetmacro\propx{\sqx + \vx/\magv+\winsetshock} \pgfmathsetmacro\propy{\sqy + \vy/\magv+\winsetshock}


1

With pdfTeX or XeTeX you can't hook into the code for detecting when \inputlineno changes. It's just a read only integer parameter that's updated in a part of the program the user hasn't access to. Possibly the reader function in LuaTeX, described in section 4.1.2.1.1, might help with this engine.


1

OK, did some research and it seems fairly easy: \let\damp=\dump % save old meaning of \dump in \damp \let\dump=\relax % tell \dump to do nothing \input xetex.ini % or plain.tex or whatever you want to derive from \let\dump=\damp % recover original meaning of \dump from \damp % Your own extensions on top of whatever you loaded a few lines ago A small ...


5

Most asymmetric two column layouts are best handled by a list environment. This allows page breaking to occur naturally in the main flow without having to guess where to vsplit it. Although if there is a possibility of a page break happening in the first few rows you should need to work a bit harder to prevent that or the hanging parbox will overprint the ...


7

Using tcolorbox. This is breakable across pages and all the benefits of tikz and tcolorbox like borders, background colour etc can be exploited. \documentclass{article} \usepackage{xcolor} \usepackage{kantlipsum} \usepackage[many]{tcolorbox} %% splitbox--- \tcbuselibrary{skins,breakable} \newtcolorbox{splitbox}[1][]{ colback=white, left=0.5ex, ...


5

Is this something similar to what you'd like to get? \documentclass{article} \usepackage{microtype} \usepackage{kantlipsum} \begin{document} \kant[1] \newbox\mylongbox \setbox\mylongbox=\vbox{ \hsize=0.7\textwidth \kant[2-4] } \noindent\parbox[t]{0.2\textwidth}{% Blah blah blah, blah blah blah blah blah blah blah, Blah blah blah blah, }% ...


0

I think I got to a workaround; all that needs to be changed in the above MWE is that this code: \setbox\myvtopboxB=% \vtop{\hsize=0.7\textwidth \copy\myspltbox} % ... needs to be changed to this: \setbox\myvtopboxB=% \vtop{ \hsize=0.7\textwidth \hrule height 0pt width 0pt \copy\myspltbox } Basically, those rules are used since I ...


6

\vsplit splits a vbox at a legal breakpoint in the vertical list in that box. The vertical list in \mybox only contains a single unbreakable item the hbox from the one line paragraph that contains your parbox in its first line. All latex box commands start with \leavevmode so they start a paragraph with the normal indent, center in a center environment etc. ...


6

It is a tex primitive behaviour not something defined in LaTeX. It is consistent with most other primitive math mode syntax, that it generates an error in text mode. \alpha for example.


8

Describing the algorithm used by TeX for breaking a paragraph into lines would require a book chapter. You can find the details in the TeXbook or in TeX by Topic. Let me give a short description for the normal situation, without mentioning hanging indentation or \parshape. To begin with, a paragraph is read in its entirety into memory. Any “horizontal ...


1

Just a note: the best I could find to explore this, is to go through the trouble of installing Latex3, and then use the unravel package on the file in OP, like this: \documentclass{article} \tracingonline=1 \tracingoutput=1 \tracingpages=1 \tracingparagraphs=1 \usepackage{unravel} \begin{document} \showoutput \unravel{ Just a long, or somewhat long line ...


10

This code works backwards up the paragraph. First the entire paragraph is broken into lines and placed into a box (which is assumed to contain alternating items of an hbox with a line of text and a glue item of baselineskip glue. Then from the end of the list the box is removed (with \lastbox) and either put into a new box being constructed or flipped ...



Top 50 recent answers are included