05.28.08
Вертикальное выравнивание и объединение ячеек таблицы в latex
Задача: Ценрировать текст в ячейке таблицы (окружение tabular) по вертикали.
Решение:
Используем пакет multirow. Имеется два случая.
- Необходимо объединить несколько ячеек таблицы. Для этого используется команда
\multirow{row}*{text}, которая создает ячейку, содержащуюtextи объединяющуюrowстрок.
Существует так же вариант команды\multirow{row}{width}*{text}, где задается ширинаwidthячейки. - Нужно центрировать текст по вертикали в одной строке. Воспользуемся опцией
m{width}по центру которой необходимо выровнять всю строку таблицы.
Пример: Код, идущий ниже, создает две таблицы. В первой объединяются ячейки по вертикали, во второй — текст в них центрируется по наиболее высокой ячейке.
\documentclass[a4paper, 12pt]{article}
\usepackage{multirow}
\usepackage{array}\begin{document}
We want to centre text in table cells:
\begin{center}
\begin{tabular}{clc}
\hline
Object & Behaviours & Examples \\
\hline
\multirow{3}{Metals} & conduct current & Fe \\
\cline{2-3}
& solid & Cu \\
\cline{2-3}
& strong & Al \\
\hline
\multirow{2}*{Dielectrics} & may be gaseous & Air \\
\cline{2-3}
& may be solid & Plastics \\
\hline
\end{tabular}
\end{center}
\begin{center}
\begin{tabular}{cm{3cm}c}
\hline
Object & Behaviours & Examples \\
\hline
Metals & Metals can be shine and strong. It conducts current well. & Al \\
\hline
Semiconductors & Conductiviti of semiconductors increase with increasing of temperature. & Ge \\
\hline
\end{tabular}
\end{center}
We can do it!
\end{document}
Источник: Lapo Filippo Mori, Tables in LATEX2(epsilon): Packages and Methods, The PracTEX Journal, 2007, No. 1.
05.25.08
Вопрос мэру
Какого было тратить миллионы на выборы в День Киева и даже не разогнать тучи над Городом в этот день?! Или это такой черный юмор?
05.14.08
alacarte и Ubuntu
Проблема: Сидел себе и редактировал гномовскую менюшку программ, как вдруг все свернулось и отказалось открывать ее. При чем иксовый интерфейс правки меню в Система -> Параметры -> Главное меню отказался запускаться, а в консоли (он, оказывается, называется alacarte) выдал следующее:
$ alacarte
Traceback (most recent call last):
File "/usr/bin/alacarte", line 36, in
main()
File "/usr/bin/alacarte", line 32, in main
app = MainWindow(datadir, version, sys.argv)
File "/usr/lib/python2.5/site-packages/Alacarte/MainWindow.py", line 49, in __init__
self.editor = MenuEditor()
File "/usr/lib/python2.5/site-packages/Alacarte/MenuEditor.py", line 36, in __init__
self.__loadMenus()
File "/usr/lib/python2.5/site-packages/Alacarte/MenuEditor.py", line 46, in __loadMenus
self.applications.dom = xml.dom.minidom.parse(self.applications.path)
File "/usr/lib/python2.5/xml/dom/minidom.py", line 1915, in parse
return expatbuilder.parse(file)
File "/usr/lib/python2.5/xml/dom/expatbuilder.py", line 924, in parse
result = builder.parseFile(fp)
File "/usr/lib/python2.5/xml/dom/expatbuilder.py", line 211, in parseFile
parser.Parse("", True)
xml.parsers.expat.ExpatError: no element found: line 1, column 0
Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python2.5/site-packages/apport_python_hook.py", line 78, in apport_excepthook
report_file = open(pr_filename, 'wt')
IOError: [Errno 13] Permission denied: '/var/crash/_usr_bin_alacarte.1000.crash'
Original exception was:
Traceback (most recent call last):
File «/usr/bin/alacarte», line 36, in
main()
File «/usr/bin/alacarte», line 32, in main
app = MainWindow(datadir, version, sys.argv)
File «/usr/lib/python2.5/site-packages/Alacarte/MainWindow.py», line 49, in __init__
self.editor = MenuEditor()
File «/usr/lib/python2.5/site-packages/Alacarte/MenuEditor.py», line 36, in __init__
self.__loadMenus()
File «/usr/lib/python2.5/site-packages/Alacarte/MenuEditor.py», line 46, in __loadMenus
self.applications.dom = xml.dom.minidom.parse(self.applications.path)
File «/usr/lib/python2.5/xml/dom/minidom.py», line 1915, in parse
return expatbuilder.parse(file)
File «/usr/lib/python2.5/xml/dom/expatbuilder.py», line 924, in parse
result = builder.parseFile(fp)
File «/usr/lib/python2.5/xml/dom/expatbuilder.py», line 211, in parseFile
parser.Parse(«», True)
xml.parsers.expat.ExpatError: no element found: line 1, column 0
Частичное решение: зайти в ~/.config/menus и заменить файл applications.menu последним по времени бекапом с именем вида applications.menu.undo-X, где X — какое-то число.
05.13.08
Наркота
По Радио Эра идет трансляция про наркотики. Чиновник перед микрофоном распинается о том, что нужно запретить продажу наркотиков, и тогда детская наркомания будет поборена. После его пламенной речи настало чувство бодро едущей крыши. А че, наркотики у нас в стране в свободной продаже и доступны любому ребенку за карманные деньги на новую игрушку, что их продажу запрещать нужно?
Впрочем, искренний дебилизм в сочетании с честными, некрадущими глазами среди «властьдержащих» — столь частое явление, что удивляться просто бессмысленно.
05.05.08
Убрать иконки сменных и сетевых носителей с рабочего стола в Ubuntu 8
запустить gconf-editor, найти ключ volumes_visible и убрать с него галочку.
Автозагрузка в Ubuntu Linux
Задача: автоматически запустить при старте системы некий скрипт, демон или программу.
Вариант решения:
Автоматическая загрузка скриптов может понадобиться по различной причине. Например, нужно стартовать некий системный демон, или просто лень каждый раз при запуске компьютера запускать вручную браузер. Если администраторских прав на запуск не требуется, то пользователям графической оболочки GNOME пригодится данный мануал. В случае KDE, в каталоге ~/.kde/Autorun/ будут выполняться все скрипты с соответствующими правами.
Мои «приключения» начались с того, что требовалось запускать скрипт с администраторскими правами и не вводить каждый раз пароль при загрузке иксов. Все оказалось очень просто. Итак, создаем папку, где будут храниться скрипты:
$ mkdir MyScripts
и помещаем в нее необходимый нам скрипт под названием myscript.sh. В моем случае его содержание могло выглядеть вот так:
sudo ipmasq
Последним штрихом будет прописывание пути к скрипту в файл rc.local, находящийся у меня в каталоге /etc. Предварительно сделав с него бекап
sudo cp /etc/rc.local /etc/rc.local.bac
откроем его в текстовом редакторе
sudo gedit /etc/rc.local
и введем перед строкой exit 0
путь к скрипту:
/home/XXXXXX/MyScripts/myscript.sh
Теперь можно перезагружаться =).
05.04.08
Установка драйверов NVidia на Ubuntu
Потратив кучу времени на правильную установку дров на видеокарту GeForce 7300 GT под Ubuntu 8.04 64bit, решил записать как оно должно выполняться. Полный мануал, по которому писалось все нижеприведенное находится тут.
Драйвер NVidia является закрытым, и распостраняется разделенным на две части, одна из которых содержит открытый код, а вторая содержит модули, выполняющие основные функции. Проверим, стоит ли уже драйвер по умолчанию:
find /lib/modules/`uname -r`/ -iname \*nvidia.ko\*
Должен быть найден только один модуль в подкаталоге volatile. Чтобы система не запуталась, какой драйвер использовать, его необходимо отключить, прописав в файле /etc/default/linux-restricted-modules-common строку DISABLED_MODULES=»nv nvidia_new».
В моем случае перед установкой драйвера нужно было установить лишь пакет
sudo aptitude install libc6-dev
Скачав с сайта nvidia.com необходимый драйвер, с виртуальной консоли (переход на которую осуществляется по Ctrl+Alt+Fn, n=1,2,…,6) останавливаем графическую оболочку командой
sudo /etc/init.d/gdm stop
и запускаем инсталляцию драйвера:
sudo sh NVIDIA-Linux-xXX_XX-XX.XX.XX-pkg2.run
В процессе установки отказываемся от загрузки откомпилированных хеадеров с сайта nvidia (их там все равно не оказалось, в моем случае
). В этом случае инсталлятор скомпилирует их сам. Последним вопросом инсталлятора будет предложение запустить утилиту конфигурации nvidia-xconfig. В руководстве http://forum.ubuntu.ru/index.php?topic=3031.0 рекомендовалось отказаться и заполнить файл /etc/X11/xorg.conf, который хранит настройки графического режима, самостоятельно. Однако в ходе эволюции убунты от шестой до восьмой, содержимое xorg.conf все упрощалось и упрощалось, пока не дошло до той степени, когда драйвер просто перестал его понимать О_о. Не обладая изначально знаниями, что туда необходимо прописывать, я сделал резервную копию настроек
sudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf.bac
и все же запустил
sudo nvidia-xconfig
который поругавшись поправил файл. Сейчас, мой xorg.conf выглядит так:
# nvidia-settings: X configuration file generated by nvidia-settings
# nvidia-settings: version 1.0 (buildmeister@builder26) Tue Jan 22 17:58:05 PST 2008Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0" 0 0
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
EndSectionSection "Files"
RgbPath "/usr/X11R6/lib/X11/rgb"
EndSection
Section "Module"
Load "dbe"
Load "extmod"
Load "type1"
Load "freetype"
Load "glx"
EndSection
Section "ServerFlags"
Option "Xinerama" "0"
EndSection
Section "InputDevice"
# generated from default
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/psaux"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection
Section "InputDevice"
# generated from default
Identifier "Keyboard0"
Driver "kbd"
EndSection
Section "Monitor"
# HorizSync source: edid, VertRefresh source: edid
Identifier "Monitor0"
VendorName "Unknown"
ModelName "LG T710BH"
HorizSync 30.0 - 71.0
VertRefresh 50.0 - 160.0
Option "DPMS"
EndSection
Section "Device"
Identifier "Videocard0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce 7300 GT"
Option "NoLogo" "TRUE"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Videocard0"
Monitor "Monitor0"
DefaultDepth 24
#Option "metamodes" "1024x768_85 +0+0; 1280x1024 +0+0; 1024x768 +0+0; 800x600 +0+0; 640x480 +0+0"
SubSection "Display"
Depth 24
Modes "1024x768"
EndSubSection
EndSection
Далее, можно было стартовать иксы
sudo /etc/init.d/gdm start
и из иксового терминала запустить утилиту настройки монитора
sudo nvidia-settings
для изменения разрешения и частоты обновления экрана. Установка закончена.