Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I'm writing a script (topic ring theory) where I have to set lots of quotients of algebraic objects. Usually I simply write M/N. However there are some cases where this is no easy to read (M+N/N or such). So I want to set the first object a bit higher and the second a bit lower. I found the faktor package which does this. However faktor uses \diagup in a fixed size. For larger expressions a larger one seems suitable. Do you have any idea how I can change the source code of the package so that

  1. I have two commands (one with a small and one with a large slash) or better
  2. the \diagup has automatically the right size.

I also tried xfrac. First I ran into this message:

This is a LaTeX bug: check coding!
! Command name `\if_num:w' already defined! Current meaning: \ifnum.
\msg_kernel_bug:x ...oding!}\tex_errmessage:D {#1}

A comment at Debians bug tracking system suggested to exchange mathtools and xfrac. This worked on my system. However the formulas inside a gather*-environment look too small to me: example with \sfrac

The font size here seems smaller than at inline text. Thatswhy I wanted to try faktor.

I noticed another disadvantage with xfrac. My document needs a lot more time to compile. The initial revision took ~13 sec to compile (pdflatex) and with xfrac it took ~1300 secs or nearly half an hour.

share|improve this question
    
Rather than faktor, have you had a look at the xfrac package? –  Werner Sep 6 '11 at 1:26
    
I upgraded my question with an explanation of my xfrac experiments. –  qbi Sep 6 '11 at 10:40
    
I can't see how using xfrac could increase your compile time 100 fold. This should not be the case. –  Werner Sep 7 '11 at 6:53
    
You were right. xfrac was not the problem. I played around a bit and found out that microtype is the problem. If microtype and xfrac are used together I get an enormous increase in compile time. –  qbi Sep 7 '11 at 11:42
add comment

1 Answer

up vote 2 down vote accepted

In essence, the faktor package defines the command \faktor in the following way (let's call it \newfaktor):

\newcommand*{\newfaktor}[2]{% \newfaktor{#1}{#2} -> #1/#2
  \raisebox{0.5\height}{\ensuremath{#1}}% Numerator
  \mkern-5mu\diagup\mkern-4mu% Slash /
  \raisebox{-0.5\height}{\ensuremath{#2}}% Denominator
}

Here is the similarity between \faktor and \newfaktor:

\faktor vs \newfaktor

In order to satisfy the first request - to modifying the height/depth to which the numerator/denominator is raised/dropped - you could define some extra optional parameters for \newfaktor. And, for the sake of being complete, the xparse package provides a convenient way of intermixing mandatory {} and optional [] arguments:

\usepackage{xparse}%
...
\DeclareDocumentCommand{\newfaktor}{m O{0.5} m O{-0.5}}{% \newfaktor{#1}[#2]{#3}[#4] -> #1/#3
  \raisebox{#2\height}{\ensuremath{#1}}% Numerator
  \mkern-5mu\diagup\mkern-4mu% Slash /
  \raisebox{#4\height}{\ensuremath{#3}}% Denominator
}

This defines the command \newfaktor{#1}[#2]{#3}[#4] where #2 and #4 have defaults of 0.5 and -0.5 respectively, and are optional. These optional arguments specify the fractional height/depth to which the numerator #1 and denominator #3 are raised/dropped. That is, specifying 0.5 for #2 raises #1 by half of its regular height; specifying -1 for #4 drops #3 by its own height. For example:

Different new faktor styles

In the above image, the first four uses of \newfaktor yield a typesetting equivalent to \faktor.

In order to satisfy the second request - \diagup scales automatically with respect to its arguments - we have to go a different route. The reason for this is that scaling \diagup happens in 2 dimensions, thereby making \diagup fatter. See, for example, the difference between:

Scaling of \diagup

So, instead, I went with stretching a \rule, built into the following macro:

\DeclareDocumentCommand{\newfaktor}{s m O{0.5} m O{-0.5}}{% \newfaktor[*]{#2}[#3]{#4}[#5] -> #2/#4
  \setbox0=\hbox{\ensuremath{#2}}% Store numerator
  \setbox1=\hbox{\ensuremath{\diagup}}% Store slash /
  \setbox2=\hbox{\ensuremath{#4}}% Store denominator
  \raisebox{#3\ht1}{\usebox0}% Numerator
  \mkern-5mu\ifthenelse{\equal{#1}{\BooleanTrue}}% Slash /
    {\diagup}% regular \faktor slash
    {\rotatebox{-44}{\rule[#5\ht2]{0.4pt}{-#5\ht2+#3\ht0+\ht0}}}% tilted rule as a slash
  \mkern-4mu%
  \raisebox{#5\ht2}{\usebox2}% Denominator
}

This creates \newfaktor just like before, but now with an optional *. The starred version \newfaktor* reverts to the older definition, using \diagup as the slanted fraction, while the unstarred \newfaktor draws a \rule and tilts it into place. Consider the differences:

Modified \newfaktor with sizable slash

Longer equations using starred/unstarred \newfaktor

Of course, if these definitions are entirely satisfaktory(!), you can change them to your liking.

share|improve this answer
    
+1 for "satisfaktory" –  Lover of Structure Jul 13 '13 at 10:47
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.