Saltar al contenido

Dibujando los mapas de Karnaugh en LaTeX

Esta crónica ha sido evaluado por especialistas así se garantiza la veracidad de nuestra esta noticia.

Solución:

Agregué un color de relleno al código propuesto para eliminar las líneas verticales de la tabla. Funciona bien para todos los grupos, aunque debo admitir que implicantcantons (grupo de 4 esquinas en un mapa de 16 posiciones) necesita algunas mejoras.

EDITAR: También agregué un mapa y comando de Karnaugh 2×2 implicantsol para marcar elementos aislados.

EDITAR 2: Resolvió el problema con implicantcantons. Ahora los cuatro grupos de esquinas están correctamente llenados. El primer ejemplo no tiene sentido, solo muestra varias opciones de agrupación.

ingrese la descripción de la imagen aquí

documentclassstandalone
usepackagetikz
usetikzlibrarymatrix,calc

%isolated term
%#1 - Optional. Space between node and grouping line. Default=0
%#2 - node
%#3 - filling color
newcommandimplicantsol[3][0]
    draw[rounded corners=3pt, fill=#3, opacity=0.3] ($(#2.north west)+(135:#1)$) rectangle ($(#2.south east)+(-45:#1)$);
    


%internal group
%#1 - Optional. Space between node and grouping line. Default=0
%#2 - top left node
%#3 - bottom right node
%#4 - filling color
newcommandimplicant[4][0]
    draw[rounded corners=3pt, fill=#4, opacity=0.3] ($(#2.north west)+(135:#1)$) rectangle ($(#3.south east)+(-45:#1)$);
    

%group lateral borders
%#1 - Optional. Space between node and grouping line. Default=0
%#2 - top left node
%#3 - bottom right node
%#4 - filling color
newcommandimplicantcostats[4][0] ($(#3.west)+(180:#1)$) 

%group top-bottom borders
%#1 - Optional. Space between node and grouping line. Default=0
%#2 - top left node
%#3 - bottom right node
%#4 - filling color
newcommandimplicantdaltbaix[4][0]- ($(#2.south)+(-90:#1)$) -

%group corners
%#1 - Optional. Space between node and grouping line. Default=0
%#2 - filling color
newcommandimplicantcantons[2][0]- cf.south)+(0:#1)$) ;
    fill[rounded corners=3pt, fill=#2, opacity=.3] ($(rf.east 

%Empty Karnaugh map 4x4
newenvironmentKarnaugh%

begintikzpicture[baseline=(current bounding box.north),scale=0.8]
draw (0,0) grid (4,4);
draw (0,4) -- node [pos=0.7,above right,anchor=south west] cd node [pos=0.7,below left,anchor=north east] ab ++(135:1);
%
matrix (mapa) [matrix of nodes,
        column sep=0.8cm,between origins,
        row sep=0.8cm,between origins,
        every node/.style=minimum size=0.3mm,
        anchor=8.center,
        ampersand replacement=&] at (0.5,0.5)
(13);
%

endtikzpicture


%Empty Karnaugh map 2x4
newenvironmentKarnaughvuit%

begintikzpicture[baseline=(current bounding box.north),scale=0.8]
draw (0,0) grid (4,2);
draw (0,2) -- node [pos=0.7,above right,anchor=south west] bc node [pos=0.7,below left,anchor=north east] a ++(135:1);
%
matrix (mapa) [matrix of nodes,
        column sep=0.8cm,between origins,
        row sep=0.8cm,between origins,
        every node/.style=minimum size=0.3mm,
        anchor=4.center,
        ampersand replacement=&] at (0.5,0.5)
(5);
%

endtikzpicture


%Empty Karnaugh map 2x2
newenvironmentKarnaughquatre%

begintikzpicture[baseline=(current bounding box.north),scale=0.8]
draw (0,0) grid (2,2);
draw (0,2) -- node [pos=0.7,above right,anchor=south west] b node [pos=0.7,below left,anchor=north east] a ++(135:1);
%
matrix (mapa) [matrix of nodes,
        column sep=0.8cm,between origins,
        row sep=0.8cm,between origins,
        every node/.style=minimum size=0.3mm,
        anchor=2.center,
        ampersand replacement=&] at (0.5,0.5)
  phantom0 \
;
%

endtikzpicture


%Defines 8 or 16 values (0,1,X)
newcommandcontingut[1]%
foreach x [count=xi from 0]  in #1
     path (xi) node x;


%Places 1 in listed positions
newcommandminterms[1]%
    foreach x in #1
        path (x) node 1;


%Places 0 in listed positions
newcommandmaxterms[1]%
    foreach x in #1
        path (x) node 0;


%Places X in listed positions
newcommandindeterminats[1]%
    foreach x in #1
        path (x) node X;


begindocument
    beginKarnaugh
        contingut0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
       implicant02red
       implicant515purple
       implicantdaltbaix[3pt]310blue
    implicantcantons[2pt]orange
       implicantcostats414green
    endKarnaugh
    %
    beginKarnaughvuit
       minterms3,4
        maxterms0,1,6,7
       indeterminats2,5
       implicant32green
       implicant45
    endKarnaughvuit
    %
    beginKarnaughquatre
        minterms1,2
       maxterms0,3
       implicantsol1green
       implicantsol2red
    endKarnaughquatre

enddocument

Hace unos días (26 de noviembre), Mattias Jacobsson subió su karnaugh-map paquete a CTAN. Ahora, en lugar del código de mi respuesta alternativa, puede usar un paquete real.

karnaugh-map también está basado en TikZ y puede dibujar mapas de dos a seis variables, siendo cuatro el número para el mapa predeterminado. Los mapas de cinco y seis variables se dibujan con dos (o cuatro) submapas de cuatro variables. implicant Los comandos pueden especificar a qué submapa se aplican.

El siguiente código muestra algunos ejemplos que utilizan esta nueva herramienta.

documentclass[tikz, border=2mm]standalone
usepackagekarnaugh-map

begindocument
    beginkarnaugh-map
        manualterms0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
        implicant02
        implicant515
        implicantedge13911
        implicantcorner
        implicantedge412614
    endkarnaugh-map

    beginkarnaugh-map[4][2][1][$X_1X_0$][$X_2$]
        minterms3,4
        maxterms0,1,6,7
        indeterminants2,5
        implicant32
        implicant45
    endkarnaugh-map

    beginkarnaugh-map[2][2][1][$b$][$a$]
        minterms1,2
        maxterms0,3
        implicant11
        implicant22
    endkarnaugh-map

    beginkarnaugh-map[4][4][4]
        implicant00[0,1,2,3]
    endkarnaugh-map
enddocument

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Acuérdate de que puedes optar por la opción de agregar una reseña si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *