How to draw a Cayley table











up vote
11
down vote

favorite
4












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 \
hlinevrule 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:



setlengthextrarowheight{3pt}
noindentbegin{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}









share|improve this question









New contributor




A.E is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




















  • the answer provided was excellent in the above link, I would appreciate if I can get a similar answer.
    – A.E
    yesterday






  • 3




    Just take Gonzalo's answer and delete first line (the one which contains Capacity) and two left columns and two right ones.
    – Ignasi
    yesterday






  • 1




    array, not tabular.
    – egreg
    yesterday






  • 1




    You Need to put $a^2$ when you want to use math!
    – GiuTeX
    yesterday






  • 1




    @A.E As it is, the added code produces tons of errors.
    – egreg
    yesterday















up vote
11
down vote

favorite
4












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 \
hlinevrule 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:



setlengthextrarowheight{3pt}
noindentbegin{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}









share|improve this question









New contributor




A.E is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




















  • the answer provided was excellent in the above link, I would appreciate if I can get a similar answer.
    – A.E
    yesterday






  • 3




    Just take Gonzalo's answer and delete first line (the one which contains Capacity) and two left columns and two right ones.
    – Ignasi
    yesterday






  • 1




    array, not tabular.
    – egreg
    yesterday






  • 1




    You Need to put $a^2$ when you want to use math!
    – GiuTeX
    yesterday






  • 1




    @A.E As it is, the added code produces tons of errors.
    – egreg
    yesterday













up vote
11
down vote

favorite
4









up vote
11
down vote

favorite
4






4





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 \
hlinevrule 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:



setlengthextrarowheight{3pt}
noindentbegin{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}









share|improve this question









New contributor




A.E is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











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 \
hlinevrule 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:



setlengthextrarowheight{3pt}
noindentbegin{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}






tables






share|improve this question









New contributor




A.E is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




A.E is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited yesterday









Peter Mortensen

52336




52336






New contributor




A.E is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked yesterday









A.E

978




978




New contributor




A.E is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





A.E is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






A.E is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












  • the answer provided was excellent in the above link, I would appreciate if I can get a similar answer.
    – A.E
    yesterday






  • 3




    Just take Gonzalo's answer and delete first line (the one which contains Capacity) and two left columns and two right ones.
    – Ignasi
    yesterday






  • 1




    array, not tabular.
    – egreg
    yesterday






  • 1




    You Need to put $a^2$ when you want to use math!
    – GiuTeX
    yesterday






  • 1




    @A.E As it is, the added code produces tons of errors.
    – egreg
    yesterday


















  • the answer provided was excellent in the above link, I would appreciate if I can get a similar answer.
    – A.E
    yesterday






  • 3




    Just take Gonzalo's answer and delete first line (the one which contains Capacity) and two left columns and two right ones.
    – Ignasi
    yesterday






  • 1




    array, not tabular.
    – egreg
    yesterday






  • 1




    You Need to put $a^2$ when you want to use math!
    – GiuTeX
    yesterday






  • 1




    @A.E As it is, the added code produces tons of errors.
    – egreg
    yesterday
















the answer provided was excellent in the above link, I would appreciate if I can get a similar answer.
– A.E
yesterday




the answer provided was excellent in the above link, I would appreciate if I can get a similar answer.
– A.E
yesterday




3




3




Just take Gonzalo's answer and delete first line (the one which contains Capacity) and two left columns and two right ones.
– Ignasi
yesterday




Just take Gonzalo's answer and delete first line (the one which contains Capacity) and two left columns and two right ones.
– Ignasi
yesterday




1




1




array, not tabular.
– egreg
yesterday




array, not tabular.
– egreg
yesterday




1




1




You Need to put $a^2$ when you want to use math!
– GiuTeX
yesterday




You Need to put $a^2$ when you want to use math!
– GiuTeX
yesterday




1




1




@A.E As it is, the added code produces tons of errors.
– egreg
yesterday




