воскресенье, 28 ноября 2010 г.

LaTeX и шрифт 14 пунктов

Чтобы использовать шрифт размером больше 12 пунктов, необходимо установить пакет extsizes. Размер шрифта указывается при объявлении класса документа.

\documentclass[14pt]{extarticle}

При использовании нестандартных шрифтов рекомендуется использовать нестандарные классы, такие как extarticle.

При трасляции может быть выдано предупреждение
Package ExtSizes Warning: It is better to use one of the extsizes classes, if you can.

Оно означает, что где-то в прамбуле явно через usepackage подключается пакет extsizes. Эту команду нужно убрать. Подробности можно найти здесь.

суббота, 27 ноября 2010 г.

BibTeX, utf8 и стили gost

У BibTeX из TeX Live возникает проблема с кодировкой utf8 при использовании стиля gost78s, которая может касаться и других стилей gost: вместо инициалов авторов подставляются неюникодные символы, что приводит к ошибке трансляции.
! Package inputenc Error: Unicode char \u8:�. not set up for use with LaTeX.

Это можно решить тем же способом, что и проблему с MiKTeX: необходимо заменить f. (f с точкой) на ff (две f). В файле /usr/share/texmf-texlive/bibtex/bst/gost/gost780s.bst эта подстрока встречается два раза. Чтобы не менять системный файл, этот файл можно скопировать в рабочую папку, сменив имя, чтобы LaTeX не спутал его с системным.

Найдено здесь.

вторник, 9 ноября 2010 г.

WCF: аутентификация по логину и паролю. Ссылки

http://codebetter.com/blogs/peter.van.ooijen/archive/2010/03/22/a-simple-wcf-service-with-username-password-authentication-the-things-they-don-t-tell-you.aspx

http://codebetter.com/blogs/peter.van.ooijen/archive/2010/04/09/a-simple-wcf-service-with-username-password-authentication-the-things-you-told-me.aspx

Как запустить просмотр pdf из Makefile в Windows

Q: Как сделать так, чтобы цель Makefile'а под Windows запускала pdf'ку в программе по умолчанию?

A:
view: $(PDF)
  cmd /c start $(PDF)

LaTeX: единый Makefile для Windows и Linux

Бывает необходимо собирать документы LaTeX и на Windows и на Linux. За счет использования MiKTeX и GnuWin можно не беспокоится о платформозависимости, но остается один мелкий нюанс: создание директории для сборки командой mkdir. В linux'е она принимает ключ -p, позволяя создать несколько вложенных директорий за раз и не падать с ошибкой, если директория уже существует. В винде этот ключ рассматривается как имя папки и повторный запуск make'а прерывает сборку с ошибкой, что папка уже существует. Для решения этой проблемы нужно реализовать ветвление по типу ОС.

...

UNAME = $(shell uname)
ifeq ($(UNAME), windows32)
  MKDIR_COMMAND = if not exist $(BUILD_DIR) mkdir $(BUILD_DIR)
else
  MKDIR_COMMAND = mkdir -p $(BUILD_DIR)
endif

all: $(PDF)

$(PDF): $(TEX) $(STYLE)
  $(MKDIR_COMMAND)
  pdflatex -output-directory=$(BUILD_DIR) $(TEX)
  pdflatex -output-directory=$(BUILD_DIR) $(TEX)
  mv $(BUILD_DIR)/$(PDF) .

...

суббота, 6 ноября 2010 г.

Установка PSCyr под TeX Live

Google на вопрос об установке PSCyr под linux отвечает массой странных ссылок, предлагающих превратить Убунту в Слаку. Самая адекватная, на мой взгляд, инструкция находится здесь. Позволю себе ее скопировать, приведя ее в соответствие тому, что есть сейчас.

  1. Нужно достать PSCyr. На данный момент последняя версия, доступная тут — 0.4d-beta9. Скачиваем файлы pscyr-0.4-beta9exp2-tex.tar.gz и pscyr-0.4-beta9exp2-type1.tar.gz.
  2. В домашнем каталоге необходимо создать директорию с именем .texmf-var. В этом каталоге будут храниться пользовательские настройки, что довольно удобно: дополнительные пакеты может ставить и простой пользователь, не только root.
  3. Теперь извлекаем из скачанных архивов в ~/.texmf-var/ каталоги fonts и tex. Каталог dvips извлекать не нужно!
  4. В каталоге ~/.texmf-var/fonts/ необходимо создать два каталога: map и enc. Здесь хранится информация осоответствии имен файлов и имен шрифтов, а также о кодировках шрифтов.
  5. Теперь настал черед директории dvips из архивов. Необходимо распаковать файл dvips/pscyr/pscyr.map в каталог ~/.texmf-var/fonts/map/, а файлы dvips/pscyr/t2a.enc и dvips/pscyr/t2d.enc в каталог ~/.texmf-var/fonts/enc/. Тем самым, необходимые для работы PSCyr файлы оказываются на нужных местах. Остается только указать xdvi и dvips, чтобы они их использовали.
  6. Изменение конфигурационных файлов. Увы, тут без прав root не обойтись. В файл /etc/texmf/xdvi/xdvi.cfg нужно добавить строку dvipsmap pscyr.map. А в файл /etc/texmf/dvips/config/config.ps строку p +pscyr.map. После чего от имени пользователя выполнить команду texhash. PSCyr должен работать с этого момента.

