TikZ matrix, why doesn't “every even row” work with “row sep” option?












9















Please consider the following mwe:



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}

begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
row sep=-pgflinewidth,
every even column/.style={column sep=2pt},
every even row/.style={row sep=2pt},% doesn't insert row separation
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}
end{document}


However every even column/.style={column sep=2pt}, yields the expected result, say, introducing additional column separation after each second column, the every even row/.style={row sep=2pt}, doesn't. Did I do something wrong or this is a bug in TikZ v3.1 (I've never tested this before, so I don't know if the same thing happens in v3.0.1)?



enter image description here



edit:



The same thing happens with, for example,



row 2/.style = {row sep=2pt} 


thus it might mean that every even row/.style=... and row <row number> work fine only if one wants to change some properties of cells inside row, for example, the color of nodes borders:



every even row/.style={draw red},


but not if one aims to change row separation (see @AndréC's comment below). However it is interesting, that this is possible to do in every column sep ...



Of course, the (temporary) workaround terminates each second row of the matrix with for example [2pt], but this is annoying when the matrix is huge like here.










share|improve this question

























  • If you write every even row/.style={blue} it works. Then ...

    – AndréC
    2 days ago











  • @AndréC, it cover each second row with blue color. i expected that after each even row will be row separation 2pt as it is at columns.

    – Zarko
    2 days ago











  • Yes, I know, my example suggests that the error may not be in the style, but in another place. Otherwise, the style would not work for the blue color either.

    – AndréC
    2 days ago






  • 1





    The row sep option does not work with keys either row <number>, row <column number> column <column number>, every odd row

    – AndréC
    2 days ago








  • 1





    @AndréC, ones for nodes, ones for matrix as whole. but might be wrong.

    – Zarko
    2 days ago
















9















Please consider the following mwe:



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}

begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
row sep=-pgflinewidth,
every even column/.style={column sep=2pt},
every even row/.style={row sep=2pt},% doesn't insert row separation
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}
end{document}


However every even column/.style={column sep=2pt}, yields the expected result, say, introducing additional column separation after each second column, the every even row/.style={row sep=2pt}, doesn't. Did I do something wrong or this is a bug in TikZ v3.1 (I've never tested this before, so I don't know if the same thing happens in v3.0.1)?



enter image description here



edit:



The same thing happens with, for example,



row 2/.style = {row sep=2pt} 


thus it might mean that every even row/.style=... and row <row number> work fine only if one wants to change some properties of cells inside row, for example, the color of nodes borders:



every even row/.style={draw red},


but not if one aims to change row separation (see @AndréC's comment below). However it is interesting, that this is possible to do in every column sep ...



Of course, the (temporary) workaround terminates each second row of the matrix with for example [2pt], but this is annoying when the matrix is huge like here.










share|improve this question

























  • If you write every even row/.style={blue} it works. Then ...

    – AndréC
    2 days ago











  • @AndréC, it cover each second row with blue color. i expected that after each even row will be row separation 2pt as it is at columns.

    – Zarko
    2 days ago











  • Yes, I know, my example suggests that the error may not be in the style, but in another place. Otherwise, the style would not work for the blue color either.

    – AndréC
    2 days ago






  • 1





    The row sep option does not work with keys either row <number>, row <column number> column <column number>, every odd row

    – AndréC
    2 days ago








  • 1





    @AndréC, ones for nodes, ones for matrix as whole. but might be wrong.

    – Zarko
    2 days ago














9












9








9


0






Please consider the following mwe:



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}

begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
row sep=-pgflinewidth,
every even column/.style={column sep=2pt},
every even row/.style={row sep=2pt},% doesn't insert row separation
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}
end{document}


However every even column/.style={column sep=2pt}, yields the expected result, say, introducing additional column separation after each second column, the every even row/.style={row sep=2pt}, doesn't. Did I do something wrong or this is a bug in TikZ v3.1 (I've never tested this before, so I don't know if the same thing happens in v3.0.1)?



enter image description here



edit:



The same thing happens with, for example,



row 2/.style = {row sep=2pt} 


