13

I'm trying to make a Cayley table like the one in the following question, but I don't want the labels, for example, on top (Capacity) and on the left side (the w's and v's). I just would like to reproduce the exact same table without the 'extra' bits on the side.

I forgot to mention I want a 5x5 table (25 entries inside the table), but still with the "outer" headings.

I managed to do this. However, this is long-winded I think:

\[
    \begin{tabular}{>{$}l<{$}|*{6}{>{$}l<{$}}}
    ~   & 1   & a   & a^2 & a^3   & a^4     \\
    \hline\vrule height 12pt width 0pt
    1   & 1   & a   & a^2 & a^3  & a^4      \\
    a   & a   & a^2 & a^3 & a^4  & a^5      \\
    a^2 & a^2 & a^3 & a^4 & a^5  & a^6      \\
    a^3 & a^3 & a^4 & a^5 & a^6  & a^7      \\
    a^4 & a^4 & a^5 & a^6 & a^7  & a^8      \\
    \end{tabular}
\]

EDIT:

\setlength\extrarowheight{3pt}
\noindent\begin{tabular}{c | c c c c c}

 & 1 & a & a^2 & a^3 & a^4  \\
\cline{1-6}
1   & 1   & a   & a^2 & a^3 & a^4 \\
a   & a   & a^2 & a^3 & a^4 & a^5 \\
a^2 & a^2 & a^3 & a^4 & a^5 & a^6 \\
a^3 & a^3 & a^4 & a^5 & a^6 & a^7 \\
a^4 & a^4 & a^5 & a^6 & a^7 & a^8 \\
\end{tabular}
Leo
  • 815

5 Answers5

12

Your input is almost good, but you can do better.

\documentclass{article}
\usepackage{amsmath}
\usepackage{array}

\begin{document}

This is a Cayley table
\[
    \begin{array}{l|*{5}{l}}
        & 1   & a   & a^2 & a^3  & a^4 \\
    \hline
    1   & 1   & a   & a^2 & a^3  & a^4 \\
    a   & a   & a^2 & a^3 & a^4  & a^5 \\
    a^2 & a^2 & a^3 & a^4 & a^5  & a^6 \\
    a^3 & a^3 & a^4 & a^5 & a^6  & a^7 \\
    a^4 & a^4 & a^5 & a^6 & a^7  & a^8 \\
    \end{array} 
\]

This is the same, but with some more spacing,
\[
    \setlength{\extrarowheight}{3pt}% local setting
    \begin{array}{l|*{5}{l}}
        & 1   & a   & a^2 & a^3  & a^4 \\
    \hline
    1   & 1   & a   & a^2 & a^3  & a^4 \\
    a   & a   & a^2 & a^3 & a^4  & a^5 \\
    a^2 & a^2 & a^3 & a^4 & a^5  & a^6 \\
    a^3 & a^3 & a^4 & a^5 & a^6  & a^7 \\
    a^4 & a^4 & a^5 & a^6 & a^7  & a^8 \\
    \end{array} 
\]

\end{document}

With array, each cell is assumed to be in math mode. The setting of \extrarowheight will not propagate to other instances of array, because \[...\] forms a group.

enter image description here

egreg
  • 1,121,712
10

Basically I've just taken the answer to the question you linked and changed few lines to adapt to your needs.

Here's the code, followed by the output you will get and a brief explanation of what's going on.