Проверено на Ubuntu 10.10 Maverick Meerkat, texlive версии 2009-10.

Update: лучше пользоваться этим.

Ubuntu 10.10 Maverick Meerkat. Настройка grub

Адаптируем заметку Ubuntu Karmic. Настройка Grub к последней версии дистрибутива — Maverick Meerkat.

Касательно файла /etc/default/grub все осталось без изменений, необходимо изменить указанные ниже настройки:
  • GRUB_TIMEOUT=5 — время показа меню, 5 секунд.
  • раскомментировать GRUB_DISABLE_LINUX_RECOVERY="true" для отключения recovery пунктов меню.

Для отключения вызова memtest'а с выводом на последовательную консоль необходимо привести файл /etc/grub.d/20_memtest86+ в следующий вид:
#!/bin/sh
set -e

if [ -f /usr/lib/grub/grub-mkconfig_lib ]; then
  . /usr/lib/grub/grub-mkconfig_lib
  LX=linux16
elif [ -f /usr/lib/grub/update-grub_lib ]; then
  . /usr/lib/grub/update-grub_lib
  LX=linux
else
  # no grub file, so we notify and exit gracefully
  echo "Cannot find grub config file, exiting." >&2
  exit 0
fi

# We can't cope with loop-mounted devices here.
case ${GRUB_DEVICE_BOOT} in
  /dev/loop/*|/dev/loop[0-9]) exit 0 ;;
esac

prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | sed -e "s/^/\t/")"

if test -e /boot/memtest86+.bin ; then
  MEMTESTPATH=$( make_system_path_relative_to_its_root "/boot/memtest86+.bin" )
  echo "Found memtest86+ image: $MEMTESTPATH" >&2
  cat << EOF
menuentry "Memory test (memtest86+)" {
EOF
  printf '%s\n' "${prepare_boot_cache}"
  cat << EOF
    $LX $MEMTESTPATH
}
EOF
fi
На закомментированные строки в конце файла (начинающиеся с #) можно не обращать внимания. Код, который следует поместить в файл /etc/grub.d/08_windows_7, представлен ниже. Новый файл должен иметь исполняемый бит.
#! /bin/sh
set -e

prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib

. ${libdir}/grub/grub-mkconfig_lib

if [ -z "`which os-prober 2> /dev/null`" -o -z "`which linux-boot-prober 2> /dev/null`" ] ; then
  # missing os-prober and/or linux-boot-prober
  exit 0
fi

OSPROBED="`os-prober | tr ' ' '^' | paste -s -d ' '`"
if [ -z "${OSPROBED}" ] ; then
  # empty os-prober output, nothing doing
  exit 0
fi

for OS in ${OSPROBED} ; do
  DEVICE="`echo ${OS} | cut -d ':' -f 1`"
  LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`"
  LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`"

  if [ -z "${LONGNAME}" ] ; then
    LONGNAME="${LABEL}"
  fi

  if [ "x${LONGNAME}" = "xWindows 7 (loader)"  ]; then
    echo "Found Windows 7" >&2
    cat << EOF
menuentry "Windows 7" {
EOF
    save_default_entry | sed -e "s/^/\t/"
    prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"
    cat << EOF
  chainloader +1
}
EOF
  fi
done
Теперь необходимо внести изменения в файл /etc/grub.d/30_os-prober, что он не находил Windows 7. Файл большой, поэтому приведем только часть кода, начинающуюся со 149 строки. Необходимо добавить в файл последние 4 приведенные здесь строки:
for OS in ${OSPROBED} ; do
  DEVICE="`echo ${OS} | cut -d ':' -f 1`"
  LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`"
  LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`"
  BOOT="`echo ${OS} | cut -d ':' -f 4`"

  if [ -z "${LONGNAME}" ] ; then
    LONGNAME="${LABEL}"
  fi

  if [ "x${LONGNAME}" = "xWindows 7 (loader)"  ]; then
    echo "Found Windows 7, skipping" >&2
    continue
  fi
После внесения все изменений необходимо отдать команду sudo update-grub:
user@host:/etc/grub.d$ sudo update-grub
Generating grub.cfg ...
Found Windows 7
Found linux image: /boot/vmlinuz-2.6.35-22-generic
Found initrd image: /boot/initrd.img-2.6.35-22-generic
Found memtest86+ image: /memtest86+.bin
Found Windows 7, skipping
done
После этого загрузочное меню должно принять вид
  • Windows 7
  • Ubuntu
  • Memtest

По умолчанию будет загружаться Windows 7.