thus it might mean that every even row/.style=... and row <row number> work fine only if one wants to change some properties of cells inside row, for example, the color of nodes borders:



every even row/.style={draw red},


but not if one aims to change row separation (see @AndréC's comment below). However it is interesting, that this is possible to do in every column sep ...



Of course, the (temporary) workaround terminates each second row of the matrix with for example [2pt], but this is annoying when the matrix is huge like here.










share|improve this question
















Please consider the following mwe:



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}

begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
row sep=-pgflinewidth,
every even column/.style={column sep=2pt},
every even row/.style={row sep=2pt},% doesn't insert row separation
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}
end{document}


However every even column/.style={column sep=2pt}, yields the expected result, say, introducing additional column separation after each second column, the every even row/.style={row sep=2pt}, doesn't. Did I do something wrong or this is a bug in TikZ v3.1 (I've never tested this before, so I don't know if the same thing happens in v3.0.1)?



enter image description here



edit:



The same thing happens with, for example,



row 2/.style = {row sep=2pt} 


thus it might mean that every even row/.style=... and row <row number> work fine only if one wants to change some properties of cells inside row, for example, the color of nodes borders:



every even row/.style={draw red},


but not if one aims to change row separation (see @AndréC's comment below). However it is interesting, that this is possible to do in every column sep ...



Of course, the (temporary) workaround terminates each second row of the matrix with for example [2pt], but this is annoying when the matrix is huge like here.







tikz-matrix






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 2 days ago









Roboticist

1,60721231




1,60721231










asked 2 days ago









ZarkoZarko

122k865160




122k865160













  • If you write every even row/.style={blue} it works. Then ...

    – AndréC
    2 days ago











  • @AndréC, it cover each second row with blue color. i expected that after each even row will be row separation 2pt as it is at columns.

    – Zarko
    2 days ago











  • Yes, I know, my example suggests that the error may not be in the style, but in another place. Otherwise, the style would not work for the blue color either.

    – AndréC
    2 days ago






  • 1





    The row sep option does not work with keys either row <number>, row <column number> column <column number>, every odd row

    – AndréC
    2 days ago








  • 1





    @AndréC, ones for nodes, ones for matrix as whole. but might be wrong.

    – Zarko
    2 days ago



















  • If you write every even row/.style={blue} it works. Then ...

    – AndréC
    2 days ago











  • @AndréC, it cover each second row with blue color. i expected that after each even row will be row separation 2pt as it is at columns.

    – Zarko
    2 days ago











  • Yes, I know, my example suggests that the error may not be in the style, but in another place. Otherwise, the style would not work for the blue color either.

    – AndréC
    2 days ago






  • 1





    The row sep option does not work with keys either row <number>, row <column number> column <column number>, every odd row

    – AndréC
    2 days ago








  • 1





    @AndréC, ones for nodes, ones for matrix as whole. but might be wrong.

    – Zarko
    2 days ago

















If you write every even row/.style={blue} it works. Then ...

– AndréC
2 days ago





If you write every even row/.style={blue} it works. Then ...

– AndréC
2 days ago













@AndréC, it cover each second row with blue color. i expected that after each even row will be row separation 2pt as it is at columns.

– Zarko
2 days ago





@AndréC, it cover each second row with blue color. i expected that after each even row will be row separation 2pt as it is at columns.

– Zarko
2 days ago













Yes, I know, my example suggests that the error may not be in the style, but in another place. Otherwise, the style would not work for the blue color either.

– AndréC
2 days ago





Yes, I know, my example suggests that the error may not be in the style, but in another place. Otherwise, the style would not work for the blue color either.

– AndréC
2 days ago




1




1





The row sep option does not work with keys either row <number>, row <column number> column <column number>, every odd row

– AndréC
2 days ago







The row sep option does not work with keys either row <number>, row <column number> column <column number>, every odd row

– AndréC
2 days ago






1




1





@AndréC, ones for nodes, ones for matrix as whole. but might be wrong.

– Zarko
2 days ago





@AndréC, ones for nodes, ones for matrix as whole. but might be wrong.

– Zarko
2 days ago










2 Answers
2






active

oldest

votes


















7














The issue is with scopes. In order to make sure that the style code for the current row only applies to the current row, the style code is executed inside of a scope that is local to the current row. This scope is closed prior to ending the row and adding the row separation, so the value is reverted before it is applied. The solution is to make the change to the row sep global. The key row sep stores the value in pgfmatrixrowsep so we globally define this to be the updated value. Because this change is global, it applies to all rows going forward, so we need an every odd row key setting the row sep to zero to switch it back.



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}

begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
every even column/.style={column sep=2pt},
every even row/.style={/utils/exec=gdefpgfmatrixrowsep{2pt}},
every odd row/.style={/utils/exec=gdefpgfmatrixrowsep{-pgflinewidth}},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}
end{document}


enter image description here






share|improve this answer


























  • thank you for explanation. are this means, that column as treated differently (not in column scope). i expected, that rows and columns should have the same approach in executing code (this can be concluded from description of these options in manual).

    – Zarko
    2 days ago






  • 1





    i took liberty and add picture and slightly change code. thank you again (+1 at writing the first comment :-), for accepting i will wait a while)

    – Zarko
    2 days ago











  • In the code the matrices are processed rows first and then columns. Because of this, the way the style code for a row is executed once at the beginning of the row and goes out of scope at the end of the row. The style code for a column is executed many times, once for each cell in the column. I suspect the asymmetry has something to do with this, but I don't feel like reading the code carefully enough to track down the particulars.

    – Hood Chatham
    2 days ago











  • Anyways, the point is that the symmetry between rows and columns is an abstraction that the authors of tikz tried to create for the sake of user sanity, but it isn't perfect.

    – Hood Chatham
    2 days ago






  • 1





    This is a nice analysis, +1 for that. Note, however, that you set these values globally, so every subsequent matrix will have it. Note also that the matrix library has means of "smuggling" values out of the group, which avoids making them global. Why this has not been used for every row I do not know.

    – marmot
    2 days ago



















5














This is more an extended comment than an answer. The comment concerns Hood Chathams proposal to make the dimensions global. Here is what happens:



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}

begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}

begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
every even column/.style={column sep=2pt},
every even row/.style={/utils/exec=gdefpgfmatrixrowsep{2pt}},
every odd row/.style={/utils/exec=gdefpgfmatrixrowsep{-pgflinewidth}},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}

begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}

end{document}


enter image description here



Let me, however, stress that I really like the answer by Hood Chatham as a whole as it has a very nice explanation for why this happens. I just want add a word of caution.



Here is another proposal.



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}
begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
row sep=ifoddpgfmatrixcurrentrow%
-pgflinewidth%
else%
2pt%
fi,
every even column/.style={column sep=2pt},
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}
end{document}


enter image description here



It does produce the desired output. However, it also produces warnings of the type end occurred when ifx on line 21 was incomplete. So I am definitely not claiming this proposal is better than Hood Chathams suggestion.



Of course, a very pragmatic solution would be to use



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}

begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
row sep=-pgflinewidth,
every even column/.style={column sep=2pt},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \[2pt]
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}
end{document}





share|improve this answer





















  • 1





    thank you for "extended comment (+1). it helps to understanding whats all is behind of using row styles.

    – Zarko
    2 days ago











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',
autoActivateHeartbeat: false,
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
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f469954%2ftikz-matrix-why-doesnt-every-even-row-work-with-row-sep-option%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























2 Answers
2






active

oldest

votes








2 Answers
2






active

oldest

votes









active

oldest

votes






active

oldest

votes









7














The issue is with scopes. In order to make sure that the style code for the current row only applies to the current row, the style code is executed inside of a scope that is local to the current row. This scope is closed prior to ending the row and adding the row separation, so the value is reverted before it is applied. The solution is to make the change to the row sep global. The key row sep stores the value in pgfmatrixrowsep so we globally define this to be the updated value. Because this change is global, it applies to all rows going forward, so we need an every odd row key setting the row sep to zero to switch it back.



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}

begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
every even column/.style={column sep=2pt},
every even row/.style={/utils/exec=gdefpgfmatrixrowsep{2pt}},
every odd row/.style={/utils/exec=gdefpgfmatrixrowsep{-pgflinewidth}},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}
end{document}


enter image description here






share|improve this answer


























  • thank you for explanation. are this means, that column as treated differently (not in column scope). i expected, that rows and columns should have the same approach in executing code (this can be concluded from description of these options in manual).

    – Zarko
    2 days ago






  • 1





    i took liberty and add picture and slightly change code. thank you again (+1 at writing the first comment :-), for accepting i will wait a while)

    – Zarko
    2 days ago











  • In the code the matrices are processed rows first and then columns. Because of this, the way the style code for a row is executed once at the beginning of the row and goes out of scope at the end of the row. The style code for a column is executed many times, once for each cell in the column. I suspect the asymmetry has something to do with this, but I don't feel like reading the code carefully enough to track down the particulars.

    – Hood Chatham
    2 days ago











  • Anyways, the point is that the symmetry between rows and columns is an abstraction that the authors of tikz tried to create for the sake of user sanity, but it isn't perfect.

    – Hood Chatham
    2 days ago






  • 1





    This is a nice analysis, +1 for that. Note, however, that you set these values globally, so every subsequent matrix will have it. Note also that the matrix library has means of "smuggling" values out of the group, which avoids making them global. Why this has not been used for every row I do not know.

    – marmot
    2 days ago
















7














The issue is with scopes. In order to make sure that the style code for the current row only applies to the current row, the style code is executed inside of a scope that is local to the current row. This scope is closed prior to ending the row and adding the row separation, so the value is reverted before it is applied. The solution is to make the change to the row sep global. The key row sep stores the value in pgfmatrixrowsep so we globally define this to be the updated value. Because this change is global, it applies to all rows going forward, so we need an every odd row key setting the row sep to zero to switch it back.



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}

begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
every even column/.style={column sep=2pt},
every even row/.style={/utils/exec=gdefpgfmatrixrowsep{2pt}},
every odd row/.style={/utils/exec=gdefpgfmatrixrowsep{-pgflinewidth}},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}
end{document}


enter image description here






share|improve this answer


























  • thank you for explanation. are this means, that column as treated differently (not in column scope). i expected, that rows and columns should have the same approach in executing code (this can be concluded from description of these options in manual).

    – Zarko
    2 days ago






  • 1





    i took liberty and add picture and slightly change code. thank you again (+1 at writing the first comment :-), for accepting i will wait a while)

    – Zarko
    2 days ago











  • In the code the matrices are processed rows first and then columns. Because of this, the way the style code for a row is executed once at the beginning of the row and goes out of scope at the end of the row. The style code for a column is executed many times, once for each cell in the column. I suspect the asymmetry has something to do with this, but I don't feel like reading the code carefully enough to track down the particulars.

    – Hood Chatham
    2 days ago











  • Anyways, the point is that the symmetry between rows and columns is an abstraction that the authors of tikz tried to create for the sake of user sanity, but it isn't perfect.

    – Hood Chatham
    2 days ago






  • 1





    This is a nice analysis, +1 for that. Note, however, that you set these values globally, so every subsequent matrix will have it. Note also that the matrix library has means of "smuggling" values out of the group, which avoids making them global. Why this has not been used for every row I do not know.

    – marmot
    2 days ago














7












7








7







The issue is with scopes. In order to make sure that the style code for the current row only applies to the current row, the style code is executed inside of a scope that is local to the current row. This scope is closed prior to ending the row and adding the row separation, so the value is reverted before it is applied. The solution is to make the change to the row sep global. The key row sep stores the value in pgfmatrixrowsep so we globally define this to be the updated value. Because this change is global, it applies to all rows going forward, so we need an every odd row key setting the row sep to zero to switch it back.



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}

begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
every even column/.style={column sep=2pt},
every even row/.style={/utils/exec=gdefpgfmatrixrowsep{2pt}},
every odd row/.style={/utils/exec=gdefpgfmatrixrowsep{-pgflinewidth}},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}
end{document}


enter image description here






share|improve this answer















The issue is with scopes. In order to make sure that the style code for the current row only applies to the current row, the style code is executed inside of a scope that is local to the current row. This scope is closed prior to ending the row and adding the row separation, so the value is reverted before it is applied. The solution is to make the change to the row sep global. The key row sep stores the value in pgfmatrixrowsep so we globally define this to be the updated value. Because this change is global, it applies to all rows going forward, so we need an every odd row key setting the row sep to zero to switch it back.



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}

begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
every even column/.style={column sep=2pt},
every even row/.style={/utils/exec=gdefpgfmatrixrowsep{2pt}},
every odd row/.style={/utils/exec=gdefpgfmatrixrowsep{-pgflinewidth}},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}
end{document}


enter image description here







share|improve this answer














share|improve this answer



share|improve this answer








edited 2 days ago









Zarko

122k865160




122k865160










answered 2 days ago









Hood ChathamHood Chatham

4,2741428




4,2741428













  • thank you for explanation. are this means, that column as treated differently (not in column scope). i expected, that rows and columns should have the same approach in executing code (this can be concluded from description of these options in manual).

    – Zarko
    2 days ago






  • 1





    i took liberty and add picture and slightly change code. thank you again (+1 at writing the first comment :-), for accepting i will wait a while)

    – Zarko
    2 days ago











  • In the code the matrices are processed rows first and then columns. Because of this, the way the style code for a row is executed once at the beginning of the row and goes out of scope at the end of the row. The style code for a column is executed many times, once for each cell in the column. I suspect the asymmetry has something to do with this, but I don't feel like reading the code carefully enough to track down the particulars.

    – Hood Chatham
    2 days ago











  • Anyways, the point is that the symmetry between rows and columns is an abstraction that the authors of tikz tried to create for the sake of user sanity, but it isn't perfect.

    – Hood Chatham
    2 days ago






  • 1





    This is a nice analysis, +1 for that. Note, however, that you set these values globally, so every subsequent matrix will have it. Note also that the matrix library has means of "smuggling" values out of the group, which avoids making them global. Why this has not been used for every row I do not know.

    – marmot
    2 days ago



















  • thank you for explanation. are this means, that column as treated differently (not in column scope). i expected, that rows and columns should have the same approach in executing code (this can be concluded from description of these options in manual).

    – Zarko
    2 days ago






  • 1





    i took liberty and add picture and slightly change code. thank you again (+1 at writing the first comment :-), for accepting i will wait a while)

    – Zarko
    2 days ago











  • In the code the matrices are processed rows first and then columns. Because of this, the way the style code for a row is executed once at the beginning of the row and goes out of scope at the end of the row. The style code for a column is executed many times, once for each cell in the column. I suspect the asymmetry has something to do with this, but I don't feel like reading the code carefully enough to track down the particulars.

    – Hood Chatham
    2 days ago











  • Anyways, the point is that the symmetry between rows and columns is an abstraction that the authors of tikz tried to create for the sake of user sanity, but it isn't perfect.

    – Hood Chatham
    2 days ago






  • 1





    This is a nice analysis, +1 for that. Note, however, that you set these values globally, so every subsequent matrix will have it. Note also that the matrix library has means of "smuggling" values out of the group, which avoids making them global. Why this has not been used for every row I do not know.

    – marmot
    2 days ago

















thank you for explanation. are this means, that column as treated differently (not in column scope). i expected, that rows and columns should have the same approach in executing code (this can be concluded from description of these options in manual).

– Zarko
2 days ago





thank you for explanation. are this means, that column as treated differently (not in column scope). i expected, that rows and columns should have the same approach in executing code (this can be concluded from description of these options in manual).

– Zarko
2 days ago




1




1





i took liberty and add picture and slightly change code. thank you again (+1 at writing the first comment :-), for accepting i will wait a while)

– Zarko
2 days ago





i took liberty and add picture and slightly change code. thank you again (+1 at writing the first comment :-), for accepting i will wait a while)

– Zarko
2 days ago













In the code the matrices are processed rows first and then columns. Because of this, the way the style code for a row is executed once at the beginning of the row and goes out of scope at the end of the row. The style code for a column is executed many times, once for each cell in the column. I suspect the asymmetry has something to do with this, but I don't feel like reading the code carefully enough to track down the particulars.

– Hood Chatham
2 days ago





In the code the matrices are processed rows first and then columns. Because of this, the way the style code for a row is executed once at the beginning of the row and goes out of scope at the end of the row. The style code for a column is executed many times, once for each cell in the column. I suspect the asymmetry has something to do with this, but I don't feel like reading the code carefully enough to track down the particulars.

– Hood Chatham
2 days ago













Anyways, the point is that the symmetry between rows and columns is an abstraction that the authors of tikz tried to create for the sake of user sanity, but it isn't perfect.

– Hood Chatham
2 days ago





Anyways, the point is that the symmetry between rows and columns is an abstraction that the authors of tikz tried to create for the sake of user sanity, but it isn't perfect.

– Hood Chatham
2 days ago




1




1





This is a nice analysis, +1 for that. Note, however, that you set these values globally, so every subsequent matrix will have it. Note also that the matrix library has means of "smuggling" values out of the group, which avoids making them global. Why this has not been used for every row I do not know.

– marmot
2 days ago





This is a nice analysis, +1 for that. Note, however, that you set these values globally, so every subsequent matrix will have it. Note also that the matrix library has means of "smuggling" values out of the group, which avoids making them global. Why this has not been used for every row I do not know.

– marmot
2 days ago











5














This is more an extended comment than an answer. The comment concerns Hood Chathams proposal to make the dimensions global. Here is what happens:



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}

begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}

begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
every even column/.style={column sep=2pt},
every even row/.style={/utils/exec=gdefpgfmatrixrowsep{2pt}},
every odd row/.style={/utils/exec=gdefpgfmatrixrowsep{-pgflinewidth}},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}

begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}

end{document}


enter image description here



Let me, however, stress that I really like the answer by Hood Chatham as a whole as it has a very nice explanation for why this happens. I just want add a word of caution.



Here is another proposal.



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}
begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
row sep=ifoddpgfmatrixcurrentrow%
-pgflinewidth%
else%
2pt%
fi,
every even column/.style={column sep=2pt},
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}
end{document}


enter image description here



It does produce the desired output. However, it also produces warnings of the type end occurred when ifx on line 21 was incomplete. So I am definitely not claiming this proposal is better than Hood Chathams suggestion.



Of course, a very pragmatic solution would be to use



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}

begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
row sep=-pgflinewidth,
every even column/.style={column sep=2pt},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \[2pt]
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}
end{document}





share|improve this answer





















  • 1





    thank you for "extended comment (+1). it helps to understanding whats all is behind of using row styles.

    – Zarko
    2 days ago
















5














This is more an extended comment than an answer. The comment concerns Hood Chathams proposal to make the dimensions global. Here is what happens:



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}

begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}

begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
every even column/.style={column sep=2pt},
every even row/.style={/utils/exec=gdefpgfmatrixrowsep{2pt}},
every odd row/.style={/utils/exec=gdefpgfmatrixrowsep{-pgflinewidth}},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}

begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}

end{document}


enter image description here



Let me, however, stress that I really like the answer by Hood Chatham as a whole as it has a very nice explanation for why this happens. I just want add a word of caution.



Here is another proposal.



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}
begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
row sep=ifoddpgfmatrixcurrentrow%
-pgflinewidth%
else%
2pt%
fi,
every even column/.style={column sep=2pt},
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}
end{document}


enter image description here



It does produce the desired output. However, it also produces warnings of the type end occurred when ifx on line 21 was incomplete. So I am definitely not claiming this proposal is better than Hood Chathams suggestion.



Of course, a very pragmatic solution would be to use



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}

begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
row sep=-pgflinewidth,
every even column/.style={column sep=2pt},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \[2pt]
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}
end{document}





share|improve this answer





















  • 1





    thank you for "extended comment (+1). it helps to understanding whats all is behind of using row styles.

    – Zarko
    2 days ago














5












5








5







This is more an extended comment than an answer. The comment concerns Hood Chathams proposal to make the dimensions global. Here is what happens:



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}

begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}

begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
every even column/.style={column sep=2pt},
every even row/.style={/utils/exec=gdefpgfmatrixrowsep{2pt}},
every odd row/.style={/utils/exec=gdefpgfmatrixrowsep{-pgflinewidth}},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}

begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}

end{document}


enter image description here



Let me, however, stress that I really like the answer by Hood Chatham as a whole as it has a very nice explanation for why this happens. I just want add a word of caution.



Here is another proposal.



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}
begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
row sep=ifoddpgfmatrixcurrentrow%
-pgflinewidth%
else%
2pt%
fi,
every even column/.style={column sep=2pt},
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}
end{document}


enter image description here



It does produce the desired output. However, it also produces warnings of the type end occurred when ifx on line 21 was incomplete. So I am definitely not claiming this proposal is better than Hood Chathams suggestion.



Of course, a very pragmatic solution would be to use



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}

begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
row sep=-pgflinewidth,
every even column/.style={column sep=2pt},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \[2pt]
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}
end{document}





share|improve this answer















This is more an extended comment than an answer. The comment concerns Hood Chathams proposal to make the dimensions global. Here is what happens:



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}

begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}

begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
every even column/.style={column sep=2pt},
every even row/.style={/utils/exec=gdefpgfmatrixrowsep{2pt}},
every odd row/.style={/utils/exec=gdefpgfmatrixrowsep{-pgflinewidth}},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}

begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}

end{document}


enter image description here



Let me, however, stress that I really like the answer by Hood Chatham as a whole as it has a very nice explanation for why this happens. I just want add a word of caution.



Here is another proposal.



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}
begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
row sep=ifoddpgfmatrixcurrentrow%
-pgflinewidth%
else%
2pt%
fi,
every even column/.style={column sep=2pt},
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}
end{document}


enter image description here



It does produce the desired output. However, it also produces warnings of the type end occurred when ifx on line 21 was incomplete. So I am definitely not claiming this proposal is better than Hood Chathams suggestion.



Of course, a very pragmatic solution would be to use



documentclass[tikz, margin=3mm]{standalone}
usetikzlibrary{matrix}

begin{document}
begin{tikzpicture}
matrix (m) [matrix of math nodes,
nodes={draw, font=footnotesize, minimum size=1em,
anchor=center,inner sep=0pt},
column sep=-pgflinewidth,
row sep=-pgflinewidth,
every even column/.style={column sep=2pt},
inner sep=1pt,
left delimiter={[},right delimiter={]},
]
{
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \[2pt]
alpha & beta & gamma & delta \
alpha & beta & gamma & delta \
};
end{tikzpicture}
end{document}






share|improve this answer














share|improve this answer



share|improve this answer








edited 2 days ago

























answered 2 days ago









marmotmarmot

91.6k4106199




91.6k4106199








  • 1





    thank you for "extended comment (+1). it helps to understanding whats all is behind of using row styles.

    – Zarko
    2 days ago














  • 1





    thank you for "extended comment (+1). it helps to understanding whats all is behind of using row styles.

    – Zarko
    2 days ago








1




1





thank you for "extended comment (+1). it helps to understanding whats all is behind of using row styles.

– Zarko
2 days ago





thank you for "extended comment (+1). it helps to understanding whats all is behind of using row styles.

– Zarko
2 days ago


















draft saved

draft discarded




















































Thanks for contributing an answer to TeX - LaTeX Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f469954%2ftikz-matrix-why-doesnt-every-even-row-work-with-row-sep-option%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

"Incorrect syntax near the keyword 'ON'. (on update cascade, on delete cascade,)

Alcedinidae

Origin of the phrase “under your belt”?