WeBWorK Problems

Boolean Circuits using Tikz

Re: Boolean Circuits using Tikz

by Glenn Rice -
Number of replies: 7

There are no tikz libraries that are not allowed.  Can you share an example of your code?  Perhaps we can help to figure out what is not working.

In reply to Glenn Rice

Re: Boolean Circuits using Tikz

by Cindy Loten -
Thank-you for your quick response, and I apologize for my slow response. You're right. It's not a library problem. I was having a dollar sign problem. The code below works. However, if try to use
\node[and gate US, draw, logic gate inputs=nn] at ($(P)+(3,0)-(0,0.1)$) (and) {};
to place my add gate like I do in my slides, that results in an error. To do the arithmetic (P)+(3,0)-(0,0.1) to place the AND gate 3 right and 0.1 down of node (P), I need the dollar signs in my slides. Given that $ means string name in Perl, what symbol should I put around (P)+(3,0)-(0,0.1) to get tikz to do arithmetic to place the AND gate?

Looking at the example provided by Andrew Parker in this thread, I see another approach to placing nodes and gates, but I'm wondering if my current approach can be modified for WeBWorK.

DOCUMENT();

loadMacros(
"PGstandard.pl", # Standard macros for PG language
"MathObjects.pl",
"PGML.pl",
"PGtikz.pl",
#"source.pl", # allows code to be displayed on certain sites.
"PGcourse.pl", # Customization file for the course
);

# Print problem number and point value (weight) for the problem

TEXT(beginproblem());

# Show which answers are correct and which ones are incorrect

$showPartialCorrectAnswers = 1;

##############################################################
#
# Setup
#
#

Context("Numeric");

$my_graph = createTikZImage();
$my_graph -> tikzLibraries("shapes,decorations,arrows,calc,fit,positioning,arrows.meta,circuits.logic.US");#from slides
#need to look at what libraries I really need
$my_graph -> tikzOptions(" ");
$my_graph -> addToPreamble(" ");
$my_graph->BEGIN_TIKZ
\node (P) at (0,1) {P};
\node (Q) at (0,0) {Q};

\node[and gate US, draw, logic gate inputs=nn] at (2,.9) (and) {};

%\node[and gate US, draw, logic gate inputs=nn] at ($(P)+(3,0)-(0,0.1)$) (and) {};

\draw (P) -- (and.input 1);
\draw (Q) -- (1.5,0) |- (and.input 2);
END_TIKZ
#using testing suggestion
$image = image($my_graph, width => 300, tex_size => 1000);

##############################################################
#
# Text
#
#

BEGIN_PGML
**Having problems with \$ **
Trying to draw a circuit.

[@ $image @]*
END_PGML

ENDDOCUMENT();
In reply to Cindy Loten

Re: Boolean Circuits using Tikz

by Sean Fitzpatrick -

For math in text nodes, you can do

\(\maththings\)
instead of
$\maththings$
.

In reply to Sean Fitzpatrick

Re: Boolean Circuits using Tikz

by Sean Fitzpatrick -
Sorry for the weird formatting. Moodle also uses the first syntax for entering LaTeX, and I couldn't remember the HTML tag for inline preformatted text.
In reply to Sean Fitzpatrick

Re: Boolean Circuits using Tikz

by Andrew Parker -

I was not actually able to get this alternative to work when developing my posted example. It seems that literal dollar signs are required as delimiters for these tikz calculations (please, someone correct me if I'm wrong) as they are not denoting math-mode in this case.

However, I was successful in using a variable to hold the literal dollar sign as follows:

$dol = '$';
# ... then between BEGIN_TIKZ/END_TIKZ
\node[and gate US, draw, logic gate inputs=nn] at ($dol (P)+(3,0)-(0,0.1)$dol ) (and) {};


In reply to Andrew Parker

Re: Boolean Circuits using Tikz

by Glenn Rice -

No, the dollar signs in this case are not for math mode.  They are for the "calc" tikz library.

You need to escape the dollar signs.  You can't use the usual backslash for this due to PG translation.  However, you should be able to use ~~ instead.  So it would be

\node[and gate US, draw, logic gate inputs=nn] at (~~$(P)+(3,0)-(0,0.1)~~$) (and) {};

In reply to Glenn Rice

Re: Boolean Circuits using Tikz

by Glenn Rice -
Here is a working example that uses the double tilde escape approach.

DOCUMENT();

loadMacros("PGstandard.pl", "PGML.pl", "PGtikz.pl", "PGcourse.pl");

$my_graph = createTikZImage();
$my_graph->tikzLibraries("circuits.logic.US");

$my_graph->BEGIN_TIKZ
\node (P) at (0,1) {P};
\node (Q) at (0,0) {Q};
\node[and gate US, draw, logic gate inputs=nn] at (~~$(P)+(3,0)-(0,0.1)~~$) (and) {};
\draw (P) -- (and.input 1);
\draw (Q) -- (1.5,0) |- (and.input 2);
END_TIKZ

# Text
BEGIN_PGML
[@ image($my_graph, width => 300, tex_size => 1000) @]*
END_PGML

ENDDOCUMENT();

Note that the circuits.logic.US tikz library automatically loads the calc tikz library. So that doesn't need to be explicitly loaded. The other tikz libraries you had listed aren't needed for this (or are also automatically loaded). You can add any back that you use though.
In reply to Glenn Rice

Re: Boolean Circuits using Tikz

by Cindy Loten -
~~ is the fix! Thanks. This is ringing a bell. I just went looking through some notes from last year, and found something about using ~~ (but not \ ) to escape special characters. I was using Perl to process string answers. I'm all set.
Good to know I don't have to load calc when I've already got the circuits.logic.US tikz library going.