Show sparse matrices like chessboardsParametrize shading in table through TikZDrawing heatmaps using...
Can a magnetic field of a large body be stronger than its gravity?
Sucuri detects malware on wordpress but I can't find the malicious code
Please help me identify this plane
Why was it possible to cause an Apple //e to shut down with SHIFT and paddle button 2?
Rotated Position of Integers
Can you please explain this joke: "I'm going bananas is what I tell my bananas before I leave the house"?
What if you don't bring your credit card or debit for incidentals?
Did Darth Vader wear the same suit for 20+ years?
Pros and cons of writing a book review?
How to provide realism without making readers think grimdark
How can I determine the spell save DC of a monster/NPC?
How to make thick Asian sauces?
PhD student with mental health issues and bad performance
Responsibility for visa checking
How to detach yourself from a character you're going to kill?
Did thousands of women die every year due to illegal abortions before Roe v. Wade?
Get value of the passed argument to script importing variables from another script
Word for a small burst of laughter that can't be held back
When leasing/renting out an owned property, is there a standard ratio between monthly rent and the mortgage?
What happens if you do emergency landing on a US base in middle of the ocean?
Do I add my ability modifier to the damage of the bonus-action attack granted by the Crossbow Expert feat?
If a problem only occurs randomly once in every N times on average, how many tests do I have to perform to be certain that it's now fixed?
Can a class take a different class's spell in their ritual book?
How can I add depth to my story or how do I determine if my story already has depth?
Show sparse matrices like chessboards
Parametrize shading in table through TikZDrawing heatmaps using TikZLaTeX Tables: Cell value color based on its sign / conditional cell colorsymmetric matricesTikZ marking several blocks in a matrixeasybmat matrices dotted linesMatrices off the pageHomogeneous Matrices (elements size)Matrices with cryptocode packageAlign matrices in TexmakerWriting matrices in latexSystem of matricesHow to show matrix numbering under the matrices?
I am trying to display sparse matrices like chessboards, where white places indicates 0 entries and black ones non-zero entries (in this case matrices are boolean so every non-zero entry is a one entry), but I can't find a proper way.
Because I am looking to show more than one matrix (more in detail, I have to show matrix A and its power), I will have to print more than one on the same page and specify their layout, like figures.
For example, given this matrix as input:
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 0 |
I would expect such output:
matrices
add a comment |
I am trying to display sparse matrices like chessboards, where white places indicates 0 entries and black ones non-zero entries (in this case matrices are boolean so every non-zero entry is a one entry), but I can't find a proper way.
Because I am looking to show more than one matrix (more in detail, I have to show matrix A and its power), I will have to print more than one on the same page and specify their layout, like figures.
For example, given this matrix as input:
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 0 |
I would expect such output:
matrices
Welcome to the site. You are expected to provide a small, complete (non)working example of code demonstrating what you have tried. An image of what you are hoping to achieve would help a great deal.
– Steven B. Segletes
9 hours ago
Perhaps this question might apply directly? tex.stackexchange.com/questions/44868/… and tex.stackexchange.com/questions/42444/… and tex.stackexchange.com/questions/174234/…
– Steven B. Segletes
9 hours ago
add a comment |
I am trying to display sparse matrices like chessboards, where white places indicates 0 entries and black ones non-zero entries (in this case matrices are boolean so every non-zero entry is a one entry), but I can't find a proper way.
Because I am looking to show more than one matrix (more in detail, I have to show matrix A and its power), I will have to print more than one on the same page and specify their layout, like figures.
For example, given this matrix as input:
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 0 |
I would expect such output:
matrices
I am trying to display sparse matrices like chessboards, where white places indicates 0 entries and black ones non-zero entries (in this case matrices are boolean so every non-zero entry is a one entry), but I can't find a proper way.
Because I am looking to show more than one matrix (more in detail, I have to show matrix A and its power), I will have to print more than one on the same page and specify their layout, like figures.
For example, given this matrix as input:
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 0 |
I would expect such output:
matrices
matrices
edited 9 hours ago
EagleOne
asked 9 hours ago
EagleOneEagleOne
456
456
Welcome to the site. You are expected to provide a small, complete (non)working example of code demonstrating what you have tried. An image of what you are hoping to achieve would help a great deal.
– Steven B. Segletes
9 hours ago
Perhaps this question might apply directly? tex.stackexchange.com/questions/44868/… and tex.stackexchange.com/questions/42444/… and tex.stackexchange.com/questions/174234/…
– Steven B. Segletes
9 hours ago
add a comment |
Welcome to the site. You are expected to provide a small, complete (non)working example of code demonstrating what you have tried. An image of what you are hoping to achieve would help a great deal.
– Steven B. Segletes
9 hours ago
Perhaps this question might apply directly? tex.stackexchange.com/questions/44868/… and tex.stackexchange.com/questions/42444/… and tex.stackexchange.com/questions/174234/…
– Steven B. Segletes
9 hours ago
Welcome to the site. You are expected to provide a small, complete (non)working example of code demonstrating what you have tried. An image of what you are hoping to achieve would help a great deal.
– Steven B. Segletes
9 hours ago
Welcome to the site. You are expected to provide a small, complete (non)working example of code demonstrating what you have tried. An image of what you are hoping to achieve would help a great deal.
– Steven B. Segletes
9 hours ago
Perhaps this question might apply directly? tex.stackexchange.com/questions/44868/… and tex.stackexchange.com/questions/42444/… and tex.stackexchange.com/questions/174234/…
– Steven B. Segletes
9 hours ago
Perhaps this question might apply directly? tex.stackexchange.com/questions/44868/… and tex.stackexchange.com/questions/42444/… and tex.stackexchange.com/questions/174234/…
– Steven B. Segletes
9 hours ago
add a comment |
2 Answers
2
active
oldest
votes
With TikZ this is rather straightforward.
documentclass{article}
usepackage{tikz}
usetikzlibrary{matrix}
begin{document}
begin{tikzpicture}[0/.style={draw,ultra thin},1/.style={0,fill=black}]
matrix[matrix of nodes,cells={minimum size=1.5em,anchor=center}]
{|[0]| & |[1]| & |[0]| \
|[1]| & |[0]| & |[1]|\
|[0]| & |[1]| & |[0]|\
};
end{tikzpicture}
end{document}
If you have a simple pattern as this one, you could also do
documentclass{article}
usepackage{tikz}
usetikzlibrary{matrix}
begin{document}
begin{tikzpicture}[my cell/.style={/utils/exec={%
pgfmathtruncatemacro{itest}{mod(thepgfmatrixcurrentrow+thepgfmatrixcurrentcolumn,2)}
ifnumitest=1
pgfkeysalso{/tikz/fill=black}
fi}}]
matrix[matrix of nodes,nodes in empty cells,
nodes={minimum size=1.5em,anchor=center,draw,ultra thin,my cell}]
{ & & \
& & \
& & \
};
end{tikzpicture}
end{document}
add a comment |
With a fairly natural syntax:
documentclass{article}
usepackage{amsmath}
newlength{sparsesize}
setlength{sparsesize}{12pt}
newcommand{sparsezero}{%
begingroup
setlength{fboxsep}{-0.2pt}%
setlength{fboxrule}{0.2pt}%
fbox{hspace{sparsesize}rule{0pt}{sparsesize}}%
endgroup
}
newcommand{sparseone}{rule{sparsesize}{sparsesize}}
newcommand{activate}[2]{%
begingrouplccode`~=`#1lowercase{endgrouplet~}#2%
mathcode`#1="8000
}
newenvironment{sparsematrix}
{%
renewcommand{arraystretch}{0}%
setlength{arraycolsep}{0pt}%
activate{0}{sparsezero}activate{1}{sparseone}%
begin{matrix}%
}
{end{matrix}}
begin{document}
[
begin{pmatrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{pmatrix}
=
begin{sparsematrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{sparsematrix}
]
end{document}
For general matrices with integer coefficients it's a bit more difficult.
documentclass{article}
usepackage{amsmath,xparse}
newlength{sparsesize}
setlength{sparsesize}{12pt}
newcommand{sparsezero}{%
begingroup
setlength{fboxsep}{-0.2pt}%
setlength{fboxrule}{0.2pt}%
fbox{hspace{sparsesize}rule{0pt}{sparsesize}}%
endgroup
}
newcommand{sparseone}{rule{sparsesize}{sparsesize}}
ExplSyntaxOn
NewDocumentEnvironment{sparsematrix}{b}
{
renewcommand{arraystretch}{0}%
setlength{arraycolsep}{0pt}%
{% make a subformula
begin{matrix}
eagleone_sparsematrix:n { #1 }
end{matrix}
}
}{}
seq_new:N l__eagleone_sparsematrix_rows_seq
seq_new:N l__eagleone_sparsematrix_row_in_seq
seq_new:N l__eagleone_sparsematrix_row_out_seq
cs_new_protected:Nn eagleone_sparsematrix:n
{
seq_set_split:Nnn l__eagleone_sparsematrix_rows_seq { \ } { #1 }
seq_map_function:NN l__eagleone_sparsematrix_rows_seq __eagleone_sparsematrix_row:n
}
cs_new_protected:Nn __eagleone_sparsematrix_row:n
{
seq_set_split:Nnn l__eagleone_sparsematrix_row_in_seq { & } { #1 }
seq_map_inline:Nn l__eagleone_sparsematrix_row_in_seq
{
int_compare:nTF { ##1 = 0 }
{
seq_put_right:Nn l__eagleone_sparsematrix_row_out_seq { sparsezero }
}
{
seq_put_right:Nn l__eagleone_sparsematrix_row_out_seq { sparseone }
}
}
seq_use:Nn l__eagleone_sparsematrix_row_out_seq { & } \
}
ExplSyntaxOff
begin{document}
[
begin{pmatrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{pmatrix}
=
begin{sparsematrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{sparsematrix}
]
[
begin{sparsematrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{sparsematrix}^2
=
begin{sparsematrix}
1 & 0 & 1 \
0 & 2 & 0 \
1 & 0 & 1
end{sparsematrix}
]
end{document}
1
For my humble opinion: excellent. +1.
– Sebastiano
7 hours ago
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f493392%2fshow-sparse-matrices-like-chessboards%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
With TikZ this is rather straightforward.
documentclass{article}
usepackage{tikz}
usetikzlibrary{matrix}
begin{document}
begin{tikzpicture}[0/.style={draw,ultra thin},1/.style={0,fill=black}]
matrix[matrix of nodes,cells={minimum size=1.5em,anchor=center}]
{|[0]| & |[1]| & |[0]| \
|[1]| & |[0]| & |[1]|\
|[0]| & |[1]| & |[0]|\
};
end{tikzpicture}
end{document}
If you have a simple pattern as this one, you could also do
documentclass{article}
usepackage{tikz}
usetikzlibrary{matrix}
begin{document}
begin{tikzpicture}[my cell/.style={/utils/exec={%
pgfmathtruncatemacro{itest}{mod(thepgfmatrixcurrentrow+thepgfmatrixcurrentcolumn,2)}
ifnumitest=1
pgfkeysalso{/tikz/fill=black}
fi}}]
matrix[matrix of nodes,nodes in empty cells,
nodes={minimum size=1.5em,anchor=center,draw,ultra thin,my cell}]
{ & & \
& & \
& & \
};
end{tikzpicture}
end{document}
add a comment |
With TikZ this is rather straightforward.
documentclass{article}
usepackage{tikz}
usetikzlibrary{matrix}
begin{document}
begin{tikzpicture}[0/.style={draw,ultra thin},1/.style={0,fill=black}]
matrix[matrix of nodes,cells={minimum size=1.5em,anchor=center}]
{|[0]| & |[1]| & |[0]| \
|[1]| & |[0]| & |[1]|\
|[0]| & |[1]| & |[0]|\
};
end{tikzpicture}
end{document}
If you have a simple pattern as this one, you could also do
documentclass{article}
usepackage{tikz}
usetikzlibrary{matrix}
begin{document}
begin{tikzpicture}[my cell/.style={/utils/exec={%
pgfmathtruncatemacro{itest}{mod(thepgfmatrixcurrentrow+thepgfmatrixcurrentcolumn,2)}
ifnumitest=1
pgfkeysalso{/tikz/fill=black}
fi}}]
matrix[matrix of nodes,nodes in empty cells,
nodes={minimum size=1.5em,anchor=center,draw,ultra thin,my cell}]
{ & & \
& & \
& & \
};
end{tikzpicture}
end{document}
add a comment |
With TikZ this is rather straightforward.
documentclass{article}
usepackage{tikz}
usetikzlibrary{matrix}
begin{document}
begin{tikzpicture}[0/.style={draw,ultra thin},1/.style={0,fill=black}]
matrix[matrix of nodes,cells={minimum size=1.5em,anchor=center}]
{|[0]| & |[1]| & |[0]| \
|[1]| & |[0]| & |[1]|\
|[0]| & |[1]| & |[0]|\
};
end{tikzpicture}
end{document}
If you have a simple pattern as this one, you could also do
documentclass{article}
usepackage{tikz}
usetikzlibrary{matrix}
begin{document}
begin{tikzpicture}[my cell/.style={/utils/exec={%
pgfmathtruncatemacro{itest}{mod(thepgfmatrixcurrentrow+thepgfmatrixcurrentcolumn,2)}
ifnumitest=1
pgfkeysalso{/tikz/fill=black}
fi}}]
matrix[matrix of nodes,nodes in empty cells,
nodes={minimum size=1.5em,anchor=center,draw,ultra thin,my cell}]
{ & & \
& & \
& & \
};
end{tikzpicture}
end{document}
With TikZ this is rather straightforward.
documentclass{article}
usepackage{tikz}
usetikzlibrary{matrix}
begin{document}
begin{tikzpicture}[0/.style={draw,ultra thin},1/.style={0,fill=black}]
matrix[matrix of nodes,cells={minimum size=1.5em,anchor=center}]
{|[0]| & |[1]| & |[0]| \
|[1]| & |[0]| & |[1]|\
|[0]| & |[1]| & |[0]|\
};
end{tikzpicture}
end{document}
If you have a simple pattern as this one, you could also do
documentclass{article}
usepackage{tikz}
usetikzlibrary{matrix}
begin{document}
begin{tikzpicture}[my cell/.style={/utils/exec={%
pgfmathtruncatemacro{itest}{mod(thepgfmatrixcurrentrow+thepgfmatrixcurrentcolumn,2)}
ifnumitest=1
pgfkeysalso{/tikz/fill=black}
fi}}]
matrix[matrix of nodes,nodes in empty cells,
nodes={minimum size=1.5em,anchor=center,draw,ultra thin,my cell}]
{ & & \
& & \
& & \
};
end{tikzpicture}
end{document}
edited 8 hours ago
answered 8 hours ago
marmotmarmot
131k6166316
131k6166316
add a comment |
add a comment |
With a fairly natural syntax:
documentclass{article}
usepackage{amsmath}
newlength{sparsesize}
setlength{sparsesize}{12pt}
newcommand{sparsezero}{%
begingroup
setlength{fboxsep}{-0.2pt}%
setlength{fboxrule}{0.2pt}%
fbox{hspace{sparsesize}rule{0pt}{sparsesize}}%
endgroup
}
newcommand{sparseone}{rule{sparsesize}{sparsesize}}
newcommand{activate}[2]{%
begingrouplccode`~=`#1lowercase{endgrouplet~}#2%
mathcode`#1="8000
}
newenvironment{sparsematrix}
{%
renewcommand{arraystretch}{0}%
setlength{arraycolsep}{0pt}%
activate{0}{sparsezero}activate{1}{sparseone}%
begin{matrix}%
}
{end{matrix}}
begin{document}
[
begin{pmatrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{pmatrix}
=
begin{sparsematrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{sparsematrix}
]
end{document}
For general matrices with integer coefficients it's a bit more difficult.
documentclass{article}
usepackage{amsmath,xparse}
newlength{sparsesize}
setlength{sparsesize}{12pt}
newcommand{sparsezero}{%
begingroup
setlength{fboxsep}{-0.2pt}%
setlength{fboxrule}{0.2pt}%
fbox{hspace{sparsesize}rule{0pt}{sparsesize}}%
endgroup
}
newcommand{sparseone}{rule{sparsesize}{sparsesize}}
ExplSyntaxOn
NewDocumentEnvironment{sparsematrix}{b}
{
renewcommand{arraystretch}{0}%
setlength{arraycolsep}{0pt}%
{% make a subformula
begin{matrix}
eagleone_sparsematrix:n { #1 }
end{matrix}
}
}{}
seq_new:N l__eagleone_sparsematrix_rows_seq
seq_new:N l__eagleone_sparsematrix_row_in_seq
seq_new:N l__eagleone_sparsematrix_row_out_seq
cs_new_protected:Nn eagleone_sparsematrix:n
{
seq_set_split:Nnn l__eagleone_sparsematrix_rows_seq { \ } { #1 }
seq_map_function:NN l__eagleone_sparsematrix_rows_seq __eagleone_sparsematrix_row:n
}
cs_new_protected:Nn __eagleone_sparsematrix_row:n
{
seq_set_split:Nnn l__eagleone_sparsematrix_row_in_seq { & } { #1 }
seq_map_inline:Nn l__eagleone_sparsematrix_row_in_seq
{
int_compare:nTF { ##1 = 0 }
{
seq_put_right:Nn l__eagleone_sparsematrix_row_out_seq { sparsezero }
}
{
seq_put_right:Nn l__eagleone_sparsematrix_row_out_seq { sparseone }
}
}
seq_use:Nn l__eagleone_sparsematrix_row_out_seq { & } \
}
ExplSyntaxOff
begin{document}
[
begin{pmatrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{pmatrix}
=
begin{sparsematrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{sparsematrix}
]
[
begin{sparsematrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{sparsematrix}^2
=
begin{sparsematrix}
1 & 0 & 1 \
0 & 2 & 0 \
1 & 0 & 1
end{sparsematrix}
]
end{document}
1
For my humble opinion: excellent. +1.
– Sebastiano
7 hours ago
add a comment |
With a fairly natural syntax:
documentclass{article}
usepackage{amsmath}
newlength{sparsesize}
setlength{sparsesize}{12pt}
newcommand{sparsezero}{%
begingroup
setlength{fboxsep}{-0.2pt}%
setlength{fboxrule}{0.2pt}%
fbox{hspace{sparsesize}rule{0pt}{sparsesize}}%
endgroup
}
newcommand{sparseone}{rule{sparsesize}{sparsesize}}
newcommand{activate}[2]{%
begingrouplccode`~=`#1lowercase{endgrouplet~}#2%
mathcode`#1="8000
}
newenvironment{sparsematrix}
{%
renewcommand{arraystretch}{0}%
setlength{arraycolsep}{0pt}%
activate{0}{sparsezero}activate{1}{sparseone}%
begin{matrix}%
}
{end{matrix}}
begin{document}
[
begin{pmatrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{pmatrix}
=
begin{sparsematrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{sparsematrix}
]
end{document}
For general matrices with integer coefficients it's a bit more difficult.
documentclass{article}
usepackage{amsmath,xparse}
newlength{sparsesize}
setlength{sparsesize}{12pt}
newcommand{sparsezero}{%
begingroup
setlength{fboxsep}{-0.2pt}%
setlength{fboxrule}{0.2pt}%
fbox{hspace{sparsesize}rule{0pt}{sparsesize}}%
endgroup
}
newcommand{sparseone}{rule{sparsesize}{sparsesize}}
ExplSyntaxOn
NewDocumentEnvironment{sparsematrix}{b}
{
renewcommand{arraystretch}{0}%
setlength{arraycolsep}{0pt}%
{% make a subformula
begin{matrix}
eagleone_sparsematrix:n { #1 }
end{matrix}
}
}{}
seq_new:N l__eagleone_sparsematrix_rows_seq
seq_new:N l__eagleone_sparsematrix_row_in_seq
seq_new:N l__eagleone_sparsematrix_row_out_seq
cs_new_protected:Nn eagleone_sparsematrix:n
{
seq_set_split:Nnn l__eagleone_sparsematrix_rows_seq { \ } { #1 }
seq_map_function:NN l__eagleone_sparsematrix_rows_seq __eagleone_sparsematrix_row:n
}
cs_new_protected:Nn __eagleone_sparsematrix_row:n
{
seq_set_split:Nnn l__eagleone_sparsematrix_row_in_seq { & } { #1 }
seq_map_inline:Nn l__eagleone_sparsematrix_row_in_seq
{
int_compare:nTF { ##1 = 0 }
{
seq_put_right:Nn l__eagleone_sparsematrix_row_out_seq { sparsezero }
}
{
seq_put_right:Nn l__eagleone_sparsematrix_row_out_seq { sparseone }
}
}
seq_use:Nn l__eagleone_sparsematrix_row_out_seq { & } \
}
ExplSyntaxOff
begin{document}
[
begin{pmatrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{pmatrix}
=
begin{sparsematrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{sparsematrix}
]
[
begin{sparsematrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{sparsematrix}^2
=
begin{sparsematrix}
1 & 0 & 1 \
0 & 2 & 0 \
1 & 0 & 1
end{sparsematrix}
]
end{document}
1
For my humble opinion: excellent. +1.
– Sebastiano
7 hours ago
add a comment |
With a fairly natural syntax:
documentclass{article}
usepackage{amsmath}
newlength{sparsesize}
setlength{sparsesize}{12pt}
newcommand{sparsezero}{%
begingroup
setlength{fboxsep}{-0.2pt}%
setlength{fboxrule}{0.2pt}%
fbox{hspace{sparsesize}rule{0pt}{sparsesize}}%
endgroup
}
newcommand{sparseone}{rule{sparsesize}{sparsesize}}
newcommand{activate}[2]{%
begingrouplccode`~=`#1lowercase{endgrouplet~}#2%
mathcode`#1="8000
}
newenvironment{sparsematrix}
{%
renewcommand{arraystretch}{0}%
setlength{arraycolsep}{0pt}%
activate{0}{sparsezero}activate{1}{sparseone}%
begin{matrix}%
}
{end{matrix}}
begin{document}
[
begin{pmatrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{pmatrix}
=
begin{sparsematrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{sparsematrix}
]
end{document}
For general matrices with integer coefficients it's a bit more difficult.
documentclass{article}
usepackage{amsmath,xparse}
newlength{sparsesize}
setlength{sparsesize}{12pt}
newcommand{sparsezero}{%
begingroup
setlength{fboxsep}{-0.2pt}%
setlength{fboxrule}{0.2pt}%
fbox{hspace{sparsesize}rule{0pt}{sparsesize}}%
endgroup
}
newcommand{sparseone}{rule{sparsesize}{sparsesize}}
ExplSyntaxOn
NewDocumentEnvironment{sparsematrix}{b}
{
renewcommand{arraystretch}{0}%
setlength{arraycolsep}{0pt}%
{% make a subformula
begin{matrix}
eagleone_sparsematrix:n { #1 }
end{matrix}
}
}{}
seq_new:N l__eagleone_sparsematrix_rows_seq
seq_new:N l__eagleone_sparsematrix_row_in_seq
seq_new:N l__eagleone_sparsematrix_row_out_seq
cs_new_protected:Nn eagleone_sparsematrix:n
{
seq_set_split:Nnn l__eagleone_sparsematrix_rows_seq { \ } { #1 }
seq_map_function:NN l__eagleone_sparsematrix_rows_seq __eagleone_sparsematrix_row:n
}
cs_new_protected:Nn __eagleone_sparsematrix_row:n
{
seq_set_split:Nnn l__eagleone_sparsematrix_row_in_seq { & } { #1 }
seq_map_inline:Nn l__eagleone_sparsematrix_row_in_seq
{
int_compare:nTF { ##1 = 0 }
{
seq_put_right:Nn l__eagleone_sparsematrix_row_out_seq { sparsezero }
}
{
seq_put_right:Nn l__eagleone_sparsematrix_row_out_seq { sparseone }
}
}
seq_use:Nn l__eagleone_sparsematrix_row_out_seq { & } \
}
ExplSyntaxOff
begin{document}
[
begin{pmatrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{pmatrix}
=
begin{sparsematrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{sparsematrix}
]
[
begin{sparsematrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{sparsematrix}^2
=
begin{sparsematrix}
1 & 0 & 1 \
0 & 2 & 0 \
1 & 0 & 1
end{sparsematrix}
]
end{document}
With a fairly natural syntax:
documentclass{article}
usepackage{amsmath}
newlength{sparsesize}
setlength{sparsesize}{12pt}
newcommand{sparsezero}{%
begingroup
setlength{fboxsep}{-0.2pt}%
setlength{fboxrule}{0.2pt}%
fbox{hspace{sparsesize}rule{0pt}{sparsesize}}%
endgroup
}
newcommand{sparseone}{rule{sparsesize}{sparsesize}}
newcommand{activate}[2]{%
begingrouplccode`~=`#1lowercase{endgrouplet~}#2%
mathcode`#1="8000
}
newenvironment{sparsematrix}
{%
renewcommand{arraystretch}{0}%
setlength{arraycolsep}{0pt}%
activate{0}{sparsezero}activate{1}{sparseone}%
begin{matrix}%
}
{end{matrix}}
begin{document}
[
begin{pmatrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{pmatrix}
=
begin{sparsematrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{sparsematrix}
]
end{document}
For general matrices with integer coefficients it's a bit more difficult.
documentclass{article}
usepackage{amsmath,xparse}
newlength{sparsesize}
setlength{sparsesize}{12pt}
newcommand{sparsezero}{%
begingroup
setlength{fboxsep}{-0.2pt}%
setlength{fboxrule}{0.2pt}%
fbox{hspace{sparsesize}rule{0pt}{sparsesize}}%
endgroup
}
newcommand{sparseone}{rule{sparsesize}{sparsesize}}
ExplSyntaxOn
NewDocumentEnvironment{sparsematrix}{b}
{
renewcommand{arraystretch}{0}%
setlength{arraycolsep}{0pt}%
{% make a subformula
begin{matrix}
eagleone_sparsematrix:n { #1 }
end{matrix}
}
}{}
seq_new:N l__eagleone_sparsematrix_rows_seq
seq_new:N l__eagleone_sparsematrix_row_in_seq
seq_new:N l__eagleone_sparsematrix_row_out_seq
cs_new_protected:Nn eagleone_sparsematrix:n
{
seq_set_split:Nnn l__eagleone_sparsematrix_rows_seq { \ } { #1 }
seq_map_function:NN l__eagleone_sparsematrix_rows_seq __eagleone_sparsematrix_row:n
}
cs_new_protected:Nn __eagleone_sparsematrix_row:n
{
seq_set_split:Nnn l__eagleone_sparsematrix_row_in_seq { & } { #1 }
seq_map_inline:Nn l__eagleone_sparsematrix_row_in_seq
{
int_compare:nTF { ##1 = 0 }
{
seq_put_right:Nn l__eagleone_sparsematrix_row_out_seq { sparsezero }
}
{
seq_put_right:Nn l__eagleone_sparsematrix_row_out_seq { sparseone }
}
}
seq_use:Nn l__eagleone_sparsematrix_row_out_seq { & } \
}
ExplSyntaxOff
begin{document}
[
begin{pmatrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{pmatrix}
=
begin{sparsematrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{sparsematrix}
]
[
begin{sparsematrix}
0 & 1 & 0 \
1 & 0 & 1 \
0 & 1 & 0
end{sparsematrix}^2
=
begin{sparsematrix}
1 & 0 & 1 \
0 & 2 & 0 \
1 & 0 & 1
end{sparsematrix}
]
end{document}
answered 7 hours ago
egregegreg
745k8919513290
745k8919513290
1
For my humble opinion: excellent. +1.
– Sebastiano
7 hours ago
add a comment |
1
For my humble opinion: excellent. +1.
– Sebastiano
7 hours ago
1
1
For my humble opinion: excellent. +1.
– Sebastiano
7 hours ago
For my humble opinion: excellent. +1.
– Sebastiano
7 hours ago
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f493392%2fshow-sparse-matrices-like-chessboards%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
Welcome to the site. You are expected to provide a small, complete (non)working example of code demonstrating what you have tried. An image of what you are hoping to achieve would help a great deal.
– Steven B. Segletes
9 hours ago
Perhaps this question might apply directly? tex.stackexchange.com/questions/44868/… and tex.stackexchange.com/questions/42444/… and tex.stackexchange.com/questions/174234/…
– Steven B. Segletes
9 hours ago