The code below produces 2 tables, in one there's written ANYTHING in the top left corner, in the second one there's a white space (just don't put anything in the column "argument".

\documentclass[10pt]{article}
\usepackage{array}

\begin{document}

    \setlength\extrarowheight{3pt}
\noindent\begin{tabular}{c | c c c c c}
    ANYTHING & 0 & 1 & 2 & 3 & 4  \\
    \cline{1-6}
    0 & 0 & 0 & 0 & 0 & 0 \\
    1 & 0 & 0 & $a^2$ & 25 & 25 \\
    2 & $a^2$ & 0 & 20 & 25 & 25 \\
    2 & 0 & $a^2$ & 20 & 25 & 25 \\
    2 & 0 & 0 & 20 & 25 & 25 \\
\end{tabular}


\noindent\begin{tabular}{c | c c c c c}
     & 0 & 1 & 2 & 3 & 4  \\
    \cline{1-6}
    0 & 0 & 0 & 0 & 0 & 0 \\
    1 & 0 & 0 & $a^2$ & 25 & 25 \\
    2 & $a^2$ & 0 & 20 & 25 & 25 \\
    2 & 0 & $a^2$ & 20 & 25 & 25 \\
    2 & 0 & 0 & 20 & 25 & 25 \\
\end{tabular}

\end{document}

enter image description here enter image description here

How does it work? A table is done with the environment {tabular}, which requires as argument the numer of columns (or rows... just read the documentation to know more) which is specified by the argument {c | c c c c c}: 6 columns divided by a line between the first and the second col. The 'c' stands for centered meaning that the column will be aligned to the center, if you want you can change it to l (left) or r (right).

Then in the tables all the entries are done by spacing them with &, and the \cline takes as argument the number of columns that you want it to span: from column 1 to column 6.

The command \setlength\extrarowheight{3pt} adds some extra row height (how surprising!).

Package {array} is needed for the length \extrarowheight.

GiuTeX
  • 1,309
10

Some automatizing is in order here

\documentclass{article}
\usepackage{amsmath, amssymb}
\usepackage{array}

\usepackage{xinttools}
\usepackage{bnumexpr}
\begin{document}

This is a Cayley table
\[
    \begin{array}{l|*{5}{l}}
        & 1   & a   & a^2 & a^3  & a^4 \\
    \hline
    1   & 1   & a   & a^2 & a^3  & a^4 \\
    a   & a   & a^2 & a^3 & a^4  & a^5 \\
    a^2 & a^2 & a^3 & a^4 & a^5  & a^6 \\
    a^3 & a^3 & a^4 & a^5 & a^6  & a^7 \\
    a^4 & a^4 & a^5 & a^6 & a^7  & a^8 \\
    \end{array} 
\]

This is the same, but with some more spacing,
\[
    \setlength{\extrarowheight}{3pt}% local setting
    \begin{array}{l|*{5}{l}}
        & 1   & a   & a^2 & a^3  & a^4 \\
    \hline
    1   & 1   & a   & a^2 & a^3  & a^4 \\
    a   & a   & a^2 & a^3 & a^4  & a^5 \\
    a^2 & a^2 & a^3 & a^4 & a^5  & a^6 \\
    a^3 & a^3 & a^4 & a^5 & a^6  & a^7 \\
    a^4 & a^4 & a^5 & a^6 & a^7  & a^8 \\
    \end{array} 
\]

Again, but illustrating that $a=4$ generates a cyclic sub-group of order
$5$ of $(\mathbb{Z}/11\mathbb{Z})^*$:
\[
    \setlength{\extrarowheight}{3pt}% local setting
    \begin{array}{c|*{5}{c}}
        & 1   & a   & a^2 & a^3  & a^4 \\
    \hline
    \xintFor #1 in {0, 1, 2, 3, 4}:
    {\ifnum #1=0 1\else a^{#1}\fi 
       \xintFor #2 in {0, 1, 2, 3, 4}:
      {%
       &\thebnumexpr 4^(#1+#2) /: 11\relax
      }%
    \\
    }%
    \end{array} 
\]
and $a=2$ generates the full group:
\[
    \setlength{\extrarowheight}{3pt}% local setting
    \begin{array}{c|*{10}{c}}
        & 1 & a  \xintFor*#1 in {23456789}:{&a^{#1}}\\
    \hline
    \xintFor* #1 in {0123456789}:
    {\ifnum #1=0 1\else a^{#1}\fi 
       \xintFor* #2 in {0123456789}:
      {%
       &\thebnumexpr 2^(#1+#2) /: 11\relax
      }%
    \\
    }%
    \end{array} 
\]
\end{document}

enter image description here

6

Perhaps I over automate, but I'd want to have a macro \CayleyTable that produces the Cayley table of the corresponding cyclic group, so that the commands:

  \CayleyTable{3}
  \CayleyTable{4}
  \CayleyTable[x]{9}

would produce:

enter image description here

(An optional argument gives the name of the generator, which defaults to a). Arguably, \CyclicGroupCayleyTable would be a better name. In any case, here's the code:

\documentclass{article}
\usepackage{array}
\setlength{\extrarowheight}{3pt}% local setting

\usepackage{xparse}

\ExplSyntaxOn
\int_new:N \l_n_int
\tl_new:N  \l_gen_tl
\cs_new_protected:Npn \print_exponent #1 {%  {\l_gen_tl}^{#1}
  \int_compare:nTF {#1=0}{1}{\l_gen_tl \int_compare:nT{#1>1}{^{#1}}}
}
\cs_new_protected:Npn \print_Cayley_header:n #1 { 
    & \print_exponent {\int_eval:n{#1-1}} 
}
\cs_new_protected:Npn \print_Cayley_cell:nn #1 #2 {
    & \print_exponent {\int_eval:n { \int_mod:nn {#1+#2-2}{\l_n_int}} }
}
\cs_new_protected:Npn \print_Cayley_row:n #1 {
  \print_exponent {\int_eval:n {#1-1}}
  \int_step_inline:nn {\l_n_int} {\print_Cayley_cell:nn {##1}{#1}} \\
}
\NewDocumentCommand\CayleyTable{ O{a} m}{
   \tl_set:Nn \l_gen_tl {#1}
   \int_set:Nn \l_n_int {#2}
   \[
      \begin{array}{c|*{\int_eval:n{\l_n_int+1}}{c}}
        \int_step_function:nN {\l_n_int} \print_Cayley_header:n
        \\\hline
        \int_step_function:nN {\l_n_int} \print_Cayley_row:n
      \end{array}
   \]
}
\ExplSyntaxOff

\begin{document}

  \CayleyTable{3}

  \CayleyTable{4}

  \CayleyTable[x]{9}

\end{document}
0

With \foreach:

\documentclass{article}
\usepackage{etoolbox}
\usepackage{tikz}
\tikzset{mynode/.style={anchor=base,  
    inner sep=0pt,
    text height=12pt, text depth=6pt, text width=18pt, text centered}}
\newcommand{\CayleyTable}[2][a]{%
\vcenter{\hbox{\begin{tikzpicture}
\pgfmathsetmacro\tot{int(#2-1)}
\foreach \i in {0,1,...,\tot}
{
\node[mynode] (hh-\i) at (\i *24pt,24pt) {\ifnumequal{\i}{0}{$1$}{\ifnumequal{\i}{1}{$#1$}{${#1}^{\i}$}}};
\node[mynode] (vv-\i) at (-24pt-\pgflinewidth,-\i *24pt) {\ifnumequal{\i}{0}{$1$}{\ifnumequal{\i}{1}{$#1$}{${#1}^{\i}$}}};
}
\foreach \myrow in {0,1,...,\tot} 
{\foreach \mycol in {0,1,...,\tot} 
{\pgfmathsetmacro\myplus{\myrow+\mycol}\pgfmathsetmacro\myexp{int(mod(\myplus,#2))}
\node[mynode] at (\myrow*24pt,-\mycol*24pt) {\ifnumequal{\myexp}{0}{$1$}{\ifnumequal{\myexp}{1}{$#1$}{${#1}^{\myexp}$}}};}}
\draw ([yshift=-2pt]hh-\tot.south east) -- ([yshift=-2pt]hh-0.south west) -- ++(-24pt, 0);
\draw ([xshift=2pt]vv-\tot.south east) -- ([xshift=2pt]vv-0.north east) -- ++(0,24pt);
\end{tikzpicture}}}%
}
\begin{document}
\[
  \CayleyTable{3}
 \]
 \[
  \CayleyTable[x]{4}
 \]
 \[
  \CayleyTable[y]{5}
\]
 \end{document}

enter image description here

CarLaTeX
  • 62,716