tag:blogger.com,1999:blog-29611027595199127392024-02-20T11:31:58.005-08:00Jim Hefferon's blogI teach mathematics at Saint Michael's College in Colchester Vermont. Besides math, I enjoy fooling around with programming, jogging, cello, and ham radio.Jim Hefferonhttp://www.blogger.com/profile/09292836035665054384noreply@blogger.comBlogger11125tag:blogger.com,1999:blog-2961102759519912739.post-30641028467002067222022-02-21T07:04:00.001-08:002022-02-21T07:05:15.183-08:00Setting Up Hamlib and CQRLOG with my FT-840 and Not-Ancient Laptop<h1 style="text-align: left;"> <span style="font-size: small;">Setting Up Hamlib and CQRLOG with my FT-840</span></h1><div style="text-align: left;"><span style="font-size: small;">These are my notes. I took them for my own use if I need to do this again, but if you find them usefule then good. (I got much of this from other folks's notes, so thanks to them!)</span></div><div style="text-align: left;"><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><h2 style="text-align: left;"><span style="font-size: small;">Step 0) Get CQRLOG from its PPA.</span></h2><span style="font-size: small;">CQRLOG wants you to get their stuff from their own repo.</span></div><div style="text-align: left;"><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-family: courier;"><span style="font-size: small;">sudo add-apt-repository ppa:ok2cqr/ppa;sudo apt-get update;sudo apt-get install cqrlog</span><span style="font-size: small;"><br /></span></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-size: small;">Get hamlib.</span><span style="font-size: small;"><br /></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-family: courier;"><span style="font-size: small;">sudo apt install libhamlib2</span><span style="font-size: small;"><br /></span></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-size: small;">Get the signing software from the ARRL</span><span style="font-size: small;"><br /></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-size: small;"> <span style="font-family: courier;">apt instal</span></span><span style="font-family: courier;">sudol trustedqsl</span></div><div style="text-align: left;"><span style="font-size: small;"><br /></span></div><h2 style="text-align: left;"><span style="font-size: medium;">2) Add ke1az to the dialout group.</span></h2><div style="text-align: left;"><span style="font-family: courier;"><span style="font-size: small;">ke1az@ke1az-HP-Notebook:~$ sudo usermod -a -G dialout ke1az<br /></span><span style="font-size: small;">[sudo] password for ke1az:</span><span style="font-size: small;"><br /></span></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><h2><span style="font-size: small;">Step 1) Figure out how to connect to the rig.</span></h2><div><span style="font-size: small;">The rig has a serial port, but no laptop made in this century does. So I bought a USB-to-serial cord. I must figure out how to connect it. </span>(This information is from http://pa0rob.vandenhoff.info/article/hamlib-rigcltd. Thanks!). From a terminal run</div><div><span style="font-size: small;"><br /></span><span style="font-family: courier; font-size: small;">dmesg</span><span style="font-size: small;"><br /></span><span style="font-size: small;"><br /></span></div><div><span style="font-size: small;">then turn off radio, then turn it back on and run</span><span style="font-size: small;"><br /></span><span style="font-size: small;"><br /></span></div><div><span style="font-family: courier; font-size: small;">dmesg</span><span style="font-size: small;"><br /></span><span style="font-size: small;"><br /></span></div><div><span style="font-size: small;">again. You are looking for /dev/ttyUSB* messages</span></div><div><span style="font-size: small;"><br /></span><span style="font-family: courier;"><span style="font-size: small;"> 15.088854] usbcore: registered new interface driver usbserial_generic<br /></span><span style="font-size: small;">[ 15.088875] usbserial: USB Serial support registered for generic<br /></span><span style="font-size: small;">[ 15.198003] usbcore: registered new interface driver ftdi_sio<br /></span><span style="font-size: small;">[ 15.198019] usbserial: USB Serial support registered for FTDI USB Serial Device<br /></span><span style="font-size: small;">[ 15.198090] ftdi_sio 1-3.4:1.0: FTDI USB Serial Device converter detected<br /></span><span style="font-size: small;">[ 15.198126] usb 1-3.4: Detected FT232RL<br /></span><span style="font-size: small;">[ 15.199949] usb 1-3.4: FTDI USB Serial Device converter now attached to ttyUSB0<br /></span><span style="font-size: small;">[ 15.226954] usbcore: registered new interface driver pl2303<br /></span><span style="font-size: small;">[ 15.226972] usbserial: USB Serial support registered for pl2303<br /></span><span style="font-size: small;">[ 15.226990] pl2303 1-1:1.0: pl2303 converter detected<br /></span><span style="font-size: small;">[ 15.227733] usb 1-1: pl2303 converter now attached to ttyUSB1</span><span style="font-size: small;"><br /></span></span></div><div><span style="font-family: courier;"><span style="font-size: small;"><br /></span></span></div></div><div style="text-align: left;"><span style="font-size: small;">When plugging in your USB rig it will get mounted as /dev/ttyUSB0 or /dev/ttyUSB1 or ... The number depends on which other devices are plugged in and can vary after each reboot. The <span style="font-family: courier;">udev</span></span> system gives a device a name based on it's manufacturer and device ID. In Ubuntu, these rules are specified in</div><div style="text-align: left;"><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-size: small;"> <span style="font-family: courier;"> /etc/udev/rules.d/</span></span><span style="font-size: small;"><br /></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-size: small;">For hamlib devices, create a file named like this. </span></div><div style="text-align: left;"><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-size: small;"> <span style="font-family: courier;">99-hamlib.rules</span></span></div><div style="text-align: left;"><span style="font-size: small;"><span style="font-family: courier;"><br /></span></span><span style="font-size: small;">The 99- governs the order of execution within the <span style="font-family: courier;">udev </span>startup.</span><span style="font-size: small;"><br /></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-size: small;">Now, to find the rigs device:</span><span style="font-size: small;"><br /></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-family: courier;"><span style="font-size: small;">~$ lsusb<br /></span><span style="font-size: small;">Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub<br /></span><span style="font-size: small;">Bus 001 Device 004: ID 064e:930b Suyin Corp. HP Truevision HD<br /></span><span style="font-size: small;">Bus 001 Device 006: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC<br /></span><span style="font-size: small;">Bus 001 Device 005: ID 046d:c534 Logitech, Inc. Unifying Receiver<br /></span><span style="font-size: small;">Bus 001 Device 003: ID 2109:2812 VIA Labs, Inc. VL812 Hub<br /></span><span style="font-size: small;">Bus 001 Device 002: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port<br /></span><span style="font-size: small;">Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub</span><span style="font-size: small;"><br /></span></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-size: small;">In my case the sixth line is the Serial port. The </span>VendorId:DeviceId is <span style="font-family: courier;">067b:2303</span>.</div><div style="text-align: left;"><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-family: courier;"><span style="font-size: small;">~$ ls -al /dev/ttyUSB*<br /></span><span style="font-size: small;">crw-rw---- 1 root dialout 188, 0 Jan 22 13:29 /dev/ttyUSB0<br /></span><span style="font-size: small;">crw-rw---- 1 root dialout 188, 1 Jan 22 13:29 /dev/ttyUSB1</span><span style="font-size: small;"><br /></span></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-size: small;">This gives <span style="font-family: courier;">/dev/ttyUSB0</span> and <span style="font-family: courier;">/dev/ttyUSB1 </span>as the mounted serial devices.</span><span style="font-size: small;"><br /></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-size: small;">Now we must find some attribute info for the devices to filter on in the <span style="font-family: courier;">udev</span> rule.</span></div><div style="text-align: left;"><div><span style="font-size: small;">The <span style="font-family: courier;">udevadm</span> info starts with the device specified by the path and then<br /></span><span style="font-size: small;">walks up the chain of parent devices. It prints for every device<br /></span><span style="font-size: small;">found, all possible attributes in the <span style="font-family: courier;">udev</span> rules key format.<br /></span><span style="font-size: small;">You can compose a rule to match using the attributes of the device<br /></span><span style="font-size: small;">and the attributes from one single parent device.</span></div><div><span style="font-size: small;"><br /></span></div><span style="font-family: courier; font-size: small;">~$ udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)</span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-family: courier;"><span style="font-size: small;"> looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.4/1-3.4:1.0/ttyUSB0/tty/ttyUSB0':<br /></span><span style="font-size: small;"> KERNEL=="ttyUSB0"<br /></span><span style="font-size: small;"> SUBSYSTEM=="tty"<br /></span><span style="font-size: small;"> DRIVER==""</span><span style="font-size: small;"><br /></span><span style="font-size: small;"> looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.4/1-3.4:1.0/ttyUSB0':<br /></span><span style="font-size: small;"> KERNELS=="ttyUSB0"<br /></span><span style="font-size: small;"> SUBSYSTEMS=="usb-serial"<br /></span><span style="font-size: small;"> DRIVERS=="ftdi_sio"<br /></span><span style="font-size: small;"> ATTRS{latency_timer}=="16"<br /></span><span style="font-size: small;"> ATTRS{port_number}=="0"</span><span style="font-size: small;"><br /></span><span style="font-size: small;"> looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.4/1-3.4:1.0':<br /></span><span style="font-size: small;"> KERNELS=="1-3.4:1.0"<br /></span><span style="font-size: small;"> SUBSYSTEMS=="usb"<br /></span><span style="font-size: small;"> DRIVERS=="ftdi_sio"<br /></span><span style="font-size: small;"> ATTRS{bAlternateSetting}==" 0"<br /></span><span style="font-size: small;"> ATTRS{bInterfaceClass}=="ff"<br /></span><span style="font-size: small;"> ATTRS{bNumEndpoints}=="02"<br /></span><span style="font-size: small;"> ATTRS{bInterfaceSubClass}=="ff"<br /></span><span style="font-size: small;"> ATTRS{bInterfaceProtocol}=="ff"<br /></span><span style="font-size: small;"> ATTRS{bInterfaceNumber}=="00"<br /></span><span style="font-size: small;"> ATTRS{authorized}=="1"<br /></span><span style="font-size: small;"> ATTRS{interface}=="FT232R USB UART"<br /></span><span style="font-size: small;"> ATTRS{supports_autosuspend}=="1"</span><span style="font-size: small;"><br /></span><span style="font-size: small;"> looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.4':<br /></span><span style="font-size: small;"> KERNELS=="1-3.4"<br /></span><span style="font-size: small;"> SUBSYSTEMS=="usb"<br /></span><span style="font-size: small;"> DRIVERS=="usb"<br /></span><span style="font-size: small;"> ATTRS{bDeviceSubClass}=="00"<br /></span><span style="font-size: small;"> ATTRS{product}=="FT232R USB UART"<br /></span><span style="font-size: small;"> ATTRS{tx_lanes}=="1"<br /></span><span style="font-size: small;"> ATTRS{speed}=="12"<br /></span><span style="font-size: small;"> ATTRS{bNumInterfaces}==" 1"<br /></span><span style="font-size: small;"> ATTRS{bMaxPower}=="90mA"<br /></span><span style="font-size: small;"> ATTRS{avoid_reset_quirk}=="0"<br /></span><span style="font-size: small;"> ATTRS{urbnum}=="16"<br /></span><span style="font-size: small;"> ATTRS{bNumConfigurations}=="1"<br /></span><span style="font-size: small;"> ATTRS{rx_lanes}=="1"<br /></span><span style="font-size: small;"> ATTRS{maxchild}=="0"<br /></span><span style="font-size: small;"> ATTRS{authorized}=="1"<br /></span><span style="font-size: small;"> ATTRS{manufacturer}=="FTDI"<br /></span><span style="font-size: small;"> ATTRS{ltm_capable}=="no"<br /></span><span style="font-size: small;"> ATTRS{idVendor}=="0403"<br /></span><span style="font-size: small;"> ATTRS{quirks}=="0x0"<br /></span><span style="font-size: small;"> ATTRS{configuration}==""<br /></span><span style="font-size: small;"> ATTRS{version}==" 2.00"<br /></span><span style="font-size: small;"> ATTRS{bDeviceClass}=="00"<br /></span><span style="font-size: small;"> ATTRS{idProduct}=="6001"<br /></span><span style="font-size: small;"> ATTRS{devnum}=="6"<br /></span><span style="font-size: small;"> ATTRS{serial}=="A8007UXh"<br /></span><span style="font-size: small;"> ATTRS{bDeviceProtocol}=="00"<br /></span><span style="font-size: small;"> ATTRS{bcdDevice}=="0600"<br /></span><span style="font-size: small;"> ATTRS{devpath}=="3.4"<br /></span><span style="font-size: small;"> ATTRS{bMaxPacketSize0}=="8"<br /></span><span style="font-size: small;"> ATTRS{removable}=="unknown"<br /></span><span style="font-size: small;"> ATTRS{busnum}=="1"<br /></span><span style="font-size: small;"> ATTRS{bConfigurationValue}=="1"<br /></span><span style="font-size: small;"> ATTRS{bmAttributes}=="a0"</span><span style="font-size: small;"><br /></span><span style="font-size: small;"> looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-3':<br /></span><span style="font-size: small;"> KERNELS=="1-3"<br /></span><span style="font-size: small;"> SUBSYSTEMS=="usb"<br /></span><span style="font-size: small;"> DRIVERS=="usb"<br /></span><span style="font-size: small;"> ATTRS{urbnum}=="40"<br /></span><span style="font-size: small;"> ATTRS{bNumInterfaces}==" 1"<br /></span><span style="font-size: small;"> ATTRS{bMaxPower}=="0mA"<br /></span><span style="font-size: small;"> ATTRS{rx_lanes}=="1"<br /></span><span style="font-size: small;"> ATTRS{avoid_reset_quirk}=="0"<br /></span><span style="font-size: small;"> ATTRS{bMaxPacketSize0}=="64"<br /></span><span style="font-size: small;"> ATTRS{bDeviceClass}=="09"<br /></span><span style="font-size: small;"> ATTRS{idProduct}=="2812"<br /></span><span style="font-size: small;"> ATTRS{bDeviceSubClass}=="00"<br /></span><span style="font-size: small;"> ATTRS{maxchild}=="4"<br /></span><span style="font-size: small;"> ATTRS{authorized}=="1"<br /></span><span style="font-size: small;"> ATTRS{ltm_capable}=="no"<br /></span><span style="font-size: small;"> ATTRS{devnum}=="3"<br /></span><span style="font-size: small;"> ATTRS{bNumConfigurations}=="1"<br /></span><span style="font-size: small;"> ATTRS{configuration}==""<br /></span><span style="font-size: small;"> ATTRS{bConfigurationValue}=="1"<br /></span><span style="font-size: small;"> ATTRS{bmAttributes}=="e0"<br /></span><span style="font-size: small;"> ATTRS{tx_lanes}=="1"<br /></span><span style="font-size: small;"> ATTRS{idVendor}=="2109"<br /></span><span style="font-size: small;"> ATTRS{bDeviceProtocol}=="01"<br /></span><span style="font-size: small;"> ATTRS{devpath}=="3"<br /></span><span style="font-size: small;"> ATTRS{busnum}=="1"<br /></span><span style="font-size: small;"> ATTRS{bcdDevice}=="0be0"<br /></span><span style="font-size: small;"> ATTRS{version}==" 2.10"<br /></span><span style="font-size: small;"> ATTRS{product}=="USB2.0 Hub "<br /></span><span style="font-size: small;"> ATTRS{quirks}=="0x0"<br /></span><span style="font-size: small;"> ATTRS{removable}=="removable"<br /></span><span style="font-size: small;"> ATTRS{speed}=="480"<br /></span><span style="font-size: small;"> ATTRS{manufacturer}=="VIA Labs, Inc. "</span><span style="font-size: small;"><br /></span><span style="font-size: small;"> looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1':<br /></span><span style="font-size: small;"> KERNELS=="usb1"<br /></span><span style="font-size: small;"> SUBSYSTEMS=="usb"<br /></span><span style="font-size: small;"> DRIVERS=="usb"<br /></span><span style="font-size: small;"> ATTRS{bcdDevice}=="0511"<br /></span><span style="font-size: small;"> ATTRS{authorized_default}=="1"<br /></span><span style="font-size: small;"> ATTRS{bmAttributes}=="e0"<br /></span><span style="font-size: small;"> ATTRS{version}==" 2.00"<br /></span><span style="font-size: small;"> ATTRS{quirks}=="0x0"<br /></span><span style="font-size: small;"> ATTRS{authorized}=="1"<br /></span><span style="font-size: small;"> ATTRS{devpath}=="0"<br /></span><span style="font-size: small;"> ATTRS{maxchild}=="8"<br /></span><span style="font-size: small;"> ATTRS{busnum}=="1"<br /></span><span style="font-size: small;"> ATTRS{configuration}==""<br /></span><span style="font-size: small;"> ATTRS{devnum}=="1"<br /></span><span style="font-size: small;"> ATTRS{product}=="xHCI Host Controller"<br /></span><span style="font-size: small;"> ATTRS{tx_lanes}=="1"<br /></span><span style="font-size: small;"> ATTRS{speed}=="480"<br /></span><span style="font-size: small;"> ATTRS{manufacturer}=="Linux 5.11.0-34-generic xhci-hcd"<br /></span><span style="font-size: small;"> ATTRS{bConfigurationValue}=="1"<br /></span><span style="font-size: small;"> ATTRS{bDeviceProtocol}=="01"<br /></span><span style="font-size: small;"> ATTRS{bDeviceSubClass}=="00"<br /></span><span style="font-size: small;"> ATTRS{ltm_capable}=="no"<br /></span><span style="font-size: small;"> ATTRS{idProduct}=="0002"<br /></span><span style="font-size: small;"> ATTRS{idVendor}=="1d6b"<br /></span><span style="font-size: small;"> ATTRS{serial}=="0000:00:14.0"<br /></span><span style="font-size: small;"> ATTRS{urbnum}=="60"<br /></span><span style="font-size: small;"> ATTRS{rx_lanes}=="1"<br /></span><span style="font-size: small;"> ATTRS{interface_authorized_default}=="1"<br /></span><span style="font-size: small;"> ATTRS{bNumInterfaces}==" 1"<br /></span><span style="font-size: small;"> ATTRS{avoid_reset_quirk}=="0"<br /></span><span style="font-size: small;"> ATTRS{bMaxPacketSize0}=="64"<br /></span><span style="font-size: small;"> ATTRS{bDeviceClass}=="09"<br /></span><span style="font-size: small;"> ATTRS{bMaxPower}=="0mA"<br /></span><span style="font-size: small;"> ATTRS{bNumConfigurations}=="1"<br /></span><span style="font-size: small;"> ATTRS{removable}=="unknown"</span><span style="font-size: small;"><br /></span><span style="font-size: small;"> looking at parent device '/devices/pci0000:00/0000:00:14.0':<br /></span><span style="font-size: small;"> KERNELS=="0000:00:14.0"<br /></span><span style="font-size: small;"> SUBSYSTEMS=="pci"<br /></span><span style="font-size: small;"> DRIVERS=="xhci_hcd"<br /></span><span style="font-size: small;"> ATTRS{driver_override}=="(null)"<br /></span><span style="font-size: small;"> ATTRS{d3cold_allowed}=="1"<br /></span><span style="font-size: small;"> ATTRS{local_cpulist}=="0-3"<br /></span><span style="font-size: small;"> ATTRS{dma_mask_bits}=="64"<br /></span><span style="font-size: small;"> ATTRS{dbc}=="disabled"<br /></span><span style="font-size: small;"> ATTRS{irq}=="43"<br /></span><span style="font-size: small;"> ATTRS{device}=="0x9c31"<br /></span><span style="font-size: small;"> ATTRS{broken_parity_status}=="0"<br /></span><span style="font-size: small;"> ATTRS{msi_bus}=="1"<br /></span><span style="font-size: small;"> ATTRS{numa_node}=="-1"<br /></span><span style="font-size: small;"> ATTRS{vendor}=="0x8086"<br /></span><span style="font-size: small;"> ATTRS{enable}=="1"<br /></span><span style="font-size: small;"> ATTRS{consistent_dma_mask_bits}=="64"<br /></span><span style="font-size: small;"> ATTRS{class}=="0x0c0330"<br /></span><span style="font-size: small;"> ATTRS{revision}=="0x04"<br /></span><span style="font-size: small;"> ATTRS{subsystem_device}=="0x80c3"<br /></span><span style="font-size: small;"> ATTRS{power_state}=="D0"<br /></span><span style="font-size: small;"> ATTRS{subsystem_vendor}=="0x103c"<br /></span><span style="font-size: small;"> ATTRS{local_cpus}=="f"<br /></span><span style="font-size: small;"> ATTRS{ari_enabled}=="0"</span><span style="font-size: small;"><br /></span><span style="font-size: small;"> looking at parent device '/devices/pci0000:00':<br /></span><span style="font-size: small;"> KERNELS=="pci0000:00"<br /></span><span style="font-size: small;"> SUBSYSTEMS==""<br /></span><span style="font-size: small;"> DRIVERS==""</span></span></div><div style="text-align: left;"><span style="font-family: courier;"><span style="font-size: small;"><br /></span></span><span style="font-size: small;">Here is the other USB.</span></div><div style="text-align: left;"><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-family: courier;"><span style="font-size: small;">~$ udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB1)</span><span style="font-size: small;"><br /></span><span style="font-size: small;"> looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/ttyUSB1/tty/ttyUSB1':<br /></span><span style="font-size: small;"> KERNEL=="ttyUSB1"<br /></span><span style="font-size: small;"> SUBSYSTEM=="tty"<br /></span><span style="font-size: small;"> DRIVER==""</span><span style="font-size: small;"><br /></span><span style="font-size: small;"> looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/ttyUSB1':<br /></span><span style="font-size: small;"> KERNELS=="ttyUSB1"<br /></span><span style="font-size: small;"> SUBSYSTEMS=="usb-serial"<br /></span><span style="font-size: small;"> DRIVERS=="pl2303"<br /></span><span style="font-size: small;"> ATTRS{port_number}=="0"</span><span style="font-size: small;"><br /></span><span style="font-size: small;"> looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0':<br /></span><span style="font-size: small;"> KERNELS=="1-1:1.0"<br /></span><span style="font-size: small;"> SUBSYSTEMS=="usb"<br /></span><span style="font-size: small;"> DRIVERS=="pl2303"<br /></span><span style="font-size: small;"> ATTRS{supports_autosuspend}=="1"<br /></span><span style="font-size: small;"> ATTRS{bInterfaceNumber}=="00"<br /></span><span style="font-size: small;"> ATTRS{bNumEndpoints}=="03"<br /></span><span style="font-size: small;"> ATTRS{bInterfaceSubClass}=="00"<br /></span><span style="font-size: small;"> ATTRS{bInterfaceProtocol}=="00"<br /></span><span style="font-size: small;"> ATTRS{bInterfaceClass}=="ff"<br /></span><span style="font-size: small;"> ATTRS{authorized}=="1"<br /></span><span style="font-size: small;"> ATTRS{bAlternateSetting}==" 0"</span><span style="font-size: small;"><br /></span><span style="font-size: small;"> looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-1':<br /></span><span style="font-size: small;"> KERNELS=="1-1"<br /></span><span style="font-size: small;"> SUBSYSTEMS=="usb"<br /></span><span style="font-size: small;"> DRIVERS=="usb"<br /></span><span style="font-size: small;"> ATTRS{ltm_capable}=="no"<br /></span><span style="font-size: small;"> ATTRS{authorized}=="1"<br /></span><span style="font-size: small;"> ATTRS{bDeviceClass}=="00"<br /></span><span style="font-size: small;"> ATTRS{bNumConfigurations}=="1"<br /></span><span style="font-size: small;"> ATTRS{tx_lanes}=="1"<br /></span><span style="font-size: small;"> ATTRS{bMaxPacketSize0}=="64"<br /></span><span style="font-size: small;"> ATTRS{maxchild}=="0"<br /></span><span style="font-size: small;"> ATTRS{urbnum}=="21"<br /></span><span style="font-size: small;"> ATTRS{devpath}=="1"<br /></span><span style="font-size: small;"> ATTRS{idProduct}=="2303"<br /></span><span style="font-size: small;"> ATTRS{product}=="USB-Serial Controller D"<br /></span><span style="font-size: small;"> ATTRS{version}==" 1.10"<br /></span><span style="font-size: small;"> ATTRS{devnum}=="2"<br /></span><span style="font-size: small;"> ATTRS{speed}=="12"<br /></span><span style="font-size: small;"> ATTRS{manufacturer}=="Prolific Technology Inc. "<br /></span><span style="font-size: small;"> ATTRS{configuration}==""<br /></span><span style="font-size: small;"> ATTRS{bcdDevice}=="0400"<br /></span><span style="font-size: small;"> ATTRS{removable}=="removable"<br /></span><span style="font-size: small;"> ATTRS{bConfigurationValue}=="1"<br /></span><span style="font-size: small;"> ATTRS{avoid_reset_quirk}=="0"<br /></span><span style="font-size: small;"> ATTRS{bNumInterfaces}==" 1"<br /></span><span style="font-size: small;"> ATTRS{busnum}=="1"<br /></span><span style="font-size: small;"> ATTRS{idVendor}=="067b"<br /></span><span style="font-size: small;"> ATTRS{bDeviceProtocol}=="00"<br /></span><span style="font-size: small;"> ATTRS{bmAttributes}=="80"<br /></span><span style="font-size: small;"> ATTRS{bMaxPower}=="100mA"<br /></span><span style="font-size: small;"> ATTRS{quirks}=="0x0"<br /></span><span style="font-size: small;"> ATTRS{rx_lanes}=="1"<br /></span><span style="font-size: small;"> ATTRS{bDeviceSubClass}=="00"</span><span style="font-size: small;"><br /></span><span style="font-size: small;"> looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1':<br /></span><span style="font-size: small;"> KERNELS=="usb1"<br /></span><span style="font-size: small;"> SUBSYSTEMS=="usb"<br /></span><span style="font-size: small;"> DRIVERS=="usb"<br /></span><span style="font-size: small;"> ATTRS{bNumInterfaces}==" 1"<br /></span><span style="font-size: small;"> ATTRS{manufacturer}=="Linux 5.11.0-34-generic xhci-hcd"<br /></span><span style="font-size: small;"> ATTRS{product}=="xHCI Host Controller"<br /></span><span style="font-size: small;"> ATTRS{speed}=="480"<br /></span><span style="font-size: small;"> ATTRS{devpath}=="0"<br /></span><span style="font-size: small;"> ATTRS{bMaxPacketSize0}=="64"<br /></span><span style="font-size: small;"> ATTRS{bConfigurationValue}=="1"<br /></span><span style="font-size: small;"> ATTRS{authorized_default}=="1"<br /></span><span style="font-size: small;"> ATTRS{version}==" 2.00"<br /></span><span style="font-size: small;"> ATTRS{bcdDevice}=="0511"<br /></span><span style="font-size: small;"> ATTRS{bDeviceClass}=="09"<br /></span><span style="font-size: small;"> ATTRS{devnum}=="1"<br /></span><span style="font-size: small;"> ATTRS{idProduct}=="0002"<br /></span><span style="font-size: small;"> ATTRS{interface_authorized_default}=="1"<br /></span><span style="font-size: small;"> ATTRS{removable}=="unknown"<br /></span><span style="font-size: small;"> ATTRS{tx_lanes}=="1"<br /></span><span style="font-size: small;"> ATTRS{rx_lanes}=="1"<br /></span><span style="font-size: small;"> ATTRS{bDeviceSubClass}=="00"<br /></span><span style="font-size: small;"> ATTRS{urbnum}=="60"<br /></span><span style="font-size: small;"> ATTRS{bNumConfigurations}=="1"<br /></span><span style="font-size: small;"> ATTRS{maxchild}=="8"<br /></span><span style="font-size: small;"> ATTRS{bmAttributes}=="e0"<br /></span><span style="font-size: small;"> ATTRS{busnum}=="1"<br /></span><span style="font-size: small;"> ATTRS{ltm_capable}=="no"<br /></span><span style="font-size: small;"> ATTRS{avoid_reset_quirk}=="0"<br /></span><span style="font-size: small;"> ATTRS{idVendor}=="1d6b"<br /></span><span style="font-size: small;"> ATTRS{serial}=="0000:00:14.0"<br /></span><span style="font-size: small;"> ATTRS{quirks}=="0x0"<br /></span><span style="font-size: small;"> ATTRS{bMaxPower}=="0mA"<br /></span><span style="font-size: small;"> ATTRS{bDeviceProtocol}=="01"<br /></span><span style="font-size: small;"> ATTRS{configuration}==""<br /></span><span style="font-size: small;"> ATTRS{authorized}=="1"</span><span style="font-size: small;"><br /></span><span style="font-size: small;"> looking at parent device '/devices/pci0000:00/0000:00:14.0':<br /></span><span style="font-size: small;"> KERNELS=="0000:00:14.0"<br /></span><span style="font-size: small;"> SUBSYSTEMS=="pci"<br /></span><span style="font-size: small;"> DRIVERS=="xhci_hcd"<br /></span><span style="font-size: small;"> ATTRS{subsystem_device}=="0x80c3"<br /></span><span style="font-size: small;"> ATTRS{dbc}=="disabled"<br /></span><span style="font-size: small;"> ATTRS{subsystem_vendor}=="0x103c"<br /></span><span style="font-size: small;"> ATTRS{class}=="0x0c0330"<br /></span><span style="font-size: small;"> ATTRS{power_state}=="D0"<br /></span><span style="font-size: small;"> ATTRS{d3cold_allowed}=="1"<br /></span><span style="font-size: small;"> ATTRS{enable}=="1"<br /></span><span style="font-size: small;"> ATTRS{msi_bus}=="1"<br /></span><span style="font-size: small;"> ATTRS{ari_enabled}=="0"<br /></span><span style="font-size: small;"> ATTRS{device}=="0x9c31"<br /></span><span style="font-size: small;"> ATTRS{broken_parity_status}=="0"<br /></span><span style="font-size: small;"> ATTRS{numa_node}=="-1"<br /></span><span style="font-size: small;"> ATTRS{vendor}=="0x8086"<br /></span><span style="font-size: small;"> ATTRS{driver_override}=="(null)"<br /></span><span style="font-size: small;"> ATTRS{local_cpus}=="f"<br /></span><span style="font-size: small;"> ATTRS{revision}=="0x04"<br /></span><span style="font-size: small;"> ATTRS{consistent_dma_mask_bits}=="64"<br /></span><span style="font-size: small;"> ATTRS{irq}=="43"<br /></span><span style="font-size: small;"> ATTRS{dma_mask_bits}=="64"<br /></span><span style="font-size: small;"> ATTRS{local_cpulist}=="0-3"</span><span style="font-size: small;"><br /></span><span style="font-size: small;"> looking at parent device '/devices/pci0000:00':<br /></span><span style="font-size: small;"> KERNELS=="pci0000:00"<br /></span><span style="font-size: small;"> SUBSYSTEMS==""<br /></span><span style="font-size: small;"> DRIVERS==""</span></span></div><div style="text-align: left;"><span style="font-family: courier;"><span style="font-size: small;"><br /></span></span><span style="font-size: small;">With those in mind, create and edit the rules file.</span></div><div style="text-align: left;"><span style="font-size: small;"><br /></span><span style="font-family: courier;"><span style="font-size: small;"> sudo emacs /etc/udev/rules.d/99-ham_rig.rules</span><span style="font-size: small;"><br /></span></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-size: small;">The .rules file looks like this (replace bold text with your rigs data)</span><span style="font-size: small;"><br /></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-family: courier;"><span style="font-size: small;"> # FT-991A CP210x UART Bridge<br /></span><span style="font-size: small;"> SUBSYSTEM=="tty", DRIVERS=="cp210x", ATTRS{interface}=="Standard*", SYMLINK+="rig1s"<br /></span><span style="font-size: small;"> SUBSYSTEM=="tty", DRIVERS=="cp210x", ATTRS{interface}=="Enhanced*", SYMLINK+="rig1e"</span><span style="font-size: small;"><br /></span></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-size: small;">Save that file and restart the udev service:</span><span style="font-size: small;"><br /></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-family: courier;"><span style="font-size: small;"> sudo service udev restart<br /></span><span style="font-size: small;">~$ sudo service udev restart<br /></span><span style="font-size: small;">[sudo] password for ke1az: </span><span style="font-size: small;"><br /></span></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-size: small;">Load the new rule:</span><span style="font-size: small;"><br /></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-family: courier;"><span style="font-size: small;"> sudo udevadm trigger</span><span style="font-size: small;"><br /></span></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-size: small;">Check:</span><span style="font-size: small;"><br /></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-family: courier;"><span style="font-size: small;">~$ ls -al /dev/rig*<br /></span><span style="font-size: small;">lrwxrwxrwx 1 root root 7 Jan 22 14:42 /dev/rig1e -> ttyUSB1<br /></span><span style="font-size: small;">lrwxrwxrwx 1 root root 7 Jan 22 14:42 /dev/rig1s -> ttyUSB0</span><span style="font-size: small;"><br /></span></span><span style="font-size: small;"><br /></span><span style="font-family: courier;"><span style="font-size: small;">~$ rigctld -m 111 -r /dev/rig1e -t 4532 -s 4800 --set-conf=data_bits=8, stop_bits=2, serial_parity=None, serial_handshake=None, dtr_state=OFF, rts_state=ON &<br /></span><span style="font-size: small;">[1] 83876<br /></span><span style="font-size: small;">ke1az@ke1az-HP-Notebook:~$ rig_open: error = IO error <br /></span><span style="font-size: small;">^C<br /></span><span style="font-size: small;">[1]+ Exit 2 rigctld -m 111 -r /dev/rig1e -t 4532 -s 4800 --set-conf=data_bits=8, stop_bits=2, serial_parity=None, serial_handshake=None, dtr_state=OFF, rts_state=ON<br /></span><span style="font-size: small;">ke1az@ke1az-HP-Notebook:~$ rigctld -m 111 -r /dev/rig1s -t 4532 -s 4800 --set-conf=data_bits=8, stop_bits=2, serial_parity=None, serial_handshake=None, dtr_state=OFF, rts_state=ON &<br /></span><span style="font-size: small;">[1] 83877<br /></span><span style="font-size: small;">ke1az@ke1az-HP-Notebook:~$ rig_open: error = IO error <br /></span><span style="font-size: small;">^C<br /></span><span style="font-size: small;">[1]+ Exit 2 rigctld -m 111 -r /dev/rig1s -t 4532 -s 4800 --set-conf=data_bits=8, stop_bits=2, serial_parity=None, serial_handshake=None, dtr_state=OFF, rts_state=ON</span>~$ ls -la /dev/ttyUSB1</span></div><div style="text-align: left;"><span style="font-family: courier;"><span style="font-size: small;">crw-rw---- 1 root dialout 188, 1 Jan 22 14:42 /dev/ttyUSB1<br /></span><span style="font-size: small;">ke1az@ke1az-HP-Notebook:~$ ls -la /dev/rig1e<br /></span><span style="font-size: small;">lrwxrwxrwx 1 root root 7 Jan 22 14:42 /dev/rig1e -> ttyUSB1</span><span style="font-size: small;"><br /></span></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-size: small;">Member of dialout group?</span><span style="font-size: small;"><br /></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-family: courier;"><span style="font-size: small;">~$ grep dialout /etc/group<br /></span><span style="font-size: small;">dialout:x:20:ke1az</span><span style="font-size: small;"><br /></span></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><h2 style="text-align: left;"><span style="font-size: small;">Step 2) Getting ther Winkeyer to go.</span></h2></div><div style="text-align: left;"><span style="font-size: small;">In CQRLOG, use </span><span style="font-family: courier;">CQRLOG > Preferences > CW Interface</span>.</div><div style="text-align: left;"><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-size: small;">Under Radio 1 use WinKeyer USB. For the Radio 1 keyer port, </span>disconnect from USB and connect back again.</div><div style="text-align: left;"><br /></div><div style="text-align: left;"><span style="font-family: courier;"><span style="font-size: small;">[ 762.711103] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0<br /></span><span style="font-size: small;">[ 762.711127] ftdi_sio 1-3.4:1.0: device disconnected<br /></span><span style="font-size: small;">[ 764.735666] usb 1-3.4: new full-speed USB device number 10 using xhci_hcd<br /></span><span style="font-size: small;">[ 764.853975] usb 1-3.4: New USB device found, idVendor=0403, idProduct=6001, bcdDevice= 6.00<br /></span><span style="font-size: small;">[ 764.853982] usb 1-3.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3<br /></span><span style="font-size: small;">[ 764.853985] usb 1-3.4: Product: FT232R USB UART<br /></span><span style="font-size: small;">[ 764.853987] usb 1-3.4: Manufacturer: FTDI<br /></span><span style="font-size: small;">[ 764.853989] usb 1-3.4: SerialNumber: A8007UXh<br /></span><span style="font-size: small;">[ 764.861008] ftdi_sio 1-3.4:1.0: FTDI USB Serial Device converter detected<br /></span><span style="font-size: small;">[ 764.861063] usb 1-3.4: Detected FT232RL<br /></span><span style="font-size: small;">[ 764.861613] usb 1-3.4: FTDI USB Serial Device converter now attached to ttyUSB3</span><span style="font-size: small;"><br /></span></span><span style="font-size: small;"><br /></span></div><div style="text-align: left;"><span style="font-size: small;">Use <span style="font-family: courier;">/dev/ttyUSB0</span> as the port under CW.</span></div><div><br /></div>Jim Hefferonhttp://www.blogger.com/profile/09292836035665054384noreply@blogger.com0tag:blogger.com,1999:blog-2961102759519912739.post-77532965003432339302022-02-16T04:55:00.004-08:002022-02-16T08:47:45.658-08:00I guess Amazon is not interested. <p>I got an email from an annoyed user of <a href="https://hefferon.net" target="_blank">my <i>Linear Algebra</i> text</a>. They had bought a paper copy and also bought a book of answers to the exercises. The thing is, though, that the answers to exercises book that they bought, published by someone that I don't know, is from 2012. So it doesn't match the 2022 version of the text. That's why they wrote me, annoyed.</p><p>I explained that because the license is Free it allows people to do what they want with the work and in particular it allows someone to post the answers as a book on Amazon, and this person did just that, in 2012. They haven't updated it.</p><p>I also went to Amazon and posted a user review for that book, explaining the situation, so a potential buyer would have a heads-up. A couple of days later I got a notice from Amazon, saying this.</p><blockquote><p>Thank you for submitting a customer review on Amazon. After carefully reviewing your submission, your review could not be posted to the website. It appears your content did not comply with our guidelines.</p><p>While we appreciate your time and comments, reviews must adhere to the following guidelines</p><p>Amazon Community Guidelines</p><p>from James S. Hefferon on February 12, 2022</p><p>THese are quite old</p><p>I am Jim Hefferon, the author of the Linear Algebra textbook. I am not the producer of this version so I cannot withdraw it. But please note that the text has new versions since these answers were produced, and these do not match the current text.</p></blockquote><p></p><div>(My comment had more but they only included the first few sentences.) They also gave a list of things I might have done wrong. </div><div><div></div><blockquote><div>A few common issues to keep in mind:</div><div>Your review should focus on specific features of the product and your experience with it. Feedback on the seller or your shipment experience should be provided at https://www.amazon.com/hz/feedback.</div><div>We do not allow profane or obscene content. This applies to adult products too.</div><div>Advertisements, promotional material or repeated posts that make the same point excessively are considered spam.</div><div>Please do not include URLs external to Amazon or personally identifiable content in your review.</div><div>Any attempt to manipulate Community content or features, including contributing false, misleading, or inauthentic content, is strictly prohibited.</div></blockquote><p>Obviously this leaves a person taking a stab at precisely what is their objection. OK, I'll stab.</p><p>Cearly I am focused on specific features of the product. I did not get a shipment, so I'm not complaining about that. I did not swear. I did not contribute false or misleading content. So they objected to my naming myself as the author? </p><p>Crazy. </p><div></div></div>Jim Hefferonhttp://www.blogger.com/profile/09292836035665054384noreply@blogger.com0tag:blogger.com,1999:blog-2961102759519912739.post-36852774889369678302022-01-11T07:16:00.003-08:002022-01-11T07:16:33.502-08:00What editor do you use for LaTeX?<p> emacs</p><p>Does everything I want it to do. Been using it since the 80's and expect it will be there until I die. Is on every system I use or will likely ever use, either in a GUI form or in a terminal form, and probably in both forms. Has never, ever, lost or corrupted anything I ever wrote.</p>Jim Hefferonhttp://www.blogger.com/profile/09292836035665054384noreply@blogger.com0tag:blogger.com,1999:blog-2961102759519912739.post-10413035715265099382021-09-11T04:48:00.001-07:002021-09-13T14:33:48.152-07:00Asymptote and opacity<p> I am a terrible draw-er. When I first started using computers, I got a tutorial for MS Paint, which wanted to walk me through drawing a picture of a magician's hat and wand. "First use the Ellipse Tool to draw an ellipse" it said, and there was an accompanying picture. I complied and got a pretty good copy. "Now extend to get the body of the hat." I could not. No matter how many times I followed the steps, the body of the hat did not look right and I was unable to figure out how to change it to make it look like, you know, a hat body. In between my ears, where there ought to be a place to draw pictures, there is a gap. A hole. A yawing chasm.</p><p>I now rely on using systems where you say, "Put the camera at (10,5,4), point it at the origin, and show the extended elliptical surface." This way, I am sure I get a good picture. Specifically, I use<i> <a href="https://asymptote.sourceforge.io/">Asymptote</a>. </i>It is a programming language that outputs graphics, which are suitable for mathematics writing (including that it integrates with LaTeX). One of its strengths is a <a href="https://asymptote.sourceforge.io/asymptote_tutorial.pdf">great tutorial</a>.</p><p>But all software has glitches and there has been an issue with opacity. Opacity is partial transparency. An example of using it is when you draw a plane in 3-space and you want see the axes when they are behind the plane.</p><p><i>Asymptote</i> relies on Ghostscript as a back end, to handle the initial graphical output. Some time ago, years ago, Ghostscript had a security issue affecting the <i>Asymptote</i> graphics that use opacity. For a few years, the workaround was to call <i>Asymptote</i> with `asy -nosafe filename'. No longer. Here is part of <a href="https://sourceforge.net/p/asymptote/discussion/409349/thread/6fd84befa5/">a post</a> I recently made to the <i>Asymptote</i> mailing list.</p><p style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: #555555; font-family: lato, sans-serif; font-size: 14px; margin: 0px; outline: 0px; overflow-wrap: break-word; padding: 0px 10px 1em; vertical-align: baseline;">With this test.asy,</p><div class="codehilite" style="background: rgb(248, 248, 248); border: 0px; box-sizing: inherit; color: #555555; font-family: lato, sans-serif; font-size: 14px; margin: 0px 0px 1em; outline: 0px; overflow: auto; padding: 0px; vertical-align: baseline;"><pre style="background: 0px 0px; border: 0px; box-sizing: inherit; font-family: monospace, sans-serif; margin-bottom: 0px; margin-top: 0px; outline: 0px; overflow-wrap: normal; overflow: auto; padding: 0.5em 15px; vertical-align: baseline;"><span style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span><span class="kn" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: green; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">import</span> <span class="nn" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: blue; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">settings</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">;</span>
<span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">settings</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">.</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">outformat</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">=</span><span class="s2" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #ba2121; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">"pdf"</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">;</span>
<span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">settings</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">.</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">render</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">=</span><span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">0</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">;</span>
<span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">unitsize</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">(</span><span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">1</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">pt</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">);</span>
<span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">draw</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">((</span><span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">0</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">,</span><span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">0</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">)</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">(</span><span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">1</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">,</span><span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">1</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">),</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">red</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">+</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">opacity</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">(</span><span class="mf" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">0.7</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">));</span>
<span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">//</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">draw</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">((</span><span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">0</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">,</span><span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">0</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">)</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">(</span><span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">1</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">,</span><span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">1</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">),</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">red</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">);</span>
</pre></div><p style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: #555555; font-family: lato, sans-serif; font-size: 14px; margin: 0px; outline: 0px; overflow-wrap: break-word; padding: 0px 10px 1em; vertical-align: baseline;">I get the GS failure</p><div class="codehilite" style="background: rgb(248, 248, 248); border: 0px; box-sizing: inherit; color: #555555; font-family: lato, sans-serif; font-size: 14px; margin: 0px 0px 1em; outline: 0px; overflow: auto; padding: 0px; vertical-align: baseline;"><pre style="background: 0px 0px; border: 0px; box-sizing: inherit; font-family: monospace, sans-serif; margin-bottom: 0px; margin-top: 0px; outline: 0px; overflow-wrap: normal; overflow: auto; padding: 0.5em 15px; vertical-align: baseline;"><span style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Loading</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">test</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">from</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">test</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">.</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">asy</span>
<span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">gs</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">q</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">dNOPAUSE</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">dBATCH</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">P</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">dALLOWPSTRANSPARENCY</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">sDEVICE</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">=</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">pdfwrite</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">dEPSCrop</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">dSubsetFonts</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">=</span><span class="nb" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: green; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">true</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">dEmbedAllFonts</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">=</span><span class="nb" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: green; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">true</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">dMaxSubsetPct</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">=</span><span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">100</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">dEncodeColorImages</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">=</span><span class="nb" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: green; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">true</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">dEncodeGrayImages</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">=</span><span class="nb" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: green; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">true</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">dCompatibilityLevel</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">=</span><span class="mf" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">1.4</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">dAutoRotatePages</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">=/</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">None</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">g612x792</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">dDEVICEWIDTHPOINTS</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">=</span><span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">3</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">dDEVICEHEIGHTPOINTS</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">=</span><span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">3</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">sOutputFile</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">=</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">test</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">.</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">pdf</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">test_</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">.</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">eps</span>
<span class="nl" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #a0a000; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Error</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">:</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">/</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">undefined</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">in</span> <span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">.</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">setfillconstantalpha</span>
<span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Operand</span> <span class="nl" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #a0a000; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">stack</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">:</span>
<span class="mf" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">0.7</span>
<span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Execution</span> <span class="nl" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #a0a000; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">stack</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">:</span>
<span class="nf" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: blue; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">%interp_exit</span> <span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">.</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">runexec2</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">nostringval</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">nostringval</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">nostringval</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span> <span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">2</span> <span class="nf" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: blue; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">%stopped_push</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">nostringval</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">nostringval</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">nostringval</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span> <span class="nb" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: green; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">false</span> <span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">1</span> <span class="nf" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: blue; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">%stopped_push</span> <span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">1990</span> <span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">1</span> <span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">3</span> <span class="nf" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: blue; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">%oparray_pop</span> <span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">1989</span> <span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">1</span> <span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">3</span> <span class="nf" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: blue; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">%oparray_pop</span> <span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">1988</span> <span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">1</span> <span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">3</span> <span class="nf" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: blue; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">%oparray_pop</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">nostringval</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span> <span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">1977</span> <span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">1</span> <span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">3</span> <span class="nf" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: blue; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">%oparray_pop</span> <span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">1833</span> <span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">1</span> <span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">3</span> <span class="nf" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: blue; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">%oparray_pop</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">nostringval</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span> <span class="nf" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: blue; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">%errorexec_pop</span> <span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">.</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">runexec2</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">nostringval</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">nostringval</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">nostringval</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span> <span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">2</span> <span class="nf" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: blue; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">%stopped_push</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">nostringval</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span>
<span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Dictionary</span> <span class="nl" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #a0a000; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">stack</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">:</span>
<span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="nl" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #a0a000; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">dict</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">:</span><span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">739</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">/</span><span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">1123</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">(</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">ro</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">)(</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">G</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">)</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="nl" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #a0a000; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">dict</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">:</span><span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">0</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">/</span><span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">20</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">(</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">G</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">)</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span> <span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span><span class="nl" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #a0a000; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">dict</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">:</span><span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">79</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">/</span><span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">200</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">(</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">L</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">)</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">--</span>
<span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Current</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">allocation</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">mode</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">is</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">local</span>
<span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Current</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">file</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">position</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">is</span> <span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">284</span>
<span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">GPL</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Ghostscript</span> <span class="mf" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">9.50</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">:</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Unrecoverable</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">error</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">,</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">exit</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">code</span> <span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">1</span>
<span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">_shipout</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">(</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">prefix</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">,</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">f</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">,</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">currentpatterns</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">,</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">format</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">,</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">wait</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">,</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">view</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">,</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">t</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">);</span>
<span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">^</span>
<span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">/</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">usr</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">/</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">local</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">/</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">texlive</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">/</span><span class="mi" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">2021</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">/</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">texmf</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">-</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">dist</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">/</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">asymptote</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">/</span><span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">plain_shipout</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">.</span><span class="nl" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #a0a000; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">asy</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">:</span> <span class="mf" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">104.11</span><span class="o" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #666666; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">:</span> <span class="nl" style="background: 0px 0px; border: 0px; box-sizing: inherit; color: #a0a000; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">runtime</span><span class="p" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">:</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">shipout</span> <span class="n" style="background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">failed</span>
</pre></div><p style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: #555555; font-family: lato, sans-serif; font-size: 14px; margin: 0px; outline: 0px; overflow-wrap: break-word; padding: 0px 10px 1em; vertical-align: baseline;">The error happens whether I use the -nosafe option or not. If I comment out the opacity-containing line and uncomment the other, then the error goes away and a correct .pdf comes out.</p><p>I recognized the `Error: /undefined in .setfillconstantalpha'. My old nemesis is back. Turns out, recently the Ghostscript people have implemented different operators to avoid the security issues. So the option `-nosafe' no longer works, because you can't just ignore the security issues with the operators, since those operators are gone. Instead, you have to worry about using specific versions of Ghostscript. Yech. </p><p>Anyway, the point of this post is to spread <a href="https://sourceforge.net/p/asymptote/discussion/409349/thread/f2ecb64b19/">spread the word from the mailing list</a> about the work-around. (1) Download a known-good Ghostscript, as with <a href="https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs952/ghostscript-9.52-linux-x86_64.tgz">gs 9.52</a> (watch out, 9.54 is back to not working, for instance). Then for compiling with <i>Asymptote</i>, you can specify an alternate ghostscript location with settings.gs, or with the -gs command line option, or with the ASYMPTOTE_GS environment variable. </p><p>Thanks to John and the other <i>Asymptote</i> folks for really useful software!</p>Jim Hefferonhttp://www.blogger.com/profile/09292836035665054384noreply@blogger.com0tag:blogger.com,1999:blog-2961102759519912739.post-31888185077472276792018-03-23T03:59:00.002-07:002018-03-23T03:59:25.146-07:00Why TeX Live?I am sometimes asked why I recommend that people install <a href="https://www.tug.org/texlive/">TeX Live</a>, even on the Windows platform, to people installing a TeX distribution.<br />
<br />
Of course, on Windows people could choose the <a href="https://miktex.org/">MiKTeX </a> distribution. There is no doubt about it: lots of people around the world use this system and it does great for them. <br />
<br />
The two have essentially the same software (MiKTeX is somewhat more relaxed about license requirements and so carries a few packages that TeX Live does not). So what is it about TeX Live that tips the scale for me? I see two differences.<br />
<br />
1) The first is that MiKTeX can do the on-the-fly installation of packages. That is, if you get a LaTeX source file from someone that uses a package that your MiKTeX does not already have it installed then it goes out on the interwebs and gets it (from the MiKTeX repository, not just from any old place). That's neat.<br />
<br />
(MiKTeX can do this but TeX Live cannot because MiKTeX is a one-platform system. So it knows what supporting software, and what version of that software, is installed.)<br />
<br />
But, although on-the-fly is neat, I personally don't find that I need it. My practice is to install the full version of TeX Live and I almost never need anything else.<br />
<br />
Sometimes people respond that TeX Live full is very big. It is, in 1995 terms. But today is today. My kids download whole movies and think nothing of it. I use TeX during perhaps 20% of my waking day, so the size seems to me to be not much. (And, frankly, my TeX Live installation is a couple of years old. My work buys me a new computer every three years and I install then and forget about it.)<br />
<br />
So doing on-the-fly, while cool, is just not relevant to the great majority of my work. I suspect that it is not relevant to the overwhelming majority of the people who ask me which distribution they should install. If you need it, well then of course I'm sure it is important to you.<br />
<br />
2) The second difference is that TeX Live is an example of a good project in Free stuff. There is an understanding that handing people bits, even bits that are Free, does not suffice.<br />
<br />
MiKTeX is really a one man show. A very admirable project, for sure, and I don't know how he does it, but a person worries about errant busses. <br />
<br />
Said in a less flippant way, the TeX Live project is connected to others. There are core people, but there is an understanding that connections bring real benefits. For example, it is coupled to the <a href="https://www.tug.org/">TeX User Group</a> and other such organizations. These are folks who provide a forum such as the annual TUG meeting and next year's Pratical TeX for interested parties to get together, provide a journal, and provide financial development support to the extent that they can. In my experience all this stuff matters, a great deal, in ensuring that TeX and friends continue to be there, and to be relevant, for years to come.<br />
<br />
It is reason number 2 that persuades me.Jim Hefferonhttp://www.blogger.com/profile/09292836035665054384noreply@blogger.com0tag:blogger.com,1999:blog-2961102759519912739.post-56357218730006832952016-10-16T16:51:00.000-07:002016-10-16T16:51:59.901-07:00Curated list of LaTeX packages<br />
I have been asked what are the core packages that a LaTeX user should know. Not often, but it has happened. <br />
<br />
Here is my list. These are personal choices so folks may disagree, but what can you do with opinions besides spread them around? In any event, I think these are popular and reliable packages.<br />
<br />
<ul>
<li>To change margins, page size, orientation, etc., use <a href="https://www.ctan.org/pkg/geometry"><i>geometry</i></a></li>
<li>To make headers a person reaches for <a href="https://www.ctan.org/pkg/fancyhdr?lang=en"><i>fancyhdr</i></a></li>
<li>Tables of contents, lists of figures, etc. <a href="https://www.ctan.org/pkg/tocloft"><i>tocloft</i></a></li>
<li>To make titles, think of <a href="https://www.ctan.org/pkg/titlesec"><i>titlesec</i></a></li>
<li>Make an index with <a href="https://www.ctan.org/pkg/makeindex"><i>makeindex</i></a> </li>
<li>To get arbitrary fonts use XeLaTeX and <a href="https://www.ctan.org/pkg/fontspec"><i>fontspec</i></a> </li>
<li>Personally, more than BibTeX I like <i><a href="https://www.ctan.org/pkg/biblatex">BibLaTeX</a></i> but I know next to nothing about it </li>
<li>Math <a href="https://www.ctan.org/pkg/amsmath"><i>amsmath</i></a> (I load this by instead loading <a href="https://www.ctan.org/pkg/mathtools"><i>mathtools</i></a> which makes some improvements), and <a href="https://www.ctan.org/pkg/amsfonts"><i>amsfonts</i></a>, as well as theorem environments with <a href="https://www.ctan.org/pkg/amsthm"><i>amsthm</i></a></li>
<li>To make lists use <a href="https://www.ctan.org/pkg/enumitem"><i>enumitem</i></a></li>
<li>Make captions with <a href="https://www.ctan.org/pkg/caption"><i>caption</i></a> and control float placement with <a href="https://www.ctan.org/pkg/float"><i>float</i></a> (I may be wrong about this last; I don't typically use floats.)</li>
<li>Make cross-references with the one-r-ed <a href="https://www.ctan.org/pkg/cleveref"><i>cleveref</i></a></li>
<li>Links with <a href="https://www.ctan.org/pkg/hyperref"><i>hyperref</i></a> (but load it last of all the package you load)</li>
<li>URL's and filenames and file paths with <a href="https://www.ctan.org/pkg/url"><i>url.sty</i></a> (but hyperref makes some improvements, so if you are using hyperref just go with that)</li>
<li>For colors use <a href="https://www.ctan.org/pkg/xcolor"><i>xcolor</i></a></li>
<li>Load graphics with <a href="https://www.ctan.org/pkg/graphicx"><i>graphicx</i></a> </li>
<li>Code listings and verbatim text with <a href="https://www.ctan.org/pkg/listings"><i>listings</i></a>. (Make single quotes come out right in verbatim with <a href="https://www.ctan.org/pkg/upquote"><i>upquote</i></a>) </li>
<li>Many people draw in-place graphics with <a href="https://www.ctan.org/pkg/pgf"><i>TikZ</i></a> (Personally I use <a href="https://www.ctan.org/pkg/asymptote"><i>Asymptote</i></a>)</li>
<li>Make presentations with <a href="https://www.ctan.org/pkg/beamer"><i>beamer</i></a> </li>
<li>Make PDF file do copy and paste, and search with <a href="https://www.ctan.org/pkg/cmap"><i>cmap</i></a></li>
<li>If you are making a PDF, you can toss in <a href="https://www.ctan.org/pkg/microtype"><i>microtype</i></a> for improvements that I am too thick to see, but I put it in because what the heck?</li>
<li>I like footnotes at the page bottom so I use <a href="https://www.ctan.org/pkg/footmisc"><i>footmisc</i></a> (but I hack to change the spacing, which is not doable otherwise)</li>
<li>Make an index with <a href="https://www.ctan.org/pkg/makeindex"><i>makeindex</i></a> </li>
<li>Write answers to exercises to external file with <a href="https://www.ctan.org/pkg/answers"><i>answers</i></a></li>
</ul>
Jim Hefferonhttp://www.blogger.com/profile/09292836035665054384noreply@blogger.com0tag:blogger.com,1999:blog-2961102759519912739.post-42064291446978692662012-08-17T05:11:00.000-07:002012-08-17T05:11:09.574-07:00Administering TeX Live on UbuntuThe TeX that comes in the Ubuntu package manager is a couple of years old (I have Ubuntu 12.04 LTS here in 2012 and the package manager has TeX Live 2009). For many people that won't matter but for my text <i>Linear Algebra</i> I needed some more recent packages, which needed a more recent LaTeX kernel ... . So on the urging of a number of smart folks I installed TeX Live 2012 from tug.org. Here is my experience.<br />
<br />
I kept the package manager's packages installed. One reason is that I know from past experience that if I drop those packages then when I want to install related materials from the package manager, such as AUCtex or Asymptote, then the package manager will complain about unmet dependencies, and I'll try a <span style="font-family: "Courier New",Courier,monospace;">--force</span> install and later there will be an update ... and anyway at some point so that chaos sets in. (Lars Madsen <a href="http://tug.org/pipermail/texhax/2012-July/019395.html">posted</a> a way to avoid this with his knowledge of the package system but of the choices available I went another way, partly because I didn't entirely understand his process and so would have trouble adjusting it if I needed to.)<br />
<br />
<h3>
A first go</h3>
<br />
I <a href="http://www.tug.org/texlive/">downloaded TeX Live.</a> It put things in the default of <span style="font-family: "Courier New",Courier,monospace;">/usr/local/texlive</span>. <span style="font-family: Georgia, "Times New Roman", serif;">My local files go in </span><span style="font-family: "Courier New",Courier,monospace;">/usr/local/texlive/texmf-local</span>. I changed the <span style="font-family: "Courier New",Courier,monospace;">PATH</span> variable in <span style="font-family: "Courier New",Courier,monospace;">/etc/profile</span> (maybe I should have used <span style="font-family: "Courier New",Courier,monospace;">/etc/environment</span> instead, or in addition?) and logged out and back in again.<br />
<br />
To check my setup I copied some personal styles and classes.<br />
<br />
<div style="font-family: "Courier New",Courier,monospace;">
ftpmaint@millstone:~$ ls /usr/local/texlive/texmf-local/tex/latex/local<br /> charis.sty gentium.sty memo.cls present.sty<br /> conc.sty jh.sty mins.cls pyweb.cls</div>
<br />
I tried to remake the file database<span style="font-family: "Courier New",Courier,monospace;"><br /></span><br />
<br />
<pre style="font-family: "Courier New",Courier,monospace;"> ftpmaint at millstone:~$ sudo texhash
[sudo] password for ftpmaint:
texhash: Updating /usr/local/share/texmf/ls-R...
texhash: Updating /var/lib/texmf/ls-R-TEXMFMAIN...
texhash: Updating /var/lib/texmf/ls-R-TEXLIVE...
texhash: Updating /var/lib/texmf/ls-R...
texhash: Done. </pre>
<pre> </pre>
but after then issuing <span style="font-family: "Courier New",Courier,monospace;">kpsewhich conc.sty</span> failed. Why?<br />
<br />
Turns out (I am skipping over a great deal of head-scratching and googling here), on Ubuntu the sudo command was using the Ubuntu tex's <span style="font-family: "Courier New",Courier,monospace;">texhash</span> <br />
<pre> </pre>
<pre style="font-family: "Courier New",Courier,monospace;"> ftpmaint at millstone:~$ which texhash
/usr/local/texlive/2012/bin/i386-linux/texhash
ftpmaint at millstone:~$ sudo which texhash
/usr/bin/texhash
</pre>
<br />
rather than tug.org's because it has its own <span style="font-family: "Courier New",Courier,monospace;">PATH</span>.<br />
<br />
<pre style="font-family: "Courier New",Courier,monospace;"> ftpmaint at millstone:~$ echo $PATH
/usr/local/texlive/2012/bin/i386-linux:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
ftpmaint at millstone:~$ echo 'echo $PATH' | sudo sh
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
</pre>
<br />
Oops.<br />
<br />
I got around it by calling the program with its full path.<br />
<br />
<pre style="font-family: "Courier New",Courier,monospace;"> ftpmaint at millstone:~$ sudo /usr/local/texlive/2012/bin/i386-linux/texhash
texhash: Updating /usr/local/texlive/2012/texmf/ls-R...
texhash: Updating /usr/local/texlive/2012/texmf-config/ls-R...
texhash: Updating /usr/local/texlive/2012/texmf-dist/ls-R...
texhash: Updating /usr/local/texlive/2012/../texmf-local/ls-R...
texhash: Updating /usr/local/texlive/2012/texmf-var/ls-R...
texhash: Done.
</pre>
<br />
<h3>
The answer</h3>
<br />
The above was an answer, but it obviously wasn't <i>the </i>answer. Lars <a href="http://tug.org/pipermail/texhax/2012-August/019615.html">commented</a>, "On my systems I have a specific LaTeX user who owns the LaTeX
installation, thus I do not have to run anything as root." This seemed right.<br />
<br />
I created a new user <i>texlive</i> to own the material in <span style="font-family: "Courier New",Courier,monospace;">/usr/local/texlive</span>. <br />
<br />
<span style="font-family: "Courier New",Courier,monospace;"> ftpmaint at millstone:~$ cd /usr/local </span><br />
<div style="font-family: "Courier New",Courier,monospace;">
ftpmaint at millstone:~$ sudo chown -R ftpmaint:ftpmaint texlive</div>
<br />
<i>A comment about this user:</i> I don't want <i>texlive</i> to appear on the choices on the login screen so I gave this account a user id below 500: <span style="font-family: "Courier New",Courier,monospace;">sudo usermod -u 499 texlive</span> (I got the parameter 500 from <span style="font-family: "Courier New",Courier,monospace;">/etc/lightdm/users.conf</span>).<br />
<br />
Several people cautioned me to watch the umask of this user but because the system sets the default at <span style="font-family: "Courier New",Courier,monospace;">022</span> I was OK. <br />
<br />
Lars mentioned that he may have multiple TeX Live trees under <span style="font-family: "Courier New",Courier,monospace;">/usr/local/texlive</span>, say <span style="font-family: "Courier New",Courier,monospace;">/usr/local/texlive/2011</span> and <span style="font-family: "Courier New",Courier,monospace;">/usr/local/texlive2012</span>. He has a soft link that points to the current one.<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">texlive at millstone:~$ ln -s 2012 current </span><br />
<br />
I often have trouble remembering what command options to run, etc., so I like to put that stuff in <span style="font-family: "Courier New",Courier,monospace;">.sh</span> files. Here the soft link does its magic; no need to change the script when I add another tree.<br />
<div style="font-family: "Courier New",Courier,monospace;">
<br /></div>
<span style="font-family: "Courier New",Courier,monospace;"> ftpmaint@millstone:/usr/local/texlive$ ls -l</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> total 12</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> drwxr-xr-x 10 texlive texlive 4096 Aug 17 07:05 2012</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> lrwxrwxrwx 1 root root 4 Aug 16 17:47 current -> 2012</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> drwxr-xr-x 10 texlive texlive 4096 Aug 17 07:05 texmf-local</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> -rwxr--r-- 1 texlive texlive 181 Aug 16 17:48 update.sh</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> </span><br />
<span style="font-family: "Courier New",Courier,monospace;"> ftpmaint@millstone:/usr/local/texlive$ cat update.sh</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> #!/bin/bash</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> # Update the current TeX Live installation</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> # 2012-Aug-16 Jim Hefferon jhefferon@smcvt.edu</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> </span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> PATH=/usr/local/texlive/current/bin/i386-linux:$PATH</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> tlmgr update --all --self</span><br style="font-family: "Courier New",Courier,monospace;" /><br />
The only remaining hiccup is to remember the password for <i>texlive</i>. This is the kind of account that a person only uses every couple of months where I could easily forget. But I use a password keeper program <a href="http://www.keepassx.org/">KeePassX</a> to store my passwords so I put this user's information in there.<br />
<br />
<br />
Jim Hefferonhttp://www.blogger.com/profile/09292836035665054384noreply@blogger.com0tag:blogger.com,1999:blog-2961102759519912739.post-64614928358493288512012-03-21T17:37:00.000-07:002012-03-21T17:37:14.495-07:00Looking for a new Linux distToo bad. Ubuntu was good for a couple of years. Now, I just spent an hour online trying to spelunk how to disable the bootup sound. No one on the interwebs knows. It clearly should be in a menu. It <i>was</i> in a menu. But now it is not.<br />
<br />
I often get up at 4:30 and turn on the ham set, and the computer. My wife doesn't have to hear the bootup sound at that hour. But there appears to be no reasonable way to turn it off. <br />
<br />
This is not the first time I have spent a frustrating hour on such a task. I must have spent twenty of them in the last couple of months. Ubuntu <i>was</i> good, but now it is not.<br />
<br />
Ah well. Gotta get a new distro.Jim Hefferonhttp://www.blogger.com/profile/09292836035665054384noreply@blogger.com0tag:blogger.com,1999:blog-2961102759519912739.post-50623480135749145892011-09-08T13:12:00.000-07:002011-09-08T17:10:38.564-07:00Installing MicroPress's Computer Concrete fonts onto TeX Live under Linux I own the Computer Concrete fonts from <a href="http://www.micropress-inc.com/">MicroPress</a>. These are outline fonts so they look nice at any magnification. Because I use a concrete font in my Beamer presentations, the characters get blown up to a good size and I'd like them to show well, so I wanted to install these.<br />
<br />
I have Ubuntu 11.04 with a current TeX Live that I installed off the web. I looked in my local TeX directory <span style="font-family: "Courier New",Courier,monospace;">/usr/local/share/texmf/fonts</span> (I used this location instead of <span style="font-family: "Courier New",Courier,monospace;">/usr/share/texmf</span> because it will survive if I install a later version of TeX Live.)<br />
<br />
I loaded the vendor's CD into the machine, where it showed up as <span style="font-family: "Courier New",Courier,monospace;">/media/CFonts/CFONTS.dir</span>. I see directories for <span style="font-family: "Courier New",Courier,monospace;">afm</span>, <span style="font-family: "Courier New",Courier,monospace;">inf</span>, <span style="font-family: "Courier New",Courier,monospace;">pfb</span>, <span style="font-family: "Courier New",Courier,monospace;">pfm</span>, <span style="font-family: "Courier New",Courier,monospace;">setup</span>, and <span style="font-family: "Courier New",Courier,monospace;">tfm</span>. There are also some .zip files containing LaTeX styles that I don't think I need as they come with TeX Live.<br />
<br />
1) As sudo, I copied the files from <span style="font-family: "Courier New",Courier,monospace;">/media/CFonts/CFONTS.dir/afm</span> and <span style="font-family: "Courier New",Courier,monospace;">/media/CFonts/CFONTS.dir/inf</span> into <span style="font-family: "Courier New",Courier,monospace;">/usr/local/share/texmf/fonts/afm/public/cfonts</span> after making that directory. I was told to put the <span style="font-family: "Courier New",Courier,monospace;">inf</span> stuff in there also by the <a href="http://mirror.ctan.org/tex-archive/tds/tds.html">TeX Directory Standard document</a>. I made the file permissions <span style="font-family: "Courier New",Courier,monospace;">rw</span> for the owner root, <span style="font-family: "Courier New",Courier,monospace;">r</span> for the group, and <span style="font-family: "Courier New",Courier,monospace;">r</span> for others.<br />
<br />
2) I copied the files from the CD's <span style="font-family: "Courier New",Courier,monospace;">pfb</span> and <span style="font-family: "Courier New",Courier,monospace;">pfm</span> directories into <span style="font-family: "Courier New",Courier,monospace;">/usr/local/share/texmf/fonts/type1/public/cfonts</span> after making that directory. As above, I combined the file types in the one directory on the advice of the TDS document, and changed the permissions as above.<br />
<br />
3) I copied the files from the CD's <span style="font-family: "Courier New",Courier,monospace;">tfm</span> directory into <span style="font-family: "Courier New",Courier,monospace;">/usr/local/share/texmf/fonts/tfm/public/cfonts</span> after making the directory, and I changed the file permissions as above.<br />
<br />
4) I copied the CD's <span style="font-family: "Courier New",Courier,monospace;">/media/CFonts/CFONTS.dir/setup/dvips/CONCRETE.MAP</span> into <span style="font-family: "Courier New",Courier,monospace;">/usr/local/share/texmf/fonts/map/dvips/cfonts/oncrete.map</span> after making that directory. I changed its file permissions.<br />
<br />
5) On the advice of <a href="http://www.tug.org/fonts/fontinstall.html">TUG's font installation page</a>, from the directory <span style="font-family: "Courier New",Courier,monospace;">/usr/local/share/texmf/fonts/map/dvips/cfonts</span> I ran "<span style="font-family: "Courier New",Courier,monospace;">sudo texhash</span>" and also "<span style="font-family: "Courier New",Courier,monospace;">sudo updmap-sys --enable Map=concrete.map</span>"<br />
<br />
It worked. The next time I compiled my <span style="font-family: "Courier New",Courier,monospace;">.tex</span> to a <span style="font-family: "Courier New",Courier,monospace;">.pdf</span> I could see in the File > Properties > Fonts tab that the cc fonts were included as Type 1.<br />
<br />
By the way, I use this LaTeX style to get the concrete fonts. <br />
<br />
<div style="font-family: "Courier New",Courier,monospace;">% From Walter Schmidt post on ctt Jan 10 2005</div><div style="font-family: "Courier New",Courier,monospace;">\renewcommand{\rmdefault}{ccr} </div><div style="font-family: "Courier New",Courier,monospace;">\usepackage[euler-digits]{eulervm} </div><div style="font-family: "Courier New",Courier,monospace;">\linespread{1.04} % approximately </div><div style="font-family: "Courier New",Courier,monospace;">\renewcommand{\bfdefault}{sbc}</div><div style="font-family: "Courier New",Courier,monospace;">% \usepackage{mathdots}</div><br />
Put it in <span style="font-family: "Courier New",Courier,monospace;">/usr/local/share/texmf/tex/latex/local/conc.sty</span> and run "<span style="font-family: "Courier New",Courier,monospace;">sudo texhash</span>" to have it be available as a normal LaTeX style.Jim Hefferonhttp://www.blogger.com/profile/09292836035665054384noreply@blogger.com0tag:blogger.com,1999:blog-2961102759519912739.post-24264369431878261202009-09-24T07:09:00.000-07:002009-09-24T18:02:30.142-07:00Suckerfish menus in DjangoI have some data that I keep in a tree, and I wanted to see if people could browse it in a tree-like interface. All in Django, of course.<br /><br />(Let me apologize for any errors in transcription below; this is my first time using blogger.)<br /><br />I'm very wary of cross-browser incompatibilities. So any solution with a lot of Javascript, etc., leaves me worried that a year from now Safari will become incompatible and I'll be left racing to catch up. That'd be bad.<br /><br />But suckerfish menus are based on CSS which is at least a fairly wide standard. I used a number of web sites as guides, but one that was especially handy was <a href="http://www.alistapart.com/articles/dropdowns/">A List Apart.</a><br /><br />Let me first cover what the data is. CTAN has perhaps four thousand packages. People should be able to browse them by some reasonable characterization: for instance, maybe "Document Styles > Books > Publisher Styles" would pop up a bunch of packages in that category.<br /><br />I'd like to allow a number of different characterizations. For instance, Juergen Fenn has a good one that he uses in the <a href="http://mirror.ctan.org/help/Catalogue/bytopic.html">TeX Catalogue</a> and I have another. (Actually, my idea is to give each package a primary characterization and then a number of secondary characterizations, where the tree of primary characterizations is the same as the tree of secondary characterizations. For instance, a linguistics package may also contain a font of special symbols so the primary would be by subject area, but the secondary would be in fonts.)<br /><br />I choose to store the characterization data using <a href="http://code.google.com/p/django-mptt/">mptt</a> (because at the time I was looking it seemed to be all that fit, but it has worked for me so I stuck with it). I call the different characterizations "dimensions" and so my <span style="font-style: italic;">models.py</span> has this.<br /><pre><br /> class Dimen(models.Model):<br /> dimen=models.CharField(<br /> max_length=32,<br /> null=False,<br /> blank=False,<br /> primary_key=True,<br /> help_text="What dimension is the package being characterized by?")<br /> description=models.CharField(<br /> max_length=72,<br /> null=False,<br /> blank=False,<br /> db_index=False,<br /> help_text="Description of this dimension.")<br /><br /> def __unicode__(self):<br /> return self.dimen<br /><br /> class Meta:<br /> pass<br /></pre><br /><br />and also this.<br /><br /><pre><br />class Characterizations(models.Model):<br /> parent = models.ForeignKey('self', null=True, blank=True, related_name='children')<br /> dimen=models.ForeignKey(<br /> Dimen,<br /> related_name='characterizations_fk_dimen',<br /> null=True,<br /> blank=False,<br /> db_index=True,<br /> help_text="Dimension of characterization")<br /> title=models.CharField(<br /> max_length=72,<br /> null=False,<br /> blank=False,<br /> # unique=True,<br /> db_index=True,<br /> help_text="Title of this node (short)")<br /> full_title=models.TextField( # denormalize for speed<br /> null=False,<br /> blank=False,<br /> # unique=True,<br /> db_index=True,<br /> help_text="Title of this node, from the root")<br /> description=models.CharField(<br /> max_length=72*24,<br /> null=False,<br /> blank=False,<br /> db_index=True,<br /> help_text="Description of this node (a paragraph)")<br /> path=models.CharField(<br /> max_length=100,<br /> null=True,<br /> blank=True,<br /> db_index=True,<br /> help_text="Where full_title is a > b > c this is a/b/c"<br /> )<br /><br /> def __unicode__(self):<br /> return repr(unicode(self.full_title))<br /><br /> class Meta:<br /> ordering=['id']<br /><br /><br />mptt.register(Characterizations)<br /></pre><br />(note that last line; it is not part of the class definition). Note the denormalization fields in the model class-- searching by url, for instance, is a help.<br /><br />Finally, the packages are characterized in this way.<br /><pre><br />class Characterization(models.Model):<br /> characterization=models.ForeignKey(<br /> Characterizations,<br /> related_name='characterization_fk_char_id',<br /> null=False,<br /> blank=False,<br /> db_index=True,<br /> help_text="Identifier of node in tree")<br /> pkg_id=models.ForeignKey(<br /> Package,<br /> related_name='characterization_fk_pkg_id',<br /> null=True,<br /> blank=False,<br /> db_index=True,<br /> help_text="Identifier of package")<br /><br /> def __unicode__(self):<br /> return self.pkg_id.pkg_id<br /><br /> class Meta:<br /> pass<br /></pre><br />To populate the database, I can't put a <span style="font-style: italic;">.sql</span> file in the <span style="font-style: italic;">sql/</span> directory of my project because mptt has fields that it uses for bookkeeping and I don't know what values it likes there. So I wrote a script <span style="font-style: italic;">characterizations.py</span> to populate it. I have to import the relevant Django stuff<br /><br /><pre><br />import django.core, django.core.management<br />import az.settings<br />import django.db<br />from django.db import models<br />from django import forms<br /></pre><br />and some stuff from my project<br /><pre><br />import az, az.pkgs<br />from az.pkgs.models import LicenseTypes, Languages, Package, Maintainers, PackageHistory, PackageText, License, OnCtan, OffCtan, RelatedPackages, Keywords, Keyword, Authors, Author, Distributions, Distribution, TexLiveTypes, TexLivePackages, TexLiveCatalogue, Upload, Dimen, Characterizations, Characterization<br />from az.util import util<br /></pre><br />and then I make use of a couple of add-a-node routines. The idea is to run code that does this (I'm showing just a small part).<br /><pre><br />def buildPrimaryByFunctionTree():<br /> """Build the primary by-function trees<br /> """<br /> p=Dimen.objects.get(dimen__exact='primary')<br /> # ------------------ Top -------------------------<br /> pRoot=Characterizations.objects.create(<br /> dimen=p,<br /> title='',<br /> full_title='',<br /> description=p.description)<br /> pRoot.parent=None<br /> pRoot.save()<br /> # ----------- Top > Document types -----------------<br /> Document_types=addNode(pRoot,'Document types',<br /> 'Everything from books and articles to memos and letters. Also here are documents for specific publishers.')<br /> # ----------- Top > Document types > Books -----------------<br /> Books=addNode(Document_types,'Books',<br /> 'Books.')<br /> Publisher_styles=addNode(Books,'Publisher styles',<br /> 'Styles for books from specific publishers.')<br /> Others_books=addNode(Books,'Others',<br /> 'Other packages.')<br /></pre><br />The add-a-node routines were weird:<br /><pre><br />BRANCH_SEPARATOR=' > ' # separate parts of a branch; should not occur in titles<br />def getBranchTitle(n):<br /> """From the node, get the branch title, like 'Top > Fonts' (assumes<br /> n.full_title is not available).<br /> """<br /> # Like: return n.full_title but get it for setting in the dB<br /> ancestorTitles=[a.title for a in n.get_ancestors(ascending=False)]<br /> ancestorTitles.append(n.title)<br /> branchTitle=BRANCH_SEPARATOR.join(ancestorTitles[1:])<br /> return branchTitle<br /></pre><br />and<br /><pre><br />def getRootNode(dimen_str):<br /> """Get the root node of the tree with the given dimen<br /> """<br /> nodeQ=Characterizations.objects.filter(dimen__exact=dimen_str)<br /> if not(nodeQ):<br /> return None<br /> return nodeQ[0].get_root()<br /></pre><br />and<br /><pre><br />def getNodeFromBranchTitle(branchTitle,dimen_str):<br /> """From the branch title, like 'Top > Fonts', get the node.<br /> """ n=Characterizations.objects.filter(dimen__dimen__exact=dimen_str).get(full_title__exact=branchTitle)<br /> return n<br /></pre><br />were reasonable, but this one<br /><pre><br />def addNode(parentNode,title,description):<br /> # I don't get this. I appear to have to fetch the parent node so that<br /> # it is the most recent thing on mptt's mind. See mptt's doctests.py<br /> # in the section marked "Creation"<br /> pN=Characterizations.objects.get(<br /> id=parentNode.id)<br /> childNode=Characterizations(parent=pN,<br /> dimen=pN.dimen,<br /> title=title,<br /> full_title=title,<br /> description=description)<br /> childNode.insert_at(pN,<br /> position='first-child',<br /> commit=False)<br /> childNode.full_title=getBranchTitle(childNode)<br /> childNode.path=util.path_components_to_url('',childNode.full_title.split(BRANCH_SEPARATOR),'')<br /> childNode.save()<br /> return childNode<br /></pre><br />was so strange that I thought I was doing it wrong. Anyway, it correctly populates the tree.<br /><br />So now I have a tree. I need to offer the visitor the chance to pick a dimension, and then display the resulting tree using suckerfish menus.<br /><br />In<span style="font-style: italic;"> urls.py</span> I put<br /><pre><br />urlpatterns += patterns('az.views',<br /> (r'^characterization/choose_dimen/?$','characterization.choose_dimen'),<br /> (r'^characterization/?(?P<pth>.*)$','characterization.main'),<br /></pre><br />and then I needed a <span style="font-style: italic;">views/characterization.py .</span> I also needed to make a widget, a field, and a form.<br /><br />The widget required some fiddling. I feed it choices that are pairs<br />(url_path, [list of tree node labels]) . It uses the length of the list in the second entry to decide if it needs to go to a child node, or if this is a sibling node, etc. Then it renders a simple html structure like this (based on the discussion from A List Apart; see above).<br /><pre id="line48"><br /><ul id="sfish"><br /> <li><a href="/characterization/primary/">pick one</a><br /> <ul><li><a href="/characterization/primary/"></a><br /> </li><li><a href="/characterization/primary/document-types/">Document types</a><br /> <ul><li><a href="/characterization/primary/document-types/books/">Books</a> <br /> <ul><li><a href="/characterization/primary/document-types/books/publisher-styles/">Publisher styles</a></li><br /> <li><a href="/characterization/primary/document-types/books/others/">Others</a><br /> </li></ul><br /> </li><li><a href="/characterization/primary/document-types/articles/">Articles</a><br /></pre><br />Here is the widget code.<br /><pre><br />class PickCharacterizationWidget(forms.RadioSelect):<br /> def render(self,name,value,attrs=None,choices=()):<br /> """Display the tree in a form suitable for suckerfish menus<br /> choices list of pairs (string, list of strings) where the first<br /> is a link to the page you go to if you choose this, and<br /> list of strings is a list like ['a','b','c'] to represent<br /> 'a > b > c'<br /> """<br /> INDENT=" "*4<br /> r=["<ul id="'sfish'">"]<br /> prior_ft_list=[None]<br /> for lnk,ft_list in self.choices:<br /> # print "ft is ",ft<br /> # r.append("\n++"+ft)<br /> t,s=len(ft_list),len(prior_ft_list)<br /> if t>s:<br /> # r.append("")<br /> r.append("\n"+INDENT*t+"<ul>")<br /> elif t==s:<br /> if prior_ft_list[-1]: # not very first entry<br /> r.append("")<br /> r.append("\n"+INDENT*t)<br /> elif t<s: <br /> for i in range(s-t):<br /> r.append("\n"+INDENT*(s-i)+"</li></ul>")<br /> r.append("\n"+INDENT*t)<br /> r.append("</li><a href="http://www.blogger.com/%s">>" % (lnk,)+ft_list[-1]+"</a>")<br /> prior_ft_list=ft_list<br /> for i in range(len(prior_ft_list)-len(ft_list)):<br /> if i>1:<br /> r.append("</li></ul>")<br /> else:<br /> r.append("")<br /> r.append("\n"+INDENT+"\n")<br /> return "".join(r)<br /></pre><br />Note that this all needs CSS to work. Here is the relevant section of mine (it ain't beautiful).<br /><pre><br />/* See http://htmldog.com/articles/suckerfish/dropdowns/ */<br />#sfish, #sfish ul { /* all lists */<br /> padding: 0;<br /> margin: 0;<br /> list-style: none;<br /> float : left;<br /> width : 11em;<br /> }<br /> <br />#sfish li { /* all list items */<br /> position : relative;<br /> float : left;<br /> line-height : 1.25em;<br /> margin-bottom : -1px;<br /> width: 11em;<br /> }<br /> <br />#sfish li ul { /* second-level lists */<br /> position : absolute;<br /> left: -999em;<br /> margin-left : 21.05em;<br /> margin-top : -1.35em;<br /> }<br /> <br />#sfish li ul ul { /* third-and-above-level lists */<br /> left: -999em;<br /> }<br /> <br />#sfish li a {<br /> width: 20em;<br /> w\idth : 20em;<br /> display : block;<br /> color : black;<br /> font-weight : normal;<br /> text-decoration : none;<br /> background-color : white;<br /> border : 1px solid black;<br /> padding : 0 0.5em;<br /> }<br /> <br />#sfish li a:hover {<br /> color : black;<br /> background-color : #bababa;<br /> }<br /> <br />#sfish li:hover ul ul,<br />#sfish li:hover ul ul ul,<br />#sfish li.sfhover ul ul,<br />#sfish li.sfhover ul ul ul<br />#sfish li.sfhover ul ul ul ul<br /> {<br /> left: -999em;<br /> }<br /> <br />#sfish li:hover ul,<br />#sfish li li:hover ul,<br />#sfish li li li:hover ul,<br />#sfish li li li li:hover ul,<br />#sfish li.sfhover ul,<br />#sfish li li.sfhover ul,<br />#sfish li li li.sfhover ul<br />#sfish li li li li.sfhover ul<br /> { /* lists nested under hovered list items */<br /> left: auto;<br /> }<br /> <br />#content {<br /> margin-left : 12em;<br /> }<br /></pre><br />There is also a little bit of Javascript.<br /><br /><pre><br />sfHover = function() {<br /> var sfEls = document.getElementById("nav").getElementsByTagName("LI");<br /> for (var i=0; i<sfEls.length; i++) {<br /> sfEls[i].onmouseover=function() {<br /> this.className+=" sfhover";<br /> }<br /> sfEls[i].onmouseout=function() {<br /> this.className=this.className.replace(new RegExp(" sfhover\\b"), "");<br /> }<br /> }<br />}<br />if (window.attachEvent) window.attachEvent("onload", sfHover);<br /></pre><br /><br />I don't understand JavaScript so I can't vouch for it, but it came from A List Apart so I threw it in.<br /><br />Here is the field that makes the choices.<br /><pre><br />from az.pkgs.data.characterizations import BRANCH_SEPARATOR<br />DEFAULT_CHARACTERIZATION_DIMENSION='primary'<br />class PickCharacterizationField(forms.ChoiceField):<br /> """The user picks one characterization to look at.<br /> """<br /> def __init__(self, dimen=None, choices=(), required=True, widget=widgets.PickCharacterizationWidget, label=None, initial=None, help_text=None):<br /> util.printFlush("forms.py PickCharacterizationField() dimen="+repr(dimen))<br /> if dimen:<br /> self.dimen=dimen<br /> else:<br /> try:<br /> self.dimen=initial['dimen']<br /> except:<br /> self.dimen=DEFAULT_CHARACTERIZATION_DIMENSION<br /> if not(choices):<br /> choices=self.get_characterizations(self.dimen)<br /> super(PickCharacterizationField, self).__init__(choices=choices, required=required, widget=widget, label=label, initial=initial, help_text=help_text)<br /> self.widget.choices=self.choices<br /> <br /> def get_characterizations(self,dimen,separator=BRANCH_SEPARATOR):<br /> """Return a list from a traversal of the tree:<br /> (node (subnode1, (..)), (subnode2, ())..)<br /> dimen string The Dimen.dimen field pointed to by this characterization<br /> separator string How fields are separated in the full_title's<br /> """<br /> try:<br /> d=Dimen.objects.get(dimen__exact=dimen)<br /> nodes=Characterizations.objects.filter(dimen=d)<br /> except:<br /> nodes=[]<br /> node_list=[n.full_title.split(separator) for n in nodes] choices=[(util.path_components_to_url(u'/characterization/'+dimen+u'/',ft_list,u'/'),ft_list) for ft_list in node_list]<br /> choices=[(x,['pick one']+y) for x,y in choices]<br /> choices=[(u'/characterization/'+dimen+u'/',['pick one'])]+choices<br /> return choices<br /></pre><br />Now came the main question: how to get the choices into the widget? I had to <a href="http://groups.google.com/group/django-users/browse_frm/thread/1814ea904afc9814#">ask on the Django Users list</a> and a nice person there helped me out (thanks to you, Daniel Roseman!). I made a form where the initialization function reaches out and touches the field.<br /><pre><br />class PickCharacterizationForm(forms.Form):<br /> def __init__(self,*args,**kwargs):<br /> dimen=kwargs.pop('dimen',None)<br /> super(PickCharacterizationForm,self).__init__(*args,**kwargs)<br /> pick_field=self.fields['pick']<br /> if dimen:<br /> pick_field.dimen = dimen<br /> pick_field.choices=pick_field.get_characterizations(dimen)<br /> <br /> pick=PickCharacterizationField(required=True,help_text='Select a characterization',widget=widgets.PickCharacterizationWidget)<br /><br /> class Media:<br /> js=('js/sfish/sfhover.js',)<br /></pre><br />And it works! I have two routines in <span style="font-style: italic;">characterization.py</span><br />that either search for the list of dimensions.<br /><pre>def choose_dimen(req,tmplt=CHARACTERIZATION_TEMPLATE):<br /> """Allow a person to choose a dimension for the characterization<br /> dimen string Default choice<br /> """<br /> pageis=PageNameMap(PAGES,initialPageName='choose_dimen')<br /> dI=Dimen.objects.all()<br /> dimen_triples=[(d.dimen,d.dimen.capitalize(),d.description) for d in dI]<br /> d={'pageis':pageis,<br /> 'dimen_triples':dimen_triples,<br /> 'breadcrumbs':breadcrumbs(None,None),<br /> }<br /> ctext=Context(d)<br /> return render_to_response(tmplt,ctext)<br /></pre><br />or else invoke the form.<br /><pre><br />def main(req,pth=None,tmplt=CHARACTERIZATION_TEMPLATE):<br /> pageis=PageNameMap(PAGES,initialPageName='main')<br /> d={'pageis':pageis,<br /> 'breadcrumbs':breadcrumbs(None,None),<br /> }<br /> ctext=Context(d)<br /> parts=pth.split('/')<br /> try:<br /> dimen=parts[0].strip()<br /> cdr=parts[1:]<br /> except:<br /> dimen,cdr=None,None<br /> if not(dimen):<br /> return HttpResponseRedirect('/characterization/choose_dimen/')<br /> try:<br /> dI=Dimen.objects.get(dimen__exact=dimen)<br /> dimen_description=dI.description<br /> except Exception, err:<br /> dimen=re.sub('[a-zA-Z0-9_\-]','',dimen) # safe for display on page<br /> dimen_description=None<br /> if not(dI):<br /> return HttpResponseRedirect('/characterization/choose_dimen/')<br /> f0=PickCharacterizationForm(dimen=dimen)<br /> forms=[f0]<br /> # See which packages are characterized in this way<br /> pkg_list=[]<br /> if cdr:<br /> cQ=Characterization.objects.filter(characterization__path__exact='/'.join(cdr))<br /> for cI in cQ:<br /> pkg_list.append(cI.pkg_id.pkg_id)<br /> # Cash out<br /> ctext['forms']=forms<br /> ctext['dimen']=dimen<br /> ctext['dimen_description']=dI.description<br /> ctext['full_title']=' > '.join(cdr)<br /> ctext['pkg_list']=pkg_list<br /> # Finish<br /> return render_to_response(tmplt,ctext)<br /></pre><br />It is all still rough, and I haven't said what some of the routines do (such as <span style="font-style: italic;">PageNameMap</span>), but perhaps this might help someone who is looking for a place to start with suckerfish and Django.<br /><br />In the end, though, my menus proved to be too long for the page. The slide off the bottom of the page and so are very hard to use. Oh well.<br /><br /><br /><br /><br /><br /><blockquote><span style="display: block;" id="formatbar_Buttons"><span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"><img src="http://www.blogger.com/img/blank.gif" alt="Link" class="gl_link" border="0" /></span></span></blockquote><span style="display: block;" id="formatbar_Buttons"><span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"></span></span>Jim Hefferonhttp://www.blogger.com/profile/09292836035665054384noreply@blogger.com0tag:blogger.com,1999:blog-2961102759519912739.post-18905409126579935472008-11-26T15:13:00.000-08:002008-11-26T15:14:20.338-08:00First blog postThis is a test of blogger.Jim Hefferonhttp://www.blogger.com/profile/09292836035665054384noreply@blogger.com0