@A.E As it is, the added code produces tons of errors.
– egreg
yesterday










5 Answers
5






active

oldest

votes

















up vote
9
down vote



accepted










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}

setlengthextrarowheight{3pt}
noindentbegin{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}


noindentbegin{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 hereenter 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 setlengthextrarowheight{3pt} adds some extra row height (how surprising!).



Package {array} is needed for the length extrarowheight.






share|improve this answer



















  • 1




    this is good however I wanted a 5x5 table
    – A.E
    yesterday






  • 1




    Cheers pal, much appreciated.
    – A.E
    yesterday






  • 1




    if you could briefly explain what you did line by line, It would be more beneficial so I know what you've done
    – A.E
    yesterday






  • 1




    much appreciated
    – A.E
    yesterday










  • I added more on the meaning of the c's in {tabular} environment.
    – GiuTeX
    yesterday


















up vote
12
down vote













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






share|improve this answer



















  • 1




    I prefer the method above as it is easier to follow(in my eyes anyway) but thanks for your answer
    – A.E
    yesterday








  • 1




    What does * in l|* mean?
    – manooooh
    yesterday






  • 2




    @manooooh *{6}{l} is short for llllll
    – samcarter
    yesterday






  • 3




    @manooooh The * refers to the following: *{6}{l} means “repeat l six times”.
    – egreg
    yesterday










  • @jfbu Right, fixed
    – egreg
    yesterday


















up vote
10
down vote













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}/11mathbb{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 1else a^{#1}fi
xintFor #2 in {0, 1, 2, 3, 4}:
{%
&thebnumexpr 4^(#1+#2) /: 11relax
}%
\
}%
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 1else a^{#1}fi
xintFor* #2 in {0123456789}:
{%
&thebnumexpr 2^(#1+#2) /: 11relax
}%
\
}%
end{array}
]
end{document}


enter image description here






share|improve this answer





















  • +1 I'm always amazed at how efficient xinttools is!
    – Andrew
    22 hours ago










  • @Andrew your expl3 answer does look efficient too :)
    – jfbu
    21 hours ago


















up vote
5
down vote













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}} \
}
NewDocumentCommandCayleyTable{ 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}





share|improve this answer






























    up vote
    0
    down vote













    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}
    pgfmathsetmacrotot{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}
    {pgfmathsetmacromyplus{myrow+mycol}pgfmathsetmacromyexp{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






    share|improve this answer





















      Your Answer








      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "85"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      convertImagesToLinks: false,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: null,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });






      A.E is a new contributor. Be nice, and check out our Code of Conduct.










       

      draft saved


      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f459639%2fhow-to-draw-a-cayley-table%23new-answer', 'question_page');
      }
      );

      Post as a guest
































      5 Answers
      5






      active

      oldest

      votes








      5 Answers
      5






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes








      up vote
      9
      down vote



      accepted










      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}

      setlengthextrarowheight{3pt}
      noindentbegin{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}


      noindentbegin{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 hereenter 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 setlengthextrarowheight{3pt} adds some extra row height (how surprising!).



      Package {array} is needed for the length extrarowheight.






      share|improve this answer



















      • 1




        this is good however I wanted a 5x5 table
        – A.E
        yesterday






      • 1




        Cheers pal, much appreciated.
        – A.E
        yesterday






      • 1




        if you could briefly explain what you did line by line, It would be more beneficial so I know what you've done
        – A.E
        yesterday






      • 1




        much appreciated
        – A.E
        yesterday










      • I added more on the meaning of the c's in {tabular} environment.
        – GiuTeX
        yesterday















      up vote
      9
      down vote



      accepted










      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}

      setlengthextrarowheight{3pt}
      noindentbegin{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}


      noindentbegin{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 hereenter 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 setlengthextrarowheight{3pt} adds some extra row height (how surprising!).



      Package {array} is needed for the length extrarowheight.






      share|improve this answer



















      • 1




        this is good however I wanted a 5x5 table
        – A.E
        yesterday






      • 1




        Cheers pal, much appreciated.
        – A.E
        yesterday






      • 1




        if you could briefly explain what you did line by line, It would be more beneficial so I know what you've done
        – A.E
        yesterday






      • 1




        much appreciated
        – A.E
        yesterday










      • I added more on the meaning of the c's in {tabular} environment.
        – GiuTeX
        yesterday













      up vote
      9
      down vote



      accepted







      up vote
      9
      down vote



      accepted






      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}

      setlengthextrarowheight{3pt}
      noindentbegin{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}


      noindentbegin{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 hereenter 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 setlengthextrarowheight{3pt} adds some extra row height (how surprising!).



      Package {array} is needed for the length extrarowheight.






      share|improve this answer














      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}

      setlengthextrarowheight{3pt}
      noindentbegin{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}


      noindentbegin{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 hereenter 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 setlengthextrarowheight{3pt} adds some extra row height (how surprising!).



      Package {array} is needed for the length extrarowheight.







      share|improve this answer














      share|improve this answer



      share|improve this answer








      edited yesterday

























      answered yesterday









      GiuTeX

      644216




      644216








      • 1




        this is good however I wanted a 5x5 table
        – A.E
        yesterday






      • 1




        Cheers pal, much appreciated.
        – A.E
        yesterday






      • 1




        if you could briefly explain what you did line by line, It would be more beneficial so I know what you've done
        – A.E
        yesterday






      • 1




        much appreciated
        – A.E
        yesterday










      • I added more on the meaning of the c's in {tabular} environment.
        – GiuTeX
        yesterday














      • 1




        this is good however I wanted a 5x5 table
        – A.E
        yesterday






      • 1




        Cheers pal, much appreciated.
        – A.E
        yesterday






      • 1




        if you could briefly explain what you did line by line, It would be more beneficial so I know what you've done
        – A.E
        yesterday






      • 1




        much appreciated
        – A.E
        yesterday










      • I added more on the meaning of the c's in {tabular} environment.
        – GiuTeX
        yesterday








      1




      1




      this is good however I wanted a 5x5 table
      – A.E
      yesterday




      this is good however I wanted a 5x5 table
      – A.E
      yesterday




      1




      1




      Cheers pal, much appreciated.
      – A.E
      yesterday




      Cheers pal, much appreciated.
      – A.E
      yesterday




      1




      1




      if you could briefly explain what you did line by line, It would be more beneficial so I know what you've done
      – A.E
      yesterday




      if you could briefly explain what you did line by line, It would be more beneficial so I know what you've done
      – A.E
      yesterday




      1




      1




      much appreciated
      – A.E
      yesterday




      much appreciated
      – A.E
      yesterday












      I added more on the meaning of the c's in {tabular} environment.
      – GiuTeX
      yesterday




      I added more on the meaning of the c's in {tabular} environment.
      – GiuTeX
      yesterday










      up vote
      12
      down vote













      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






      share|improve this answer



















      • 1




        I prefer the method above as it is easier to follow(in my eyes anyway) but thanks for your answer
        – A.E
        yesterday








      • 1




        What does * in l|* mean?
        – manooooh
        yesterday






      • 2




        @manooooh *{6}{l} is short for llllll
        – samcarter
        yesterday






      • 3




        @manooooh The * refers to the following: *{6}{l} means “repeat l six times”.
        – egreg
        yesterday










      • @jfbu Right, fixed
        – egreg
        yesterday















      up vote
      12
      down vote













      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






      share|improve this answer



















      • 1




        I prefer the method above as it is easier to follow(in my eyes anyway) but thanks for your answer
        – A.E
        yesterday








      • 1




        What does * in l|* mean?
        – manooooh
        yesterday






      • 2




        @manooooh *{6}{l} is short for llllll
        – samcarter
        yesterday






      • 3




        @manooooh The * refers to the following: *{6}{l} means “repeat l six times”.
        – egreg
        yesterday










      • @jfbu Right, fixed
        – egreg
        yesterday













      up vote
      12
      down vote










      up vote
      12
      down vote









      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






      share|improve this answer














      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







      share|improve this answer














      share|improve this answer



      share|improve this answer








      edited yesterday

























      answered yesterday









      egreg

      697k8518503115




      697k8518503115








      • 1




        I prefer the method above as it is easier to follow(in my eyes anyway) but thanks for your answer
        – A.E
        yesterday








      • 1




        What does * in l|* mean?
        – manooooh
        yesterday






      • 2




        @manooooh *{6}{l} is short for llllll
        – samcarter
        yesterday






      • 3




        @manooooh The * refers to the following: *{6}{l} means “repeat l six times”.
        – egreg
        yesterday










      • @jfbu Right, fixed
        – egreg
        yesterday














      • 1




        I prefer the method above as it is easier to follow(in my eyes anyway) but thanks for your answer
        – A.E
        yesterday








      • 1




        What does * in l|* mean?
        – manooooh
        yesterday






      • 2




        @manooooh *{6}{l} is short for llllll
        – samcarter
        yesterday






      • 3




        @manooooh The * refers to the following: *{6}{l} means “repeat l six times”.
        – egreg
        yesterday










      • @jfbu Right, fixed
        – egreg
        yesterday








      1




      1




      I prefer the method above as it is easier to follow(in my eyes anyway) but thanks for your answer
      – A.E
      yesterday






      I prefer the method above as it is easier to follow(in my eyes anyway) but thanks for your answer
      – A.E
      yesterday






      1




      1




      What does * in l|* mean?
      – manooooh
      yesterday




      What does * in l|* mean?
      – manooooh
      yesterday




      2




      2




      @manooooh *{6}{l} is short for llllll
      – samcarter
      yesterday




      @manooooh *{6}{l} is short for llllll
      – samcarter
      yesterday




      3




      3




      @manooooh The * refers to the following: *{6}{l} means “repeat l six times”.
      – egreg
      yesterday




      @manooooh The * refers to the following: *{6}{l} means “repeat l six times”.
      – egreg
      yesterday












      @jfbu Right, fixed
      – egreg
      yesterday




      @jfbu Right, fixed
      – egreg
      yesterday










      up vote
      10
      down vote













      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}/11mathbb{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 1else a^{#1}fi
      xintFor #2 in {0, 1, 2, 3, 4}:
      {%
      &thebnumexpr 4^(#1+#2) /: 11relax
      }%
      \
      }%
      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 1else a^{#1}fi
      xintFor* #2 in {0123456789}:
      {%
      &thebnumexpr 2^(#1+#2) /: 11relax
      }%
      \
      }%
      end{array}
      ]
      end{document}


      enter image description here






      share|improve this answer





















      • +1 I'm always amazed at how efficient xinttools is!
        – Andrew
        22 hours ago










      • @Andrew your expl3 answer does look efficient too :)
        – jfbu
        21 hours ago















      up vote
      10
      down vote













      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}/11mathbb{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 1else a^{#1}fi
      xintFor #2 in {0, 1, 2, 3, 4}:
      {%
      &thebnumexpr 4^(#1+#2) /: 11relax
      }%
      \
      }%
      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 1else a^{#1}fi
      xintFor* #2 in {0123456789}:
      {%
      &thebnumexpr 2^(#1+#2) /: 11relax
      }%
      \
      }%
      end{array}
      ]
      end{document}


      enter image description here






      share|improve this answer





















      • +1 I'm always amazed at how efficient xinttools is!
        – Andrew
        22 hours ago










      • @Andrew your expl3 answer does look efficient too :)
        – jfbu
        21 hours ago













      up vote
      10
      down vote










      up vote
      10
      down vote









      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}/11mathbb{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 1else a^{#1}fi
      xintFor #2 in {0, 1, 2, 3, 4}:
      {%
      &thebnumexpr 4^(#1+#2) /: 11relax
      }%
      \
      }%
      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 1else a^{#1}fi
      xintFor* #2 in {0123456789}:
      {%
      &thebnumexpr 2^(#1+#2) /: 11relax
      }%
      \
      }%
      end{array}
      ]
      end{document}


      enter image description here






      share|improve this answer












      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}/11mathbb{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 1else a^{#1}fi
      xintFor #2 in {0, 1, 2, 3, 4}:
      {%
      &thebnumexpr 4^(#1+#2) /: 11relax
      }%
      \
      }%
      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 1else a^{#1}fi
      xintFor* #2 in {0123456789}:
      {%
      &thebnumexpr 2^(#1+#2) /: 11relax
      }%
      \
      }%
      end{array}
      ]
      end{document}


      enter image description here







      share|improve this answer












      share|improve this answer



      share|improve this answer










      answered yesterday









      jfbu

      44.1k65143




      44.1k65143












      • +1 I'm always amazed at how efficient xinttools is!
        – Andrew
        22 hours ago










      • @Andrew your expl3 answer does look efficient too :)
        – jfbu
        21 hours ago


















      • +1 I'm always amazed at how efficient xinttools is!
        – Andrew
        22 hours ago










      • @Andrew your expl3 answer does look efficient too :)
        – jfbu
        21 hours ago
















      +1 I'm always amazed at how efficient xinttools is!
      – Andrew
      22 hours ago




      +1 I'm always amazed at how efficient xinttools is!
      – Andrew
      22 hours ago












      @Andrew your expl3 answer does look efficient too :)
      – jfbu
      21 hours ago




      @Andrew your expl3 answer does look efficient too :)
      – jfbu
      21 hours ago










      up vote
      5
      down vote













      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}} \
      }
      NewDocumentCommandCayleyTable{ 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}





      share|improve this answer



























        up vote
        5
        down vote













        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}} \
        }
        NewDocumentCommandCayleyTable{ 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}





        share|improve this answer

























          up vote
          5
          down vote










          up vote
          5
          down vote









          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}} \
          }
          NewDocumentCommandCayleyTable{ 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}





          share|improve this answer














          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}} \
          }
          NewDocumentCommandCayleyTable{ 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}






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited 10 hours ago

























          answered 23 hours ago









          Andrew

          29.1k34177




          29.1k34177






















              up vote
              0
              down vote













              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}
              pgfmathsetmacrotot{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}
              {pgfmathsetmacromyplus{myrow+mycol}pgfmathsetmacromyexp{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






              share|improve this answer

























                up vote
                0
                down vote













                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}
                pgfmathsetmacrotot{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}
                {pgfmathsetmacromyplus{myrow+mycol}pgfmathsetmacromyexp{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






                share|improve this answer























                  up vote
                  0
                  down vote










                  up vote
                  0
                  down vote









                  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}
                  pgfmathsetmacrotot{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}
                  {pgfmathsetmacromyplus{myrow+mycol}pgfmathsetmacromyexp{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






                  share|improve this answer












                  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}
                  pgfmathsetmacrotot{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}
                  {pgfmathsetmacromyplus{myrow+mycol}pgfmathsetmacromyexp{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







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered 9 hours ago









                  CarLaTeX

                  27.1k445118




                  27.1k445118






















                      A.E is a new contributor. Be nice, and check out our Code of Conduct.










                       

                      draft saved


                      draft discarded


















                      A.E is a new contributor. Be nice, and check out our Code of Conduct.













                      A.E is a new contributor. Be nice, and check out our Code of Conduct.












                      A.E is a new contributor. Be nice, and check out our Code of Conduct.















                       


                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f459639%2fhow-to-draw-a-cayley-table%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest




















































































                      Popular posts from this blog

                      How do I know what Microsoft account the skydrive app is syncing to?

                      When does type information flow backwards in C++?

                      Grease: Live!