Quantcast
Channel: Stupid error caused by doing stupid things - TeX - LaTeX Stack Exchange
Viewing all articles
Browse latest Browse all 3

Stupid error caused by doing stupid things

$
0
0

When I was writing my thesis I wrote the following two commands which I found useful (and still do). They are both ways of defining other commands.

\usepackage{ifthen}\makeatletter  \def\optional #1[#2]#3#4{\newcommand{#1}[#2][@rGUmentmiSSing]{\ifthenelse{\equal{##1}{@rGUmentmiSSing}}{#4}{#3}}}  \newcommand{\starredcommand}[4][*]{\newcommand{#2}{\@ifnextchar#1{\expandafter #4\@gobble}{#3}}}  \makeatother

They aren't easy to read. The first one allows me to define a command with an optional argument, where the behaviour of the command is very different if the optional argument is there or not.

The second allows me to define a command with a modifier which I usually use if I have two versions of the same object but one defined on a larger space. For example I have

\optional{\foo}[1]{F(#1)}{F} \starredcommand{\barr}{\mathcal B}{\mathscr B}

So I can write

\begin{align}    \foo &= \foo[x] \\     \barr &\neq \barr*\end{align}

Which would give me the same effect as

\begin{align}    F &= F(x) \\     \mathcal B &\neq \mathscr B\end{align}

I like these commands but they don't play nicely together.For example if I write \foo[\bar] or \foo[\bar*] I get over 100 errors, which is bad. It's not to do with the \@gobble command eating the bracket. \foo[\bar* 123456789] Gives me the same thing. And it's not to do with the square brackets. If I define

\newcommand{\fine}[1][y]{X^{#1}}

then \fine[\bar] works exactly as it's supposed to.

I have no idea what's going wrong. It would be great if someone could help.

Here's a follow up question if that one's too easy. At the moment there's no way of including arguments in my \starredcommand If I wanted to give \barr an argument I'd normally do something like

\makeatletter\newcommand{\@barr}[1]{\mathcal B^{#1}}\newcommand{\@barrstar}{\mathscr B^{#1}}\starredcommand{\barr}{\@barr}{\@barrstar}\makeatother

Which works fine (even with optional arguments or my \optional command) but it sort of defeats the point of defining the \starredcommand in the first place.I'd love a version of starred command that could work with arguments but I can't think of a way of doing it.


Viewing all articles
Browse latest Browse all 3

Latest Images

Trending Articles





Latest Images