Matrix with uneven element lengths
From the answer to this question
When editing the elements of the matrix to become uneven in length, the display of the matrix becomes disturbed. How can this be solved
documentclass{beamer}
beamertemplatenavigationsymbolsempty
usepackage{verbatim}
usepackage{tikz}
usepackage{pgfplots}
usetikzlibrary{arrows, arrows.meta, positioning, calc, intersections, decorations.pathreplacing, decorations.pathmorphing, decorations.markings, shapes, shapes.misc, shapes.symbols, shapes.geometric, patterns, backgrounds, trees, shadows, fit,matrix}
begin{document}
begin{frame}[t,fragile]
frametitle{matrix}
begin{tikzpicture}
matrix (x) [matrix of nodes, row sep=10pt, column sep=10pt] {%
15.1 & 23.7 & 19.7 & 15.4 & 18.3 & 23.0\
17.4 & 18.6 & 12.9 & 20.3 & 13.7 & 21.4\
10.3 & 26.1 & 15.718.918.9 & 14.0 & 17.8 & 33.8\
23.2 & 12.9 & 29.8 & 18.3 & 14.2 & 20.8\
13.5 & 17.1 & 20.7 & 27.1 & 18.918.9 & 16.6\};
draw<2->[ultra thick, blue, latex'-] (x-2-1) node [fill, red!40!white, circle, inner sep=8pt, opacity=.4]{} -- (x-4-5) node [fill, blue!40!white, circle, inner sep=8pt, opacity=.4]{};
% Node names: (<name of matrix>-<row>-<column>)
foreach i in {1,...,6}
draw ($(x-1-i.north west)+(-5pt,5pt)$) -- ($(x-5-i.south west)+(-5pt,-5pt)$);%vertical lines
foreach i in {1,...,5}
draw ($(x-i-1.south west)+(-5pt,-5pt)$) -- ($(x-i-6.south east)+(5pt,-5pt)$);%horizontal lines
draw ($(x-1-1.north west)+(-5pt,5pt)$) -| ($(x-5-6.south east)+(5pt,-5pt)$);%upper and right borders
end{tikzpicture}
end{frame}
end{document}
tikz-pgf beamer tikz-matrix
add a comment |
From the answer to this question
When editing the elements of the matrix to become uneven in length, the display of the matrix becomes disturbed. How can this be solved
documentclass{beamer}
beamertemplatenavigationsymbolsempty
usepackage{verbatim}
usepackage{tikz}
usepackage{pgfplots}
usetikzlibrary{arrows, arrows.meta, positioning, calc, intersections, decorations.pathreplacing, decorations.pathmorphing, decorations.markings, shapes, shapes.misc, shapes.symbols, shapes.geometric, patterns, backgrounds, trees, shadows, fit,matrix}
begin{document}
begin{frame}[t,fragile]
frametitle{matrix}
begin{tikzpicture}
matrix (x) [matrix of nodes, row sep=10pt, column sep=10pt] {%
15.1 & 23.7 & 19.7 & 15.4 & 18.3 & 23.0\
17.4 & 18.6 & 12.9 & 20.3 & 13.7 & 21.4\
10.3 & 26.1 & 15.718.918.9 & 14.0 & 17.8 & 33.8\
23.2 & 12.9 & 29.8 & 18.3 & 14.2 & 20.8\
13.5 & 17.1 & 20.7 & 27.1 & 18.918.9 & 16.6\};
draw<2->[ultra thick, blue, latex'-] (x-2-1) node [fill, red!40!white, circle, inner sep=8pt, opacity=.4]{} -- (x-4-5) node [fill, blue!40!white, circle, inner sep=8pt, opacity=.4]{};
% Node names: (<name of matrix>-<row>-<column>)
foreach i in {1,...,6}
draw ($(x-1-i.north west)+(-5pt,5pt)$) -- ($(x-5-i.south west)+(-5pt,-5pt)$);%vertical lines
foreach i in {1,...,5}
draw ($(x-i-1.south west)+(-5pt,-5pt)$) -- ($(x-i-6.south east)+(5pt,-5pt)$);%horizontal lines
draw ($(x-1-1.north west)+(-5pt,5pt)$) -| ($(x-5-6.south east)+(5pt,-5pt)$);%upper and right borders
end{tikzpicture}
end{frame}
end{document}
tikz-pgf beamer tikz-matrix
marmot's code [tex.stackexchange.com/a/484608/31034] runs well for me.
– ferahfeza
yesterday
@ferahfezaWhenthe matrix elements are lengthy, they are displayed beyond borders
– Hany
yesterday
@ferahfezaPlease refer to this image when applying marmot`s code i.stack.imgur.com/aC1bQ.jpg
– Hany
yesterday
@Hany The border is not a feature of the matrix. It is added manually. In this case, you have to find another way to draw the borders.
– JouleV
yesterday
One can certainly add lines by fitting the nodes on both sides and drawing lines in the middle between these fits, see tex.stackexchange.com/a/443198/121799.
– marmot
yesterday
add a comment |
From the answer to this question
When editing the elements of the matrix to become uneven in length, the display of the matrix becomes disturbed. How can this be solved
documentclass{beamer}
beamertemplatenavigationsymbolsempty
usepackage{verbatim}
usepackage{tikz}
usepackage{pgfplots}
usetikzlibrary{arrows, arrows.meta, positioning, calc, intersections, decorations.pathreplacing, decorations.pathmorphing, decorations.markings, shapes, shapes.misc, shapes.symbols, shapes.geometric, patterns, backgrounds, trees, shadows, fit,matrix}
begin{document}
begin{frame}[t,fragile]
frametitle{matrix}
begin{tikzpicture}
matrix (x) [matrix of nodes, row sep=10pt, column sep=10pt] {%
15.1 & 23.7 & 19.7 & 15.4 & 18.3 & 23.0\
17.4 & 18.6 & 12.9 & 20.3 & 13.7 & 21.4\
10.3 & 26.1 & 15.718.918.9 & 14.0 & 17.8 & 33.8\
23.2 & 12.9 & 29.8 & 18.3 & 14.2 & 20.8\
13.5 & 17.1 & 20.7 & 27.1 & 18.918.9 & 16.6\};
draw<2->[ultra thick, blue, latex'-] (x-2-1) node [fill, red!40!white, circle, inner sep=8pt, opacity=.4]{} -- (x-4-5) node [fill, blue!40!white, circle, inner sep=8pt, opacity=.4]{};
% Node names: (<name of matrix>-<row>-<column>)
foreach i in {1,...,6}
draw ($(x-1-i.north west)+(-5pt,5pt)$) -- ($(x-5-i.south west)+(-5pt,-5pt)$);%vertical lines
foreach i in {1,...,5}
draw ($(x-i-1.south west)+(-5pt,-5pt)$) -- ($(x-i-6.south east)+(5pt,-5pt)$);%horizontal lines
draw ($(x-1-1.north west)+(-5pt,5pt)$) -| ($(x-5-6.south east)+(5pt,-5pt)$);%upper and right borders
end{tikzpicture}
end{frame}
end{document}
tikz-pgf beamer tikz-matrix
From the answer to this question
When editing the elements of the matrix to become uneven in length, the display of the matrix becomes disturbed. How can this be solved
documentclass{beamer}
beamertemplatenavigationsymbolsempty
usepackage{verbatim}
usepackage{tikz}
usepackage{pgfplots}
usetikzlibrary{arrows, arrows.meta, positioning, calc, intersections, decorations.pathreplacing, decorations.pathmorphing, decorations.markings, shapes, shapes.misc, shapes.symbols, shapes.geometric, patterns, backgrounds, trees, shadows, fit,matrix}
begin{document}
begin{frame}[t,fragile]
frametitle{matrix}
begin{tikzpicture}
matrix (x) [matrix of nodes, row sep=10pt, column sep=10pt] {%
15.1 & 23.7 & 19.7 & 15.4 & 18.3 & 23.0\
17.4 & 18.6 & 12.9 & 20.3 & 13.7 & 21.4\
10.3 & 26.1 & 15.718.918.9 & 14.0 & 17.8 & 33.8\
23.2 & 12.9 & 29.8 & 18.3 & 14.2 & 20.8\
13.5 & 17.1 & 20.7 & 27.1 & 18.918.9 & 16.6\};
draw<2->[ultra thick, blue, latex'-] (x-2-1) node [fill, red!40!white, circle, inner sep=8pt, opacity=.4]{} -- (x-4-5) node [fill, blue!40!white, circle, inner sep=8pt, opacity=.4]{};
% Node names: (<name of matrix>-<row>-<column>)
foreach i in {1,...,6}
draw ($(x-1-i.north west)+(-5pt,5pt)$) -- ($(x-5-i.south west)+(-5pt,-5pt)$);%vertical lines
foreach i in {1,...,5}
draw ($(x-i-1.south west)+(-5pt,-5pt)$) -- ($(x-i-6.south east)+(5pt,-5pt)$);%horizontal lines
draw ($(x-1-1.north west)+(-5pt,5pt)$) -| ($(x-5-6.south east)+(5pt,-5pt)$);%upper and right borders
end{tikzpicture}
end{frame}
end{document}
tikz-pgf beamer tikz-matrix
tikz-pgf beamer tikz-matrix
asked yesterday
HanyHany
1,359417
1,359417
marmot's code [tex.stackexchange.com/a/484608/31034] runs well for me.
– ferahfeza
yesterday
@ferahfezaWhenthe matrix elements are lengthy, they are displayed beyond borders
– Hany
yesterday
@ferahfezaPlease refer to this image when applying marmot`s code i.stack.imgur.com/aC1bQ.jpg
– Hany
yesterday
@Hany The border is not a feature of the matrix. It is added manually. In this case, you have to find another way to draw the borders.
– JouleV
yesterday
One can certainly add lines by fitting the nodes on both sides and drawing lines in the middle between these fits, see tex.stackexchange.com/a/443198/121799.
– marmot
yesterday
add a comment |
marmot's code [tex.stackexchange.com/a/484608/31034] runs well for me.
– ferahfeza
yesterday
@ferahfezaWhenthe matrix elements are lengthy, they are displayed beyond borders
– Hany
yesterday
@ferahfezaPlease refer to this image when applying marmot`s code i.stack.imgur.com/aC1bQ.jpg
– Hany
yesterday
@Hany The border is not a feature of the matrix. It is added manually. In this case, you have to find another way to draw the borders.
– JouleV
yesterday
One can certainly add lines by fitting the nodes on both sides and drawing lines in the middle between these fits, see tex.stackexchange.com/a/443198/121799.
– marmot
yesterday
marmot's code [tex.stackexchange.com/a/484608/31034] runs well for me.
– ferahfeza
yesterday
marmot's code [tex.stackexchange.com/a/484608/31034] runs well for me.
– ferahfeza
yesterday
@ferahfezaWhenthe matrix elements are lengthy, they are displayed beyond borders
– Hany
yesterday
@ferahfezaWhenthe matrix elements are lengthy, they are displayed beyond borders
– Hany
yesterday
@ferahfezaPlease refer to this image when applying marmot`s code i.stack.imgur.com/aC1bQ.jpg
– Hany
yesterday
@ferahfezaPlease refer to this image when applying marmot`s code i.stack.imgur.com/aC1bQ.jpg
– Hany
yesterday
@Hany The border is not a feature of the matrix. It is added manually. In this case, you have to find another way to draw the borders.
– JouleV
yesterday
@Hany The border is not a feature of the matrix. It is added manually. In this case, you have to find another way to draw the borders.
– JouleV
yesterday
One can certainly add lines by fitting the nodes on both sides and drawing lines in the middle between these fits, see tex.stackexchange.com/a/443198/121799.
– marmot
yesterday
One can certainly add lines by fitting the nodes on both sides and drawing lines in the middle between these fits, see tex.stackexchange.com/a/443198/121799.
– marmot
yesterday
add a comment |
1 Answer
1
active
oldest
votes
One can use the fit
library to always draw the lines between the tallest/widest matrix entries. I added a style full matrix grid
which can be used as
draw[matrix name=x,matrix cols=6,matrix rows=5,full matrix grid];
If you want to draw only a subset of vertical or horizontal lines, you can use the redefined vlines
or hlines
styles, which now also use fit
.
documentclass{beamer}
beamertemplatenavigationsymbolsempty
usepackage{verbatim}
usepackage{tikz}
usetikzlibrary{arrows,calc,fit,matrix}
tikzset{matrix rows/.initial=5,matrix cols/.initial=6,matrix name/.initial=x,
vline/.style={/utils/exec=foreach XX in {1,...,pgfkeysvalueof{/tikz/matrix rows}}
{ifnumXX=1
xdefMatLstA{(pgfkeysvalueof{/tikz/matrix name}-XX-#1)}
xdefMatLstB{(pgfkeysvalueof{/tikz/matrix name}-XX-thenumexpr1+#1relax)}
else
xdefMatLstA{MatLstA (pgfkeysvalueof{/tikz/matrix name}-XX-#1)}
xdefMatLstB{MatLstB (pgfkeysvalueof{/tikz/matrix name}-XX-thenumexpr1+#1relax)}
fi},
insert path={node[fit=MatLstA,inner sep=0pt] (fitA) {}
node[fit=MatLstB,inner sep=0pt] (fitB) {}
($(fitA.east)!0.5!(fitB.west)$) coordinate (aux)
(pgfkeysvalueof{/tikz/matrix name}.north-|aux) -- (pgfkeysvalueof{/tikz/matrix name}.south-|aux)}},
hline/.style={/utils/exec=foreach XX in {1,...,pgfkeysvalueof{/tikz/matrix cols}}
{ifnumXX=1
xdefMatLstA{(pgfkeysvalueof{/tikz/matrix name}-#1-XX)}
xdefMatLstB{(pgfkeysvalueof{/tikz/matrix name}-thenumexpr1+#1relax-XX)}
else
xdefMatLstA{MatLstA (pgfkeysvalueof{/tikz/matrix name}-#1-XX)}
xdefMatLstB{MatLstB (pgfkeysvalueof{/tikz/matrix name}-thenumexpr1+#1relax-XX)}
fi},insert path={node[fit=MatLstA,inner sep=0pt] (fitA) {}
node[fit=MatLstB,inner sep=0pt] (fitB) {}
($(fitA.south)!0.5!(fitB.north)$) coordinate (aux)
(pgfkeysvalueof{/tikz/matrix name}.west|-aux) -- (pgfkeysvalueof{/tikz/matrix
name}.east|-aux)}},
full matrix grid/.style={vline/.list={1,...,thenumexprpgfkeysvalueof{/tikz/matrix
cols}-1},hline/.list={1,...,thenumexprpgfkeysvalueof{/tikz/matrix rows}-1},
insert path={(pgfkeysvalueof{/tikz/matrix name}.south west) rectangle
(pgfkeysvalueof{/tikz/matrix name}.north east)}}}
begin{document}
begin{frame}[t,fragile]
frametitle{matrix}
begin{tikzpicture}
matrix (x) [matrix of nodes, row sep=10pt, column sep=10pt] {%
15.1 & 23.7 & 19.7 & 15.4 & 18.3 & 23.0\
17.4 & 18.6 & 12.9 & 20.3 & 13.7 & 21.4\
10.3 & 26.1 & 15.718.918.9 & 14.0 & 17.8 & 33.8\
23.2 & 12.9 & 29.8 & 18.3 & 14.2 & 20.8\
13.5 & 17.1 & 20.7 & 27.1 & 18.918.9 & 16.6\};
draw<2->[ultra thick, blue, latex'-] (x-2-1) node [fill, red!40!white, circle, inner sep=8pt, opacity=.4]{} -- (x-4-5) node [fill, blue!40!white, circle, inner sep=8pt, opacity=.4]{};
% Node names: (<name of matrix>-<row>-<column>)
% draw[vline/.list={1,...,5},hline/.list={1,...,4}] (pgfkeysvalueof{/tikz/matrix name}.north west) rectangle
% (pgfkeysvalueof{/tikz/matrix name}.south east); %
draw[matrix name=x,matrix cols=6,matrix rows=5,full matrix grid]; %
end{tikzpicture}
end{frame}
end{document}
P.S. The outer lines can be drawn with draw
, too.
1
@marmotThank you very much for your time and effort. I appreciate your answer very much
– Hany
yesterday
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%2f484763%2fmatrix-with-uneven-element-lengths%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
One can use the fit
library to always draw the lines between the tallest/widest matrix entries. I added a style full matrix grid
which can be used as
draw[matrix name=x,matrix cols=6,matrix rows=5,full matrix grid];
If you want to draw only a subset of vertical or horizontal lines, you can use the redefined vlines
or hlines
styles, which now also use fit
.
documentclass{beamer}
beamertemplatenavigationsymbolsempty
usepackage{verbatim}
usepackage{tikz}
usetikzlibrary{arrows,calc,fit,matrix}
tikzset{matrix rows/.initial=5,matrix cols/.initial=6,matrix name/.initial=x,
vline/.style={/utils/exec=foreach XX in {1,...,pgfkeysvalueof{/tikz/matrix rows}}
{ifnumXX=1
xdefMatLstA{(pgfkeysvalueof{/tikz/matrix name}-XX-#1)}
xdefMatLstB{(pgfkeysvalueof{/tikz/matrix name}-XX-thenumexpr1+#1relax)}
else
xdefMatLstA{MatLstA (pgfkeysvalueof{/tikz/matrix name}-XX-#1)}
xdefMatLstB{MatLstB (pgfkeysvalueof{/tikz/matrix name}-XX-thenumexpr1+#1relax)}
fi},
insert path={node[fit=MatLstA,inner sep=0pt] (fitA) {}
node[fit=MatLstB,inner sep=0pt] (fitB) {}
($(fitA.east)!0.5!(fitB.west)$) coordinate (aux)
(pgfkeysvalueof{/tikz/matrix name}.north-|aux) -- (pgfkeysvalueof{/tikz/matrix name}.south-|aux)}},
hline/.style={/utils/exec=foreach XX in {1,...,pgfkeysvalueof{/tikz/matrix cols}}
{ifnumXX=1
xdefMatLstA{(pgfkeysvalueof{/tikz/matrix name}-#1-XX)}
xdefMatLstB{(pgfkeysvalueof{/tikz/matrix name}-thenumexpr1+#1relax-XX)}
else
xdefMatLstA{MatLstA (pgfkeysvalueof{/tikz/matrix name}-#1-XX)}
xdefMatLstB{MatLstB (pgfkeysvalueof{/tikz/matrix name}-thenumexpr1+#1relax-XX)}
fi},insert path={node[fit=MatLstA,inner sep=0pt] (fitA) {}
node[fit=MatLstB,inner sep=0pt] (fitB) {}
($(fitA.south)!0.5!(fitB.north)$) coordinate (aux)
(pgfkeysvalueof{/tikz/matrix name}.west|-aux) -- (pgfkeysvalueof{/tikz/matrix
name}.east|-aux)}},
full matrix grid/.style={vline/.list={1,...,thenumexprpgfkeysvalueof{/tikz/matrix
cols}-1},hline/.list={1,...,thenumexprpgfkeysvalueof{/tikz/matrix rows}-1},
insert path={(pgfkeysvalueof{/tikz/matrix name}.south west) rectangle
(pgfkeysvalueof{/tikz/matrix name}.north east)}}}
begin{document}
begin{frame}[t,fragile]
frametitle{matrix}
begin{tikzpicture}
matrix (x) [matrix of nodes, row sep=10pt, column sep=10pt] {%
15.1 & 23.7 & 19.7 & 15.4 & 18.3 & 23.0\
17.4 & 18.6 & 12.9 & 20.3 & 13.7 & 21.4\
10.3 & 26.1 & 15.718.918.9 & 14.0 & 17.8 & 33.8\
23.2 & 12.9 & 29.8 & 18.3 & 14.2 & 20.8\
13.5 & 17.1 & 20.7 & 27.1 & 18.918.9 & 16.6\};
draw<2->[ultra thick, blue, latex'-] (x-2-1) node [fill, red!40!white, circle, inner sep=8pt, opacity=.4]{} -- (x-4-5) node [fill, blue!40!white, circle, inner sep=8pt, opacity=.4]{};
% Node names: (<name of matrix>-<row>-<column>)
% draw[vline/.list={1,...,5},hline/.list={1,...,4}] (pgfkeysvalueof{/tikz/matrix name}.north west) rectangle
% (pgfkeysvalueof{/tikz/matrix name}.south east); %
draw[matrix name=x,matrix cols=6,matrix rows=5,full matrix grid]; %
end{tikzpicture}
end{frame}
end{document}
P.S. The outer lines can be drawn with draw
, too.
1
@marmotThank you very much for your time and effort. I appreciate your answer very much
– Hany
yesterday
add a comment |
One can use the fit
library to always draw the lines between the tallest/widest matrix entries. I added a style full matrix grid
which can be used as
draw[matrix name=x,matrix cols=6,matrix rows=5,full matrix grid];
If you want to draw only a subset of vertical or horizontal lines, you can use the redefined vlines
or hlines
styles, which now also use fit
.
documentclass{beamer}
beamertemplatenavigationsymbolsempty
usepackage{verbatim}
usepackage{tikz}
usetikzlibrary{arrows,calc,fit,matrix}
tikzset{matrix rows/.initial=5,matrix cols/.initial=6,matrix name/.initial=x,
vline/.style={/utils/exec=foreach XX in {1,...,pgfkeysvalueof{/tikz/matrix rows}}
{ifnumXX=1
xdefMatLstA{(pgfkeysvalueof{/tikz/matrix name}-XX-#1)}
xdefMatLstB{(pgfkeysvalueof{/tikz/matrix name}-XX-thenumexpr1+#1relax)}
else
xdefMatLstA{MatLstA (pgfkeysvalueof{/tikz/matrix name}-XX-#1)}
xdefMatLstB{MatLstB (pgfkeysvalueof{/tikz/matrix name}-XX-thenumexpr1+#1relax)}
fi},
insert path={node[fit=MatLstA,inner sep=0pt] (fitA) {}
node[fit=MatLstB,inner sep=0pt] (fitB) {}
($(fitA.east)!0.5!(fitB.west)$) coordinate (aux)
(pgfkeysvalueof{/tikz/matrix name}.north-|aux) -- (pgfkeysvalueof{/tikz/matrix name}.south-|aux)}},
hline/.style={/utils/exec=foreach XX in {1,...,pgfkeysvalueof{/tikz/matrix cols}}
{ifnumXX=1
xdefMatLstA{(pgfkeysvalueof{/tikz/matrix name}-#1-XX)}
xdefMatLstB{(pgfkeysvalueof{/tikz/matrix name}-thenumexpr1+#1relax-XX)}
else
xdefMatLstA{MatLstA (pgfkeysvalueof{/tikz/matrix name}-#1-XX)}
xdefMatLstB{MatLstB (pgfkeysvalueof{/tikz/matrix name}-thenumexpr1+#1relax-XX)}
fi},insert path={node[fit=MatLstA,inner sep=0pt] (fitA) {}
node[fit=MatLstB,inner sep=0pt] (fitB) {}
($(fitA.south)!0.5!(fitB.north)$) coordinate (aux)
(pgfkeysvalueof{/tikz/matrix name}.west|-aux) -- (pgfkeysvalueof{/tikz/matrix
name}.east|-aux)}},
full matrix grid/.style={vline/.list={1,...,thenumexprpgfkeysvalueof{/tikz/matrix
cols}-1},hline/.list={1,...,thenumexprpgfkeysvalueof{/tikz/matrix rows}-1},
insert path={(pgfkeysvalueof{/tikz/matrix name}.south west) rectangle
(pgfkeysvalueof{/tikz/matrix name}.north east)}}}
begin{document}
begin{frame}[t,fragile]
frametitle{matrix}
begin{tikzpicture}
matrix (x) [matrix of nodes, row sep=10pt, column sep=10pt] {%
15.1 & 23.7 & 19.7 & 15.4 & 18.3 & 23.0\
17.4 & 18.6 & 12.9 & 20.3 & 13.7 & 21.4\
10.3 & 26.1 & 15.718.918.9 & 14.0 & 17.8 & 33.8\
23.2 & 12.9 & 29.8 & 18.3 & 14.2 & 20.8\
13.5 & 17.1 & 20.7 & 27.1 & 18.918.9 & 16.6\};
draw<2->[ultra thick, blue, latex'-] (x-2-1) node [fill, red!40!white, circle, inner sep=8pt, opacity=.4]{} -- (x-4-5) node [fill, blue!40!white, circle, inner sep=8pt, opacity=.4]{};
% Node names: (<name of matrix>-<row>-<column>)
% draw[vline/.list={1,...,5},hline/.list={1,...,4}] (pgfkeysvalueof{/tikz/matrix name}.north west) rectangle
% (pgfkeysvalueof{/tikz/matrix name}.south east); %
draw[matrix name=x,matrix cols=6,matrix rows=5,full matrix grid]; %
end{tikzpicture}
end{frame}
end{document}
P.S. The outer lines can be drawn with draw
, too.
1
@marmotThank you very much for your time and effort. I appreciate your answer very much
– Hany
yesterday
add a comment |
One can use the fit
library to always draw the lines between the tallest/widest matrix entries. I added a style full matrix grid
which can be used as
draw[matrix name=x,matrix cols=6,matrix rows=5,full matrix grid];
If you want to draw only a subset of vertical or horizontal lines, you can use the redefined vlines
or hlines
styles, which now also use fit
.
documentclass{beamer}
beamertemplatenavigationsymbolsempty
usepackage{verbatim}
usepackage{tikz}
usetikzlibrary{arrows,calc,fit,matrix}
tikzset{matrix rows/.initial=5,matrix cols/.initial=6,matrix name/.initial=x,
vline/.style={/utils/exec=foreach XX in {1,...,pgfkeysvalueof{/tikz/matrix rows}}
{ifnumXX=1
xdefMatLstA{(pgfkeysvalueof{/tikz/matrix name}-XX-#1)}
xdefMatLstB{(pgfkeysvalueof{/tikz/matrix name}-XX-thenumexpr1+#1relax)}
else
xdefMatLstA{MatLstA (pgfkeysvalueof{/tikz/matrix name}-XX-#1)}
xdefMatLstB{MatLstB (pgfkeysvalueof{/tikz/matrix name}-XX-thenumexpr1+#1relax)}
fi},
insert path={node[fit=MatLstA,inner sep=0pt] (fitA) {}
node[fit=MatLstB,inner sep=0pt] (fitB) {}
($(fitA.east)!0.5!(fitB.west)$) coordinate (aux)
(pgfkeysvalueof{/tikz/matrix name}.north-|aux) -- (pgfkeysvalueof{/tikz/matrix name}.south-|aux)}},
hline/.style={/utils/exec=foreach XX in {1,...,pgfkeysvalueof{/tikz/matrix cols}}
{ifnumXX=1
xdefMatLstA{(pgfkeysvalueof{/tikz/matrix name}-#1-XX)}
xdefMatLstB{(pgfkeysvalueof{/tikz/matrix name}-thenumexpr1+#1relax-XX)}
else
xdefMatLstA{MatLstA (pgfkeysvalueof{/tikz/matrix name}-#1-XX)}
xdefMatLstB{MatLstB (pgfkeysvalueof{/tikz/matrix name}-thenumexpr1+#1relax-XX)}
fi},insert path={node[fit=MatLstA,inner sep=0pt] (fitA) {}
node[fit=MatLstB,inner sep=0pt] (fitB) {}
($(fitA.south)!0.5!(fitB.north)$) coordinate (aux)
(pgfkeysvalueof{/tikz/matrix name}.west|-aux) -- (pgfkeysvalueof{/tikz/matrix
name}.east|-aux)}},
full matrix grid/.style={vline/.list={1,...,thenumexprpgfkeysvalueof{/tikz/matrix
cols}-1},hline/.list={1,...,thenumexprpgfkeysvalueof{/tikz/matrix rows}-1},
insert path={(pgfkeysvalueof{/tikz/matrix name}.south west) rectangle
(pgfkeysvalueof{/tikz/matrix name}.north east)}}}
begin{document}
begin{frame}[t,fragile]
frametitle{matrix}
begin{tikzpicture}
matrix (x) [matrix of nodes, row sep=10pt, column sep=10pt] {%
15.1 & 23.7 & 19.7 & 15.4 & 18.3 & 23.0\
17.4 & 18.6 & 12.9 & 20.3 & 13.7 & 21.4\
10.3 & 26.1 & 15.718.918.9 & 14.0 & 17.8 & 33.8\
23.2 & 12.9 & 29.8 & 18.3 & 14.2 & 20.8\
13.5 & 17.1 & 20.7 & 27.1 & 18.918.9 & 16.6\};
draw<2->[ultra thick, blue, latex'-] (x-2-1) node [fill, red!40!white, circle, inner sep=8pt, opacity=.4]{} -- (x-4-5) node [fill, blue!40!white, circle, inner sep=8pt, opacity=.4]{};
% Node names: (<name of matrix>-<row>-<column>)
% draw[vline/.list={1,...,5},hline/.list={1,...,4}] (pgfkeysvalueof{/tikz/matrix name}.north west) rectangle
% (pgfkeysvalueof{/tikz/matrix name}.south east); %
draw[matrix name=x,matrix cols=6,matrix rows=5,full matrix grid]; %
end{tikzpicture}
end{frame}
end{document}
P.S. The outer lines can be drawn with draw
, too.
One can use the fit
library to always draw the lines between the tallest/widest matrix entries. I added a style full matrix grid
which can be used as
draw[matrix name=x,matrix cols=6,matrix rows=5,full matrix grid];
If you want to draw only a subset of vertical or horizontal lines, you can use the redefined vlines
or hlines
styles, which now also use fit
.
documentclass{beamer}
beamertemplatenavigationsymbolsempty
usepackage{verbatim}
usepackage{tikz}
usetikzlibrary{arrows,calc,fit,matrix}
tikzset{matrix rows/.initial=5,matrix cols/.initial=6,matrix name/.initial=x,
vline/.style={/utils/exec=foreach XX in {1,...,pgfkeysvalueof{/tikz/matrix rows}}
{ifnumXX=1
xdefMatLstA{(pgfkeysvalueof{/tikz/matrix name}-XX-#1)}
xdefMatLstB{(pgfkeysvalueof{/tikz/matrix name}-XX-thenumexpr1+#1relax)}
else
xdefMatLstA{MatLstA (pgfkeysvalueof{/tikz/matrix name}-XX-#1)}
xdefMatLstB{MatLstB (pgfkeysvalueof{/tikz/matrix name}-XX-thenumexpr1+#1relax)}
fi},
insert path={node[fit=MatLstA,inner sep=0pt] (fitA) {}
node[fit=MatLstB,inner sep=0pt] (fitB) {}
($(fitA.east)!0.5!(fitB.west)$) coordinate (aux)
(pgfkeysvalueof{/tikz/matrix name}.north-|aux) -- (pgfkeysvalueof{/tikz/matrix name}.south-|aux)}},
hline/.style={/utils/exec=foreach XX in {1,...,pgfkeysvalueof{/tikz/matrix cols}}
{ifnumXX=1
xdefMatLstA{(pgfkeysvalueof{/tikz/matrix name}-#1-XX)}
xdefMatLstB{(pgfkeysvalueof{/tikz/matrix name}-thenumexpr1+#1relax-XX)}
else
xdefMatLstA{MatLstA (pgfkeysvalueof{/tikz/matrix name}-#1-XX)}
xdefMatLstB{MatLstB (pgfkeysvalueof{/tikz/matrix name}-thenumexpr1+#1relax-XX)}
fi},insert path={node[fit=MatLstA,inner sep=0pt] (fitA) {}
node[fit=MatLstB,inner sep=0pt] (fitB) {}
($(fitA.south)!0.5!(fitB.north)$) coordinate (aux)
(pgfkeysvalueof{/tikz/matrix name}.west|-aux) -- (pgfkeysvalueof{/tikz/matrix
name}.east|-aux)}},
full matrix grid/.style={vline/.list={1,...,thenumexprpgfkeysvalueof{/tikz/matrix
cols}-1},hline/.list={1,...,thenumexprpgfkeysvalueof{/tikz/matrix rows}-1},
insert path={(pgfkeysvalueof{/tikz/matrix name}.south west) rectangle
(pgfkeysvalueof{/tikz/matrix name}.north east)}}}
begin{document}
begin{frame}[t,fragile]
frametitle{matrix}
begin{tikzpicture}
matrix (x) [matrix of nodes, row sep=10pt, column sep=10pt] {%
15.1 & 23.7 & 19.7 & 15.4 & 18.3 & 23.0\
17.4 & 18.6 & 12.9 & 20.3 & 13.7 & 21.4\
10.3 & 26.1 & 15.718.918.9 & 14.0 & 17.8 & 33.8\
23.2 & 12.9 & 29.8 & 18.3 & 14.2 & 20.8\
13.5 & 17.1 & 20.7 & 27.1 & 18.918.9 & 16.6\};
draw<2->[ultra thick, blue, latex'-] (x-2-1) node [fill, red!40!white, circle, inner sep=8pt, opacity=.4]{} -- (x-4-5) node [fill, blue!40!white, circle, inner sep=8pt, opacity=.4]{};
% Node names: (<name of matrix>-<row>-<column>)
% draw[vline/.list={1,...,5},hline/.list={1,...,4}] (pgfkeysvalueof{/tikz/matrix name}.north west) rectangle
% (pgfkeysvalueof{/tikz/matrix name}.south east); %
draw[matrix name=x,matrix cols=6,matrix rows=5,full matrix grid]; %
end{tikzpicture}
end{frame}
end{document}
P.S. The outer lines can be drawn with draw
, too.
answered yesterday
marmotmarmot
118k6151286
118k6151286
1
@marmotThank you very much for your time and effort. I appreciate your answer very much
– Hany
yesterday
add a comment |
1
@marmotThank you very much for your time and effort. I appreciate your answer very much
– Hany
yesterday
1
1
@marmotThank you very much for your time and effort. I appreciate your answer very much
– Hany
yesterday
@marmotThank you very much for your time and effort. I appreciate your answer very much
– Hany
yesterday
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%2f484763%2fmatrix-with-uneven-element-lengths%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
marmot's code [tex.stackexchange.com/a/484608/31034] runs well for me.
– ferahfeza
yesterday
@ferahfezaWhenthe matrix elements are lengthy, they are displayed beyond borders
– Hany
yesterday
@ferahfezaPlease refer to this image when applying marmot`s code i.stack.imgur.com/aC1bQ.jpg
– Hany
yesterday
@Hany The border is not a feature of the matrix. It is added manually. In this case, you have to find another way to draw the borders.
– JouleV
yesterday
One can certainly add lines by fitting the nodes on both sides and drawing lines in the middle between these fits, see tex.stackexchange.com/a/443198/121799.
– marmot
yesterday