tag:blogger.com,1999:blog-307441652009-07-10T17:36:10.485+04:00Записки дебианщикаВ этом блоге публикуются заметки и решения, найденные в процессе работы, освоения и жизни в дистрибутиве Debian GNU/Linux.virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.comBlogger239125tag:blogger.com,1999:blog-30744165.post-6198688498568380472009-06-29T00:41:00.000+04:002009-06-29T00:41:00.039+04:00EXIF теги в Linux: зачем нужен EXIFВ различных форматах графических файлов возможность хранить дополнительные сведения, например, время выдержки, значение диафрагмы, время или ещё что-нибудь. Это обеспечивает формат EXIF (Exchangeable Image File Format). В Linux для работы с тими EXIF данными есть такой мощный пакет утилит, как exiftools, всю полезность которого автор этих строк испытал на себе. Вот, например,<span class="fullpost"> потребовалось вам сохранить какие-то пометки о том, где сделан этот снимок - тут-то вам exiftools и пригодится.<br /><br /><br /></span><span class="fullpost">Например, выдираем теги из RAW-файла на примере цифровой камеры Canon EOS 400D<br />exiftool IMG_0383.CR2 :<br /><blockquote><small>beast@notebeast:~$ exiftool IMG_0383.CR2<br />ExifTool Version Number : 6.57<br />File Name : IMG_0383.CR2<br />File Size : 8 MB<br />File Modification Date/Time : 2008:10:22 12:48:10<br />File Type : CR2<br />MIME Type : image/x-raw<br />Image Width : 1936<br />Image Height : 1288<br />Bits Per Sample : 8 8 8<br />Compression : JPEG (old-style)<br />Make : Canon<br />Camera Model Name : Canon EOS 400D DIGITAL<br />Preview Image Start : 79450<br />Orientation : Horizontal (normal)<br />Preview Image Length : 68724<br />X Resolution : 72<br />Y Resolution : 72<br />Resolution Unit : inches<br />Modify Date : 2008:10:15 15:44:26<br />Exposure Time : 1<br />F Number : 6.3<br />Exposure Program : Manual<br />ISO : 100<br />Exif Version : 0221<br />Date/Time Original : 2008:10:15 15:44:26<br />Create Date : 2008:10:15 15:44:26<br />Components Configuration :<br />Shutter Speed Value : 1<br />Aperture Value : 6.3<br />Flash : Off<br />Focal Length : 55.0mm<br />Macro Mode : Normal<br />Self-timer : 0<br />Quality : RAW<br />Canon Flash Mode : Off<br />Continuous Drive : Single<br />Focus Mode : Manual Focus<br />Canon Image Size : Unknown (-1)<br />Easy Mode : Manual<br />Digital Zoom : None<br />Contrast : Normal<br />Saturation : Normal<br />Sharpness : +3<br />Metering Mode : Center-weighted averaging<br />Focus Range : Not Known<br />Canon Exposure Mode : Manual<br />Long Focal : 55<br />Short Focal : 18<br />Focal Units : 1<br />Max Aperture : 5.6<br />Min Aperture : 32<br />Flash Activity : 0<br />Flash Bits : (none)<br />Focus Continuous : Unknown (8)<br />Zoom Source Width : 0<br />Zoom Target Width : 0<br />Photo Effect : Off<br />Color Tone : Normal<br />Focal Type : Zoom<br />Focal Plane X Size : 23.04mm<br />Focal Plane Y Size : 15.37mm<br />Auto ISO : 100<br />Base ISO : 100<br />Measured EV : -6.12<br />Target Aperture : 6.3<br />Exposure Compensation : 0<br />White Balance : Auto<br />Slow Shutter : None<br />Shot Number In Continuous Burst : 0<br />Flash Guide Number : 0<br />Flash Exposure Compensation : 0<br />Auto Exposure Bracketing : Off<br />AEB Bracket Value : 0<br />Focus Distance Upper : 0.77<br />Focus Distance Lower : 1<br />Bulb Duration : 0<br />Camera Type : EOS Mid-range<br />Auto Rotate : None<br />ND Filter : Unknown (-1)<br />Self-timer 2 : 0<br />Canon Image Type : Canon EOS 400D DIGITAL<br />Canon Firmware Version : Firmware 1.0.4<br />Owner's Name : unknown<br />Camera Body No. : 0730325266<br />Set Button Cross Keys Func : Set: Picture Style<br />Long Exposure Noise Reduction : Off<br />Flash Sync Speed Av : Auto<br />Shutter-AE Lock : AF/AE lock<br />AF Assist Beam : Emits<br />Exposure Level Increments : 1/3 Stop<br />Mirror Lockup : Disable<br />E-TTL II : Evaluative<br />Shutter Curtain Sync : 1st-curtain sync<br />Magnified View : Image review and playback<br />LCD Display At Power On : Display<br />Canon Model ID : EOS Digital Rebel XTi / 400D / Kiss Digital X<br />Num AF Points : 9<br />Canon Image Width : 3888<br />Canon Image Height : 2592<br />Canon Image Width As Shot : 3504<br />Canon Image Height As Shot : 2336<br />AF Points Used : (none)<br />Serial Number Format : Format 2<br />Original Decision Data : 0<br />File Number : 128-0000<br />Bracket Mode : Off<br />Bracket Value : 0<br />Bracket Shot Number : 0<br />Noise Reduction : Off<br />WB Bracket Mode : Off<br />WB Bracket Value AB : 0<br />WB Bracket Value GM : 0<br />Filter Effect : None<br />Toning Effect : None<br />Lens Type : EF-S18-55mm f/3.5-5.6<br />Internal Serial Number : H0885505<br />Dust Removal Data : (Binary data 1024 bytes, use -b option to extract)<br />Tone Curve : Standard<br />Sharpness Frequency : n/a<br />Sensor Red Level : 0<br />Sensor Blue Level : 0<br />White Balance Red : 0<br />White Balance Blue : 0<br />Color Temperature : 5200<br />Picture Style : Standard<br />Digital Gain : 0<br />WB Shift AB : 0<br />WB Shift GM : 0<br />Sensor Width : 3948<br />Sensor Height : 2622<br />Sensor Left Border : 52<br />Sensor Top Border : 23<br />Sensor Right Border : 3939<br />Sensor Bottom Border : 2614<br />WB RGGB Levels As Shot : 2236 1024 1024 1507<br />Color Temp As Shot : 5211<br />WB RGGB Levels Auto : 2236 1024 1024 1507<br />Color Temp Auto : 5211<br />WB RGGB Levels Measured : 2236 1024 1024 1507<br />Color Temp Measured : 5211<br />WB RGGB Levels Daylight : 2236 1024 1024 1507<br />Color Temp Daylight : 5200<br />WB RGGB Levels Shade : 2615 1024 1024 1253<br />Color Temp Shade : 7000<br />WB RGGB Levels Cloudy : 2427 1024 1024 1367<br />Color Temp Cloudy : 6000<br />WB RGGB Levels Tungsten : 1589 1086 1086 2509<br />Color Temp Tungsten : 3200<br />WB RGGB Levels Fluorescent : 1889 1034 1034 2126<br />Color Temp Fluorescent : 3769<br />WB RGGB Levels Kelvin : 2236 1024 1024 1507<br />Color Temp Kelvin : 5211<br />WB RGGB Levels Flash : 2479 1024 1024 1339<br />Color Temp Flash : 6262<br />WB RGGB Levels PC1 : 512 1024 1024 512<br />Color Temp PC1 : 4255<br />WB RGGB Levels PC2 : 512 1024 1024 512<br />Color Temp PC2 : 4255<br />WB RGGB Levels PC3 : 512 1024 1024 512<br />Color Temp PC3 : 4255<br />WB RGGB Levels Custom : 1201 1133 1133 5999<br />Color Temp Custom : 2400<br />User Comment :<br />Flashpix Version : 0100<br />Color Space : sRGB<br />Exif Image Width : 3888<br />Exif Image Length : 2592<br />Interoperability Index : R98 - DCF basic file (sRGB)<br />Interoperability Version : 0100<br />Focal Plane X Resolution : 4433.295<br />Focal Plane Y Resolution : 4453.608<br />Focal Plane Resolution Unit : inches<br />Custom Rendered : Normal<br />Exposure Mode : Manual<br />Scene Capture Type : Standard<br />Thumbnail Offset : 78336<br />Thumbnail Length : 1114<br />Photometric Interpretation : RGB<br />Samples Per Pixel : 3<br />Rows Per Strip : 256<br />Planar Configuration : Chunky<br />Strip Offsets : 443086<br />Strip Byte Counts : 7543495<br />Aperture : 6.3<br />Drive Mode : Single-frame shooting<br />Flash : Off<br />Image Size : 1936x1288<br />Lens : 18.0 - 55.0mm<br />Preview Image : (Binary data 68724 bytes, use -b option to extract)<br />Scale Factor To 35mm Equivalent : 1.6<br />Shooting Mode : Manual<br />Shutter Speed : 1<br />Thumbnail Image : (Binary data 1114 bytes, use -b option to extract)<br />WB RGGB Levels : 2236 1024 1024 1507<br />Blue Balance : 1.47168<br />Circle Of Confusion : 0.019 mm<br />Focal Length : 55.0mm (35mm equivalent: 85.9mm)<br />Hyperfocal Distance : 24.97 m<br />Lens : 18.0 - 55.0mm (35mm equivalent: 28.1 - 85.9mm)<br />Light Value : 5.3<br />Red Balance : 2.183594<br /></small></blockquote><br />Забавно, да, а что ещё можно с EXIF делать? Например, чтобы выцедить из RAW-файла время выдержки, сделать надо вот что:<br /><blockquote>exiftool -shutterspeed IMG_0383.CR2<br />Shutter Speed : 1<br /></blockquote>Для того, чтобы использовать exif-теги, надо запросить список тегов в которые возможна запись. Пишем:<br /><blockquote> exiftool -listw IMG_0383.CR2<br /></blockquote><br />Так, например из кучи тегов мы хотим писать в тег City. Для этого:<br /><br /><blockquote>$ exiftool -City=Moscow IMG_0383.CR2<br /> 1 image files updated<br /></blockquote>И теперь:<br /><br /><blockquote>$ exiftool -City IMG_0383.CR2<br />City : Moscow<br /></blockquote><br />Ура, теперь мы в тег City записали, что хотели. Утилита exiftools может не только читать, но и записывать информаицю в EXIF-теги. Это может быть полезно и нужно для хранения в RAW-файлах информации о съёмке.<br /><br /><br /><span style="color: rgb(153, 102, 51);"><big><b>И зачем всё это надо!?</b></big></span><br />Причины, по которым есть необходимость модифицировать EXIF-данные в RAW-файлах могут быть разные. Вот, например, ув. тов. <a href="http://sovety.blogspot.com/">jetxee</a> хочет в фотографиях <a href="http://sovety.blogspot.com/2008/07/blog-post.html">хранить геотеги</a>, то есть где фотография была снята.<br /><br />Мне это потребовалось вот для чего. Результатами моих научных экспериемнтов являются куча RAW-файлов, и в каталоге лежит небольшой файл с условиями эксперимента (что снималось и для чего). Разные не очень технически продвинутые коллеги любят эти файлы копировать и использовать их где-то ещё (типа проверить и посмотреть), а потом говорят: "слушай, вот я тут картинку обработал, и результаты такие и такие - не помнишь, откуда этот файл!?". Хуже дело, если взяли по одному файлу из нескольких разных экспериментов и вот теперь надо разобраться, что откуда взято.<br /><br />В общем случае экспериментатор при таком вопросе бледнеет и начинает громко говорить плохими словами. Но этого можно не делать: внедрить информацию в сам RAW-файл в какой-нибудь хитрый тэг. Потом так проще отследить файлы.<br /><br />И теперь, чтобы избавить себя от нервотрёпки, делаем так: находим любой записываемый тег, и пишем туда то, что относится к эксперименту. После этого записываем нужные данные во ВСЕ файлы RAW скопом:<br /><blockquote> exiftool -City='Moscow Engineering Physics Institute' *.CR2<br /><br /> 10 image files updated<br /><br /></blockquote>С удовлетворением видим:<br /><blockquote>exiftool -City *.CR2<br />======== IMG_0383.CR2<br />City : Moscow Engineering Physics Institute<br />======== IMG_0384.CR2<br />City : Moscow Engineering Physics Institute<br />======== IMG_0385.CR2<br />City : Moscow Engineering Physics Institute<br />======== IMG_0386.CR2<br />City : Moscow Engineering Physics Institute<br />======== IMG_0387.CR2<br />City : Moscow Engineering Physics Institute<br />======== IMG_0388.CR2<br />City : Moscow Engineering Physics Institute<br />======== IMG_0389.CR2<br />City : Moscow Engineering Physics Institute<br />======== IMG_0390.CR2<br />City : Moscow Engineering Physics Institute<br />======== IMG_0391.CR2<br />City : Moscow Engineering Physics Institute<br />======== IMG_0392.CR2<br />City : Moscow Engineering Physics Institute<br /> 10 image files read<br /></blockquote><br />И всё дела. И уж теперь ваши нерадивые коллеги не введут вас в ступор вопросом: а отуда этот файлик!?</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-619868849856838047?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com7tag:blogger.com,1999:blog-30744165.post-70340023983156110112009-06-15T00:39:00.002+04:002009-06-15T17:53:28.502+04:00Qtpfsgui: создание HDR изображений из нескольких кадровВ этой заметке приводится краткое описание и впечатления по созданию изображений с высоким динамическим диапазоном (HDR, High Dynamic Range) с помощью программы <span style="font-weight: bold;">Qtpfsgui</span>.<br /><br /><br /><span style="font-size:130%;"><span style="color: rgb(153, 102, 51); font-weight: bold;">Небольшой исторический экскурс</span></span><br />Как справедливо отмечают авторы ресурса <a href="http://hdr-mania.ru/articles/istoriya-hdr">HDRmania</a>, первое сообщение о процессе компрессии динамического диапазона обычных цифровых изображений, снятых с экспокоррекцией, появилось в 1993 г. А в 1995 году последовало появление соответствующей математической теории.<br />В 1997 году на конференции SIGGRAPH (Special Interest Group on GRAPHics and Interactive Techniques) Пол Дебевек (Paul Debevec), исследователь из Института Южной Калифорнии, представил метод соединения нескольких изображений, сделанных с разной экспозицией, для формирования единого HDR изображения. С ростом популярности цифровых фотоаппаратов и удобного для использования программного обеспечения термин HDR начал широко применяться для обозначения этого процесса. Более подробный обзор, с указанием на научные статьи, есть <a href="http://www.mvkonnik.info/2008/11/high-dynamic-range-imagery.html">у меня на английском</a>.<span class="fullpost"><br /><br /><br /><span style="font-size:130%;"><span style="color: rgb(153, 102, 51); font-weight: bold;">Cъёмка HDR-изображений</span></span><br />Для того, чтобы получить HDR-изображение, потребуется снять несколько кадров с разным значением экспозиции (или экспокоррекции). Напомню, что экпокорреция это поправка в экспозицию снимка относительно той, которая определена при помощи экспонометра. Для регистрации HDR-изображения:<br /><ol><li>Устанавливаем камеру на штативе.</li><li>Переводим камеру в ручной режим установки экспозиции. Выберите нужное значение диафрагмы для вашего кадра (например, f/8 или меньше, если вам нужна большая глубина резкости) и установите минимальное значение ISO.</li><li>Изменяем освещённость в самой яркой части кадра (точечным замером или в режиме Av, чтобы учесть только её) и отмечаем время экспозиции. Сделайте то же самое с самой глубокой тенью в кадре.</li><li>Определяем число и величину нужных экспозиций. Для этого возьмите за основу выдержку, измеренную для светлой части. Умножьте это число на 4, чтобы получить следующее значение экспозиции, отличающееся на 2 EV. Умножайте на 4 для получения следующих значений, пока не превысите экспозицию, измеренную для тени. Для большинства кадров вне помещения, не включающих солнце, 3 экспозиций с шагом 2 EV часто достаточно, чтобы покрыть весь динамический диапазон.</li></ol>Напомню, что сдвиг экспозиции на 1 EV означает изменение количества света, попавшего на фотоматериал, в 2 раза. Для создания HDR-снимка часто достаточно сфотографировать три кадра: с экспокоррекцией -1 EV, 0 EV и +1 EV.<br /><br /><br /><span style="font-size:130%;"><span style="color: rgb(153, 102, 51); font-weight: bold;">Работа с Qtpfsgui</span></span><br />Трудновыговариваемое название программы <span style="font-weight: bold;">Qtpfsgui</span> объясняется самими <a href="http://qtpfsgui.sourceforge.net/">авторами</a> так: Qt это библиотека Qt4 для отображения графических элементов, pfs - главная внутренняя библиотека, а gui - Graphical User Interface, графический интерфейс пользователя. На такие названия, конечно, хочется попенять авторам. Но главное, что программа делает своё дело, и делает его хорошо.<br /><br />Итак, фотографии сняты и теперь можно приступить к созданию HDR-снимка. Запускаем <span style="font-weight: bold;">Qtpfsgui</span> и выбираем все файлы изображений для HDR-фотографии сразу. После этого нас спросят об алгоритме построения HDR снимка. Это показано на рисунке ниже:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hM8AMxgJLzw/SgGFGa4NCdI/AAAAAAAABHA/RB0WHRNJOyg/s1600-h/qtpsfgui-04.jpg"><img src="http://2.bp.blogspot.com/_hM8AMxgJLzw/SgGFGa4NCdI/AAAAAAAABHA/RB0WHRNJOyg/s400/qtpsfgui-04.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 88px; height: 400px;" src="http://2.bp.blogspot.com/_hM8AMxgJLzw/SgGFGa4NCdI/AAAAAAAABHA/RB0WHRNJOyg/s400/qtpsfgui-04.jpg" alt="" id="BLOGGER_PHOTO_ID_5332689779124144594" border="0" /></a><br />После этого будет рассчитано HDR-изображение из указанных снимков. Созданное изображение появится в главном окне программы:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hM8AMxgJLzw/SgGGAOjFXgI/AAAAAAAABHI/HxfuI9TQ65I/s1600-h/qtpsfgui-02.jpg"><img src="http://1.bp.blogspot.com/_hM8AMxgJLzw/SgGGAOjFXgI/AAAAAAAABHI/HxfuI9TQ65I/s400/qtpsfgui-02.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_hM8AMxgJLzw/SgGGAOjFXgI/AAAAAAAABHI/HxfuI9TQ65I/s400/qtpsfgui-02.jpg" alt="" id="BLOGGER_PHOTO_ID_5332690772246748674" border="0" /></a><br />Созданное изображение можно сохранить в один из форматов, поддерживающих HDR:<br /><ol><li>OpenEXR (расширение: exr )</li><li>Radiance RGBE (расширение: hdr)</li><li>Tiff: 16bit, 32bit (float) и LogLuv (расширение: tiff)</li><li>Raw (различные расширения)</li><li>PFS native format (расширение: pfs)</li></ol>Если же требуется просматривать созданное изображение обычными графическими просмотрщиками, имеет смысл прибегнуть к тональной компрессии снимка и сохранить его в JPEG/TIFF. Тональная компрессия это преобразования тональных значений изображения из более широкого диапазона в более узкий. Например, HDR изображение с динамическим диапазоном 100 000:1 будет преобразовано в изображение с тональными значениями в диапазоне от 0 до 255. Для этого нажимаем на кнопку <span style="font-style: italic;">Tonemap the HDR</span> и выбираем один из методов тональной компрессии. <span style="font-weight: bold;"> Qtpfsgui </span>содержит 8 алгоритмов тонального отображения, среди которых можно отметить следующие алгоритм Drago и Fattal.<br /><br />Алгоритм Drago предназначен для имитирования восприятия человеческого глаза и полезен, когда нужно добиться естественных тонов. Алгоритм Fattal хорош для создания сюрреалистических, очень эффектных фотографий, однако он усиливает шумы и может создавать при одних и тех же параметрах из HDR фотографий при тоновой компрессии фотографии, выглядящие по-разному.<br /><br />Для примера приведу HDR-изображение, которое я снял своей <span style="color: rgb(192, 192, 192);">древней как мамонт</span> камерой Casio QV-4000: три фотографии со значениями экпокоррекции -2EV, 0EV и +2EV пересчитаны в изображение с высоким динамическим диапазоном:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hM8AMxgJLzw/SgGKd8JAGcI/AAAAAAAABHQ/vS-oKIls_gI/s1600-h/qtpsfgui-05.jpg"><img src="http://3.bp.blogspot.com/_hM8AMxgJLzw/SgGKd8JAGcI/AAAAAAAABHQ/vS-oKIls_gI/s320/qtpsfgui-05.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 243px;" src="http://3.bp.blogspot.com/_hM8AMxgJLzw/SgGKd8JAGcI/AAAAAAAABHQ/vS-oKIls_gI/s320/qtpsfgui-05.jpg" alt="" id="BLOGGER_PHOTO_ID_5332695680748100034" border="0" /></a>После применения тональной компрессии полученное HDR-изображение можно сохранить в форматах JPG или TIFF.<br /><br /><span style="color: rgb(153, 102, 51);">Ссылки</span><br />Ответы на часто задаваемые вопросы по HDR можно найти <a href="http://www.hdrsoft.com/resources/dri.html#capture">тут </a>(на английском) и <a href="http://hdr-mania.ru/articles/istoriya-hdr">здесь</a>, а так же можно <a href="http://www.flickr.com/groups/qtpfsgui">посмотреть на образцы фотографий</a>. Скачать <strong>Qtpfsgui</strong> можно на<a href="http://qtpfsgui.sourceforge.net/"> сайте авторов</a>.</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-7034002398315611011?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com11tag:blogger.com,1999:blog-30744165.post-19289007982106911532009-06-08T02:50:00.012+04:002009-06-12T23:48:48.020+04:00Toshiba Netbook NB-100: маленькое японское чудоНадумал купить себе небольшой нетбук, который удобно было бы таскать с собой для разного рода выступлений, лекций и презентаций. Большие мощности там ни к чему, нужно просто крутить PDF-презентации на внешнем мониторе, работать с текстом и время от времени выходить в интернет. И вот, поискав доступные варианты, остановился на Toshiba NB-100 с предустановленной Ubuntu Netbook Remix. <span class="fullpost"><br /><br /><br /><span style="color: rgb(153, 102, 51);"><big><b>Нетбук сразу из коробки</b></big></span><br />Первое впечатление - <i>"ой, какой маленький!" </i>И это именно так: нетбук очень мал и компактен, лёгок и изящен. Хитрые японцы сделали клавиатуру как раз такого размера, что ещё чуть-чуть меньше, и работать на ней уже просто невозможно. То есть клавиатура в целом неплоха, но набирать на ней длинные тексты, конечно, утомительно. Работа с такими маленькими кнопкам требует небольшого привыкания, но в целом не смертельно. Маленький тачпад довольно чуток к прикосновениям, отрабатывает нажатия вполне прилично. Динамик расположен внизу экрана, и довольно громкий; наверху экрана есть вебкамера, хотя её 0.3 мегапикселей едва хватает для сколько-нибудь приличной видеоконференции.<br /><br />Хочется отметить, что вариант процессора Intel Atom в нетбуке от Тошибы с Hyperthreading, что вместе с SATA-винчестером положительно влияют на скорость работы машины: всё работает <i>очень быстро</i> и плавно, что не может не радовать. Маленький 8.9" монитор Тошибы намного ярче моего Asus M5200AE, так что на нём можно работать даже в яркий солнечный день. Глянцевый монитор, хоть мне и не нравится его гламурность и способность отражать всё и вся, очень хороший и яркий, работать за ним приятно.<br /><br />По умолчанию предустановлена Ubuntu 8.04 с ядром 2.6.24-19lpia, как оно себя называет. При первом запуске в магазине настройка заняла не больше минуты, в то время как рядом сидевшие с Windows Vista ждали первый запуск аж 15 минут. После вопросов о логине\пароле, текущем часовом поясе и прочих мелочах загрузилась Ubuntu с интерфейсом вида "Netbook desktop":<br /><br /></span><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hM8AMxgJLzw/SiucFJ_o6NI/AAAAAAAABHw/kOTFUFbVQPM/s1600-h/nb100-02.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 187px;" src="http://2.bp.blogspot.com/_hM8AMxgJLzw/SiucFJ_o6NI/AAAAAAAABHw/kOTFUFbVQPM/s320/nb100-02.jpg" alt="" id="BLOGGER_PHOTO_ID_5344536995201345746" border="0" /></a><span class="fullpost"><br />Заблудиться тут в общем негде, но как переключаться между задачами я, честно говоря, не сразу понял. Побродив по настройкам, смог переключиться в нормальный убунтушный гномовский интерфейс, который называется "Classic desktop":<br /><br /></span><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hM8AMxgJLzw/SiucWyMnsVI/AAAAAAAABH4/fe4OdJCTv68/s1600-h/nb100-03.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 125px;" src="http://4.bp.blogspot.com/_hM8AMxgJLzw/SiucWyMnsVI/AAAAAAAABH4/fe4OdJCTv68/s320/nb100-03.jpg" alt="" id="BLOGGER_PHOTO_ID_5344537298050986322" border="0" /></a><span class="fullpost"><br />Не думаю, что прожжённые КДЕшники будут рады такому названию, но для Убунты оно действительно Классик. Шут с ним, впрочем, с названием - перед нами обычный GNOME на нетбуке:<br /><br /></span><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hM8AMxgJLzw/SiuceRVYWrI/AAAAAAAABIA/lims4vfGCLg/s1600-h/nb100-01.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 187px;" src="http://3.bp.blogspot.com/_hM8AMxgJLzw/SiuceRVYWrI/AAAAAAAABIA/lims4vfGCLg/s320/nb100-01.jpg" alt="" id="BLOGGER_PHOTO_ID_5344537426668313266" border="0" /></a><span class="fullpost"><br />Всё достаточно компактно, красиво и понятно: два виртуальных рабочих стола, корзина в самом углу, и кнопки наверху. После некоторого привыкания интерфейс вопросов не вызовет даже у самых неискушенных пользователей. Это из внешнего вида.<br /><br />Порадовало то, что Ubuntu сама нашла мою проводную сеть и тут же к ней подключилась по DHCP:<br /><br /></span><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hM8AMxgJLzw/SiucmazzRvI/AAAAAAAABII/0QX8JXWTc4s/s1600-h/nb100-05.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 309px;" src="http://2.bp.blogspot.com/_hM8AMxgJLzw/SiucmazzRvI/AAAAAAAABII/0QX8JXWTc4s/s320/nb100-05.jpg" alt="" id="BLOGGER_PHOTO_ID_5344537566650779378" border="0" /></a><span class="fullpost"><br /><br />Приятная мелочь, так что теперь можно немного побродить по Интернету с помощью Firefox, который так же имеется в комплекте предустановленного софта. Тут начинаются лёгкие минусы: в Firefox натолкали столько панелей инструментов, что хоть беги - никто не подумал, что экран нетбука всего 1024x600 пикселей, там и так ни черта не видать:<br /><br /></span><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hM8AMxgJLzw/SiuctMwOMbI/AAAAAAAABIQ/VFMzlktqbX0/s1600-h/nb100-04.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 187px;" src="http://4.bp.blogspot.com/_hM8AMxgJLzw/SiuctMwOMbI/AAAAAAAABIQ/VFMzlktqbX0/s320/nb100-04.jpg" alt="" id="BLOGGER_PHOTO_ID_5344537683136754098" border="0" /></a><span class="fullpost"><br />Да, это можно отключить, но зачем же это по умолчанию!?<br /><br />Идём по софту, который есть прямо из коробки. Имеем OpenOffice 2.4, F-spot, Firefox, Evolution, Stardict - это то, что сразу бросилось в глаза. В общем, софта хватает. Единственное, что поразило - не установленный по умолчанию GiMP. Это для меня большая загадка. Впрочем, используя замечательные репозитории <strike>Debian</strike>Ubuntu это можно быстро преодолеть. К слову сказать, процесс установки софта в Убунте меня очень порадовал: все красиво, понятно, с подсказками и большими глянцевыми кнопками, чтобы не промахнуться. :-) Мои олдскульные замашки с aptitude install от рута здесь не проходят.<br /><br /></span><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hM8AMxgJLzw/Siucz6qrm8I/AAAAAAAABIY/aWVVoDhrepw/s1600-h/nb100-06.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 187px;" src="http://4.bp.blogspot.com/_hM8AMxgJLzw/Siucz6qrm8I/AAAAAAAABIY/aWVVoDhrepw/s320/nb100-06.jpg" alt="" id="BLOGGER_PHOTO_ID_5344537798540762050" border="0" /></a><span class="fullpost"><br /><br />И тут начались первые косяки. Задумал поставить программу Planner, которая помогает планировать своё время - однако при установке сразу запустился некий scrollkeeper и отожрал всё процессорное время, при этом отказываясь продолжать установку. Пришлось использовать грубую физическую силу в виде sudo killall и выдирать его оттуда. Мне удалось поставить GIMP, чтобы сделать пару скриншотов, и на этом я удовлетворился.<br /><br />Побродив по всему этому глянцевому гламуру с весёлыми кнопками, я заскучал по своим любимым приложениям: MC, Yakuake, Kate... К тому же иногда хочется немного покрасноглазить и поработать от <i>root</i> для того, чтобы что-то подогнать под себя в системных настройках. А постоянно писать sudo мне непривычно. И вот я уже готовлю загрузочную флешку с установщиком Debian Lenny для водружения привычной среды обитания на нетбук.<br /><br /><br /><span style="color: rgb(153, 102, 51);"><big><b>Debian Lenny и Toshiba NB100</b></big></span><br />Загрузка с флешки имела один забавный момент в моём случае: если у вас в USB-порт воткнуто ещё что-то кроме флешки, загрузиться с флешки не удастся. После вытыкания мыши всё пошло как по маслу: знакомый инсталлятор (ссылка на Установку Дебиан) сам быстро нашёл мою проводную сеть, предложил выбрать интернет-репозиторий, разбить диск и выбрать по желанию пакеты для дальнейшей установки. Вопросов инсталлятор Lenny задаёт ощутимо меньше, чем Etch-евский.<br /><br />Я разбил весь диск одним куском, файловая система ext3, свопа нет (только swap-file), на что инсталлятор мне попенял (но , предупредив о последствиях, согласился со словами "ты жираф, тебе видней"). Без разговоров был установлен загрузчик Grub и прогрессивная локаль UTF8 (мои старпёрские привычки к Lilo и koi8 не учитывались). Установка прошла быстро и без проблем: даже учитывая моё медленное соединение в 64кБ/сек базовая система развернулась за 30 минут.<br /><br />Устройства нашлись ядром все - вот вывод lspci для NB-100:<br />00:00.0 Host bridge: Intel Corporation Mobile 945GME Express Memory Controller Hub (rev 03)<br />00:02.0 VGA compatible controller: Intel Corporation Mobile 945GME Express Integrated Graphics Controller (rev 03)<br />00:02.1 Display controller: Intel Corporation Mobile 945GM/GMS/GME, 943/940GML Express Integrated Graphics Controller (rev 03)<br />00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 02)<br />00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 02)<br />00:1c.1 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 2 (rev 02)<br />00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #1 (rev 02)<br />00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #2 (rev 02)<br />00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #3 (rev 02)<br />00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #4 (rev 02)<br />00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 02)<br />00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev e2)<br />00:1f.0 ISA bridge: Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge (rev 02)<br />00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 02)<br />00:1f.2 SATA controller: Intel Corporation 82801GBM/GHM (ICH7 Family) SATA AHCI Controller (rev 02)<br />00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 02)<br />01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller (rev 02)<br />02:00.0 Ethernet controller: Atheros Communications Inc. AR242x 802.11abg Wireless PCI Express Adapter (rev 01)<br /><br /><br />Дальше было всё ещё скучнее - никаких<a href="http://mydebianblog.blogspot.com/2007/09/acpi-intel-prowireless-asus-m5200ae.html"> увлекательных триллеров с погоней, стрельбой и развратными женщинами по настройке Wifi</a> или, скажем, <a href="http://mydebianblog.blogspot.com/2007/04/asus-m5200ae.html">cardreader</a>, не было. Стандартное ядро из Lenny за номером 2.6.26-2 подняло ВСЁ оборудование сразу же и без лишних телодвижений. Мне потребовалось только быстро доставить все нужные мне службы и поставить иксы, которые тут же завелись сразу на widescreen 1024х600. Здесь меня встретила только одна маленькая неприятность, отнявшая у меня минут 10 на гуглёж и решение: <b>совершенно чудовищных размеров шрифты</b>. Решилось довольно быстро:<br /><br /><ol><li>При старте иксов вручную идём править файл <i>/etc/X11/xinit/xserverrc</i> в котором исправляем строку<i> exec /usr/bin/X -nolisten tcp</i> на строку <i> </i><i>exec /usr/bin/X -nolisten tcp -dpi 96</i></li><li>Если иксы стартуют автоматически при загрузке машины (а это так скорее всего и будет), всё немножко сложнее. Нужно иксам указать явно, что мы хотим 96dpi на мониторе. Для этого в файле <i>/etc/X11/xorg.conf</i> вписываем<br /></li></ol><blockquote>Section "Monitor"<br />...<br />DisplaySize AA BB # 96 DPI @ 1280x960<br />...<br />EndSection<br /><br />Заменяем АА и ВВ на числа, посчитанные так: АА=1024 x 25.4 / 96 и BB = 600 x 25.4 / 96 Здесь подставлено моё разрешение экрана нетбука 1024х600. После этого в разделе <b>Device section </b>вписываем параметр:<br /><br />Option "NoDDC" "true"<br /><br />Всё, это выставит нормальное разрешение и сделает шрифты на нетбуке приличных размеров. За этот трюк спасибо великолепному <a href="http://wiki.archlinux.org/index.php/Xorg#Display_Size.2FDPI"><span style="text-decoration: underline;">Arch</span></a><a href="http://wiki.archlinux.org/index.php/Xorg#Display_Size.2FDPI"> Wiki.</a></blockquote><br />После этого процесс настройки пошёл, как и прежде, без сучка и задоринки: установил IceWM и все необходимые приложения. Я был снова поражён скоростью работы системы, особенно винчестера: установка пакетов была просто молниеносной, и я не успевал набирать новые названия пакетов. В целом за полтора часа я установил всё: openoffice 3.1, gimp, cinepaint, inkscape, kate, kile, yakuake, mocp, octave, MATLAB, firefox, opera, samba, cups, alsa, imagemagick...<br /><br />Немного поигрался с темами для IceWM и нашёл пару тем с маленькими размерами заголовков окон и панелью задач. Вот, например, тема Thin Black для IceWM на фоне нескольких приложений:<br /></span><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hM8AMxgJLzw/Siuc6CdwobI/AAAAAAAABIg/2M35s9elqrg/s1600-h/nb100-7.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 187px;" src="http://2.bp.blogspot.com/_hM8AMxgJLzw/Siuc6CdwobI/AAAAAAAABIg/2M35s9elqrg/s320/nb100-7.jpg" alt="" id="BLOGGER_PHOTO_ID_5344537903713264050" border="0" /></a><br /><span class="fullpost">Практически - кроме ещё одной маленькой партизанской засады под названием Clone Mode. В переводе это значит, что я хочу гонять презентации не только на своём мониторе, но и на проекторе. Тут я вспомнил уважаемых комментаторов, намекавших на Xrandr в этом вопросе, и решил попробовать, благо xrandr у меня на нетбуке с Debian Lenny версии 1.2. Небольшой <a href="http://www.thinkwiki.org/wiki/Xorg_RandR_1.2">гуглёж</a> сразу вывел на решение всех проблем: просто пишем<br /><blockquote>$ xrandr --output VGA --auto</blockquote>и тут же получаем желаемый Clone Mode без всяких правок xorg.conf<br />Тут нам сразу наступает счастье: осталось только запустить OpenOffice Impress и крутить презентации.<br /><br /><br /><big><b><span style="color: rgb(153, 102, 51);">Заключение<br /></span></b></big>В общем, целом и частностях, новой машиной я очень доволен. Маленький и шустрый нетбук радует ярким монитором, быстрой работой и привычным окружением Debian. Всё, что нужно, на нём работает, и настройка заняла не больше полутора часов до получения полностью работоспособной системы со всеми нужными мне приложениями.</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-1928900798210691153?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com16tag:blogger.com,1999:blog-30744165.post-11036539963269044882009-05-25T02:44:00.000+04:002009-05-25T02:44:00.222+04:00Обработка изображений: История одной камерыМногие считают обработку изображений либо баловством в фотошопе, либо занудной и скучной вереницей формул. Мне хотелось бы показать, что это далеко не так - и для этого я решил вспомнить одну забавную историю, связанную с цифровой фотографией.<span class="fullpost"><br /><br /><br /><div align="right"><span style="color: rgb(153, 153, 153);"><i>Хотелось как лучше,<br />получилось - как всегда<br />(с) Золотая Классика<br /></i></span></div><span style="color: rgb(153, 153, 153);"><br /></span><br /><span style="color: rgb(153, 102, 51);"><b><big>Фотографии в полной темноте<br /></big></b></span>Иногда нужно сделать фотографию либо в полной темноте, либо в условиях плохого освещения. Для этого сначала надо навестись на резкость - а света мало. Что можно сделать? Например, подсветить это вспышкой, однако это может испортить снимок (например, если снимается животное в темноте) или сильно посадить аккумуляторы.<br /><br />Что придумала компания Sony в своём фотоаппарате Sony DSC-V1? Она вставила туда ИК-подсветку и механически отодвигаемый ИК-фильтр. Очень интересное решение: вроде бы обычная цифровая камера, но есть возможность снимать не только в видимом, но и в инфракрасном диапазоне.<br /><blockquote><small>Зачем на матрице ИК-фильтры? Очень просто: дело в том, что твердотельные матрицы очень воспринимают ИК-диапазон - максимальная чувствительность обычно в районе 800 нм. Если ИК-фильтр перед матрицей не поставить, это собьёт цветопередачу на снимке.</small></blockquote>Возможность съёмки в ИК-диапазоне сильно расширяет возможности фотографа. В ИК деревья с листьями выглядят как покрытые снегом, а облака отлично прорабатываются (в ИК "дымка" прозрачна). Практически вся зеленая растительность отлично отражает ИК. А значит, на снимке будет не черной, как могло бы показаться через красный светофильтр, а ярко-белой. А небо и вода, наоборот, становятся темным - почти черным. Облака при этом остаются ярко-белыми. Очень красивыми получаются снимки с растительностью и камнями: белые листья хорошо контрастируют с темным камнем.<br /><br />Какие же ещё применения можно найти съёмке в ИК-диапазоне? Ну, например, можно прочесть текст, залитый чернилами, осветив его ИК-прожектором и сфотографировав.<br /><br /><br /><br /><span style="color: rgb(153, 102, 51);"><b><big>Техника контактирует с народом<br /></big></b></span>Но это всё ничто по сравнению с тем, что большинство синтетических материалов, из которых делается одежда, тоже прозрачны в этом диапазоне.Так что можно фотографировать<br />людей в одежде, а на снимке они будут как бы без неё. Снимки будут не<br />цветными, но это в общем, не так важно.<br /><br />Сие открывает <i>заманчивые</i> перспективы для хулиганствующих элементов: на пляже можно фотографировать таким фотоаппаратом весёленькие снимки сквозь одетые купальники красивых барышень...<br /><blockquote><small>Возможность съёмки сквозь одежду и синтетические ткани - чрезвычайно увлекательная перспектива, которая так же может найти применение в охранных системах. Не всякая ткань ИК-прозрачна (искусственные - достаточно прозрачны, натуральные, за исключением шелка, значительно меньше). Чем дальше от объекта расположена ткань, тем больше рассеяние и тем хуже виден сам объект. От угла подсветки видимость практически не зависит. Совсем непрозрачны ткани толстые - джинсовка, шерсть или махровые полотенца. Очень хорошо просвечиваются полимерные пленки (любого цвета - как белые, так и черные), например непрозрачные полиэтиленовые пакеты.</small></blockquote>Не удивительно, что эта камера быстро стала лидером продаж, однако вскоре компанию Sony завалили жалобы. Нет, обладатели камер как раз тихо сопели и щёлкали затворами - жаловались объекты съёмки (как правило, прекрасного пола). По этому поводу был большой скандал, и камеру, разумеется, сняли с производства и начали отзыв из магазинов.<br /><br />Фотоаппараты с режимом ``ночной съемки`` (например, NightShot у Sony, NightView или MagicVU у Panasonic), имеющие отключаемый (убираемый механически) фильтр, больше не производятся, но дело их живёт. Есть несколько компаний, предлагающих за несколько большую стоимость серийные фотоаппараты, из которых убраны ИК-фильтры - таким образом, вы можете использовать её и как ИК-камеру, и как обычную фотокамеру. Эти компании обычно занимаются ещё и производством светофильтров.<br /><br /><br /><span style="color: rgb(153, 102, 51);"><big><b>Свято место пусто не бывает<br /></b></big></span>После того, как замечательная камера Sony NightShot канула в лету, народ начал искать этому замену. Как часто бывает, искали не долго: быстро появились <a href="http://www.maxmax.com/">умелые ребята</a>, которые за умеренные деньги присылали обычные цифровые камеры, но со снятыми ИК-фильтрами. На своём сайте они выкладывают фотографии в ИК-диапазоне сквозь нейлоновый вещевой мешок и женский манекен - с явным намёком на большее. На фотографиях, собственно, всё видно:<br /><br /></span><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hM8AMxgJLzw/SdZb9aoA6kI/AAAAAAAABFY/cOsmQK9FKGI/s1600-h/outshirtxdp.jpg"><img src="http://2.bp.blogspot.com/_hM8AMxgJLzw/SdZb9aoA6kI/AAAAAAAABFY/cOsmQK9FKGI/s320/outshirtxdp.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 249px;" src="http://2.bp.blogspot.com/_hM8AMxgJLzw/SdZb9aoA6kI/AAAAAAAABFY/cOsmQK9FKGI/s320/outshirtxdp.jpg" alt="" id="BLOGGER_PHOTO_ID_5320541120462121538" border="0" /></a><span class="fullpost"><br /><br /><a href="http://mydebianblog.blogspot.com/2008/06/blog-post.html">Демонтаж ИК-фильтра</a> - дело непростое и вы запросто можете повредить камеру: её придётся разбирать с задней части почти полностью - вынимая электронные платы и отсоединяя кабели.<br /><br /><br /><span style="color: rgb(153, 102, 51);">Заключение<br /></span>Ни одно хорошее дело, как известно, не остаётся безнаказанным - идея у Sony была интересной, но дело дальше не пошло из-за человеческих слабостей. Однако при желании и небольших финансовых вливаниях можно возродить это увлечение...<br /><br />А вы говорите, что ИК-спектр и прочие физические термины - тоска зелёная...</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-1103653996326904488?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com12tag:blogger.com,1999:blog-30744165.post-64850692083028786102009-05-11T02:12:00.001+04:002009-05-11T22:04:39.443+04:00Отслеживание версий документов LaTeX с помощью скрипта на Python... и сверху ещё майонезом полить :-) На самом деле, задача вполне актуальная, а именно: есть документ LaTeX, с которым работает много людей - в документ вносятся правки. Большинство людей LaTeX не приемлют по личным причинам. По рукам ходит много распечаток документа разных версий, и нужно отслеживать, какая версия документа у каждого из них.<span class="fullpost"><br /><br />Публикуемое решение задачи довольно простое: LaTeX с помощью скрипта на Python узнаёт номер версии документа, находящегося под контролем системы управления версиями Subversion, и впечатывает в документ номер версии. </span><span class="fullpost">В примере приводится система контроля версий <span style="font-weight: bold;">Subversion,</span> о которой <a href="http://mydebianblog.blogspot.com/2008/06/subversion.html">уже говорилось</a>, но при желании можно использовать <i>подставьте_сюда_вашу_любимую_систему_контроля_версий</i>.<br /><br />Для решения задачи нужно проделать несколько шагов. Во-первых, документ должен быть в репозитории системы контроля версий. Этим мы получаем номер ревизии, а стало быть, и всю информацию о том, какой документ обсуждается.<br /><br />Далее нам нужно в текст LaTeX-документа добавить скрипт на Python. Для этого сначала нужно научиться вызывать Python внутри LaTeX, что довольно просто благодаря замечательной статье <a href="http://sovety.blogspot.com/2008/09/python-latex-sage.html">Python внутри LaTeX</a> ув. тов.<a target="_blank" href="http://www.blogger.com/profile/13602261362032769022"> jetxee</a>. Итак, требуется:<ul><li>скачать файл <a href="http://www.imada.sdu.dk/%7Eehmsen/python.sty" title="Embedding Python in LaTeX">python.sty</a> и скопировать его в каталог с документом;<br /></li><li>в документе в преамбуле включить<span style="color: rgb(153, 0, 0);"> </span><code><span style="color: rgb(153, 0, 0);">\usepackage</span>{python}</code>;<br /></li><li>внутри документа фрагменты кода на Python помещать в окружение <code><span style="color: rgb(255, 0, 0);">\begin</span>{<span style="color: rgb(51, 51, 255);">python</span>}</code> ...<span style="color: rgb(255, 0, 0);"> </span><code><span style="color: rgb(255, 0, 0);">\end</span>{<span style="color: rgb(51, 51, 255);">python</span>}</code> - теперь всё, что они выведут, станет частью конечного документа;<br /></li><li>запускать LaTeX теперь нужно с опцией <i><b><code>-shell-escape</code></b></i> для запуска встроенного кода из-под LaTeX</li></ul>Ну и, естественно, нужно иметь рабочий Python на машине. Впрочем, если у вас десктоп с графической оболочкой и обвешан разными рюшками, Python у вас скорее всего уже есть.<br /><br />Так, всё по отдельности у нас есть, и осталось запалить всё это вместе. Для этого в документ вставляем код (кусок реального документа, чтобы было понятно):<br /><br /><blockquote><span style="color: rgb(128, 0, 0);">\documentclass</span><span style="color: rgb(0, 0, 0);">[a4paper,10pt,oneside]{article}</span><br /><span style="color: rgb(128, 0, 0);">\usepackage</span><span style="color: rgb(0, 0, 0);">[T2A]{fontenc}</span><br /><span style="color: rgb(128, 0, 0);">\usepackage</span><span style="color: rgb(0, 0, 0);">[koi8-r]{inputenc}</span><br /><span style="color: rgb(128, 0, 0);">\usepackage</span><span style="color: rgb(0, 0, 0);">[russian,english]{babel}</span><br /><span style="color: rgb(128, 0, 0);">\usepackage</span><span style="color: rgb(0, 0, 0);">{amssymb,amsfonts,amsmath,mathtext}</span><br /><span style="color: rgb(128, 0, 0);">\usepackage</span><span style="color: rgb(0, 0, 0);">{cite,enumerate,float,indentfirst}</span><br /><span style="color: rgb(128, 0, 0);">\usepackage</span><span style="color: rgb(0, 0, 0);">{caption2,tabularx}</span><br /><span style="font-style: italic; color: rgb(128, 128, 128);"></span><span style="color: rgb(128, 0, 0);">\usepackage</span><span style="color: rgb(0, 0, 0);">[dvips]{graphicx}</span><br /><span style="color: rgb(128, 0, 0);">\graphicspath</span><span style="color: rgb(0, 0, 0);">{{pictures/}}</span><br /><br /><span style="font-style: italic; color: rgb(128, 128, 128);">%&lt;--------------Pythonated trick starts HERE!</span><br /><span style="color: rgb(128, 0, 0);">\usepackage</span><span style="color: rgb(0, 0, 0);">{fancybox,fancyhdr} </span><span style="font-style: italic; color: rgb(128, 128, 128);"></span><br /><span style="color: rgb(128, 0, 0);">\usepackage</span><span style="color: rgb(0, 0, 0);">{python}</span><br /><span style="color: rgb(128, 0, 0);">\fancyhead</span><span style="color: rgb(0, 0, 0);">[R]{}</span><br /><span style="color: rgb(128, 0, 0);">\fancyhead</span><span style="color: rgb(0, 0, 0);">[L]{}</span><br /><span style="color: rgb(128, 0, 0);">\fancyhead</span><span style="color: rgb(0, 0, 0);">[C]{}</span><br /><span style="color: rgb(128, 0, 0);">\fancyfoot</span><span style="color: rgb(0, 0, 0);">[R]{}</span><br /><span style="color: rgb(128, 0, 0);">\fancyfoot</span><span style="color: rgb(0, 0, 0);">[C]{</span><span style="color: rgb(128, 0, 0);">\textit</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(128, 0, 0);">\textbf</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(128, 0, 0);">\input</span><span style="color: rgb(0, 0, 0);">{svnstatus}}}}</span><br /><span style="color: rgb(128, 0, 0);">\fancyfoot</span><span style="color: rgb(0, 0, 0);">[L]{}</span><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">python</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 153, 0);"><span style="color: rgb(0, 153, 0);">#! /usr/bin/python</span></span><br /><span style="color: rgb(0, 153, 0);"><span style="color: rgb(0, 153, 0);">import os, string</span></span><br /><span style="color: rgb(0, 153, 0);"><span style="color: rgb(0, 153, 0);">cmd = 'svn status <b>ИМЯФАЙЛАТУТ</b>.tex -v'</span></span><br /><span style="color: rgb(0, 153, 0);"><span style="color: rgb(0, 153, 0);">fpipe = os.popen(cmd)</span></span><br /><span style="color: rgb(0, 153, 0);"><span style="color: rgb(0, 153, 0);">piperesult = fpipe.read()</span></span><br /><span style="color: rgb(0, 153, 0);"><span style="color: rgb(0, 153, 0);">fpipe.close()</span></span><br /><span style="color: rgb(0, 153, 0);"><span style="color: rgb(0, 153, 0);">results = piperesult.split()</span></span><br /><span style="color: rgb(0, 153, 0);"><span style="color: rgb(0, 153, 0);">if results[0] == 'M':</span></span><br /><span style="color: rgb(0, 153, 0);"><span style="color: rgb(0, 153, 0);">out = 'Subversion revision of this document is '+results[1]+', last modified by '+results[3]+', STATUS: '+results[0]</span></span><br /><span style="color: rgb(0, 153, 0);"><span style="color: rgb(0, 153, 0);">else:</span></span><br /><span style="color: rgb(0, 153, 0);"><span style="color: rgb(0, 153, 0);">out = 'Subversion revision of this document is '+results[1]+', last modified by '+results[2]</span></span><br /><span style="color: rgb(0, 153, 0);"><span style="color: rgb(0, 153, 0);">FileName='svnstatus.tex'</span></span><br /><span style="color: rgb(0, 153, 0);"><span style="color: rgb(0, 153, 0);">fout=open(FileName,'w')</span></span><br /><span style="color: rgb(0, 153, 0);"><span style="color: rgb(0, 153, 0);">fout.write(out)</span></span><br /><span style="color: rgb(0, 153, 0);"><span style="color: rgb(0, 153, 0);">fout.close()<span style="color: rgb(0, 0, 0);"></span></span></span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">python</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="font-style: italic; color: rgb(128, 128, 128);">%&lt;--------------Pythonated trick ends HERE!</span><br /><span style="color: rgb(128, 0, 0);"></span><br /><br /><span style="color: rgb(128, 0, 0);">\makeatletter</span><br /><span style="color: rgb(128, 0, 0);">\bibliographystyle</span><span style="color: rgb(0, 0, 0);">{unsrt} </span><span style="font-style: italic; color: rgb(128, 128, 128);">%Стиль библиографических ссылок БибТеХа</span><br /><span style="font-style: italic; color: rgb(128, 128, 128);">% Заменяем библиографию с квадратных скобок на точку:</span><br /><span style="color: rgb(128, 0, 0);">\renewcommand</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(128, 0, 0);">\@</span><span style="color: rgb(0, 0, 0);">biblabel}[1]{#1.} </span><br /><span style="color: rgb(128, 0, 0);">\makeatother</span><br /><span style="font-style: italic; color: rgb(128, 128, 128);">% Рис.1. - как у нас принято.</span><br /><span style="color: rgb(128, 0, 0);">\renewcommand</span><span style="color: rgb(0, 0, 0);">{\captionlabeldelim}{.} </span><br /><br /><span style="font-style: italic; color: rgb(128, 128, 128);">% Меняем поля страницы</span><br /><span style="color: rgb(128, 0, 0);">\usepackage</span><span style="color: rgb(0, 0, 0);">{geometry}</span><br /><span style="color: rgb(128, 0, 0);">\geometry</span><span style="color: rgb(0, 0, 0);">{left=2cm}</span><br /><span style="color: rgb(128, 0, 0);">\geometry</span><span style="color: rgb(0, 0, 0);">{right=2cm}</span><br /><span style="color: rgb(128, 0, 0);">\geometry</span><span style="color: rgb(0, 0, 0);">{top=2cm}</span><br /><span style="color: rgb(128, 0, 0);">\geometry</span><span style="color: rgb(0, 0, 0);">{bottom=3cm}</span><br /><span style="font-style: italic; color: rgb(128, 128, 128);"></span><br /><span style="font-style: italic; color: rgb(128, 128, 128);"></span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">document</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="font-style: italic; color: rgb(128, 128, 128);">% \usefont{T2A}{ftm}{m}{sl}</span><br /><span style="color: rgb(128, 0, 0);">\pagestyle</span><span style="color: rgb(0, 0, 0);">{fancy}</span><br /><br /><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">abstract</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);">The registration of correlation signals....</span><span style="color: rgb(0, 0, 0);"></span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">abstract</span><span style="color: rgb(0, 0, 0);">}</span><br /></blockquote>Небольшие комментарии к коду. Я использовал возможности пакета <i>fancyhdr</i> для того, чтобы вставить упоминание о ревизии документа в колонтитуле - чтобы на каждой странице это было видно. Питонистый скрипт довольно прост, а если вы захотите его оптимизировать - напильник вам в руки. <br /><br />После этого в ваш документ внизу страницы будет вставляться номер его ревизии в Subversion, что будет видно и при печати. Мне это сэкономило много нервов и седых волос.</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-6485069208302878610?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com17tag:blogger.com,1999:blog-30744165.post-57690866222905623412009-05-04T04:50:00.002+04:002009-05-05T18:30:15.535+04:00Шумоподавление на чипе современных CMOS-фотосенсоров<div style="text-align: right; color: rgb(102, 102, 102);"><span style="font-style: italic;">По материалам</span> <span style="font-style: italic;">кандидатской</span> <span style="font-style: italic;">диссертации</span> </div><br />У многих из нас есть цифровые фотокамеры - с их помощью можно сделать очень хороший снимок, даже если это камера мобильного телефона. Изображение современных камер отличается детализованностью и низким уровнем шумов. Как же им это удаётся?<br /><br /><span class="fullpost">Большинство современных цифровых фотокамер оснащены CMOS-сенсорами. Как известно, одним из главных недостатков CMOS-сенсоров является их высокий уровень шума. Тем не менее, современные CMOS-фотосенсоры, произведённые по 4/5Т-технологии, позволяют получать изображения с уровнем шумов, сравнимым с уровнем шумов CCD-фотосенсоров. Это достигается шумоподавлением на самом фотосенсоре и CMOS-пикселе. Данное обстоятельство следует учитывать при проведении измерений и регистрации сигналов на CMOS-фотоприёмники, а так же при оценке характеристик CMOS-сенсоров. <p>Широкое применение CMOS-сенсоров связано с их весьма важным достоинством: при увеличении размеров фотосенсора энергетические затраты на передачу данных об изображении практически не увеличиваются. Если количество считывающих каналов в CMOS-сенсорах остаётся неизменным, то энергопотребление сенсора остаётся одинаковым и не возрастает при увеличении размера сенсора (см.Рис.<span style="text-decoration: underline;"> 1</span><a href="file:///home/beast/matlab/docus/phdthesis/zagashnikPhD_Konnik/zagashnikPhD_Konnik.html#fig:CanonFullFrameCMOSpowerconsumption"></a>). С другой стороны, CCD-сенсоры перемещают зарядовые пакеты, и это существенно более энергозатратно. Убыстрение процесса считывания в CCD-сенсорах так же приводит к дополнительному расходу энергии, что нежелательно в портативной технике. Даже по сравнению с малыми сенсорами, CCD-сенсоры потребляют вдвое больше энергии, чем CMOS, что видно на Рис.1. Сравнение полноформатных, 35-мм сенсоров показывает, что CCD-сенсоры потребляют почти втрое больше энергии, чем CMOS.<br /></p><p><br /></p><table> <caption align="bottom"><strong>Рис.1:</strong> Сравнение энергопотребления современных CMOS и CCD-фотосенсоров.</caption> <tbody><tr><td><div align="center"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hM8AMxgJLzw/SfWOkrUhCJI/AAAAAAAABGA/nV4_X688948/s1600-h/img47.png"><img src="http://3.bp.blogspot.com/_hM8AMxgJLzw/SfWOkrUhCJI/AAAAAAAABGA/nV4_X688948/s320/img47.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 471px; height: 214px;" src="http://3.bp.blogspot.com/_hM8AMxgJLzw/SfWOkrUhCJI/AAAAAAAABGA/nV4_X688948/s320/img47.png" alt="" id="BLOGGER_PHOTO_ID_5329322494818060434" border="0" /></a> </div></td></tr> </tbody></table> <p> Однако при проведении оценки характеристик CMOS-сенсоров следует учитывать то обстоятельство, что получаемые изображения для оценки темновых и световых шумов в значительной степени предобработаны электроникой камеры ещё до записи в RAW-файл или передачи в компьютер для последующей обработки. Ниже следует краткое описание методов шумоподавления на CMOS-фотосенсорах </p><p>Для того, чтобы устранить высокий уровень шумов CMOS-сенсоров, требуется создавать фотосенсоры с большим количеством транзисторов. Именно это позволяет производить шумоподавление внутри каждого пикселя, что приводит к существенному снижению уровня шума. Это потребовало создания сложных технологий 4/5Т производства CMOS-фотосенсоров. </p><p> </p><h3><a name="SECTION00401100000000000000"> Подавление темновых шумов</a> </h3> Называемый так же FPN, Fixed Pattern Noise, этот шум представляет собой разное смещение уровня сигнала для разных пикселей фотосенсора. В CMOS-сенсорах, помимо FPN, имеется так же неоднородность сигнала по столбцам. <p> Основным методом устранения такого шума является метод CDS, Correlated Double Sampling. Процесс шумоподавления по методу CDS проиллюстрирован на Рис.2.<br /></p><p><br /></p><p> </p><div align="center"><a name="fig:CanonfullframecmosFPNreduction"></a><a name="398"></a> <table> <caption align="bottom"><strong>Рис.2:</strong> Метод CDS для подавления фиксированного шума на изображениях, зарегистрированных фотосенсорами CMOS.</caption> <tbody><tr><td><div align="center"> <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hM8AMxgJLzw/Sfc_LzO9ioI/AAAAAAAABGI/u6d22nlS_jY/s1600-h/img48.png"><img src="http://2.bp.blogspot.com/_hM8AMxgJLzw/Sfc_LzO9ioI/AAAAAAAABGI/u6d22nlS_jY/s320/img48.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 473px; height: 246px;" src="http://2.bp.blogspot.com/_hM8AMxgJLzw/Sfc_LzO9ioI/AAAAAAAABGI/u6d22nlS_jY/s320/img48.png" alt="" id="BLOGGER_PHOTO_ID_5329798155980343938" border="0" /></a> </div></td></tr> </tbody></table> </div> <p> В методе CDS производится одновременное считывание светового сигнала и темнового двумя независимыми считывателями. Темновой сигнал накапливается в пикселях фотосенсора, которые защищены от света. Сначала считывается только информация о темновом шуме, потом считывается световой сигнал вместе с темновым шумом. Далее из считанного сигнала вычитается темновой шум. После этого на изображении, зарегистрированным CMOS-фотоприёмником, фиксированный шум FPN компенсирован (см.Рис.3). Для этого использование технологии 4/5T является критичным. </p><p> </p><div align="center"><a name="fig:CanonfullframecmosFPNreduction1"></a><a name="399"></a> <table> <caption align="bottom"><strong>Рис.3:</strong> Процесс шумоподавления по методу CDS.</caption> <tbody><tr><td><div align="center"> <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hM8AMxgJLzw/Sfc_UvRQAbI/AAAAAAAABGQ/mabZl2yBqyc/s1600-h/img49.png"><img src="http://4.bp.blogspot.com/_hM8AMxgJLzw/Sfc_UvRQAbI/AAAAAAAABGQ/mabZl2yBqyc/s320/img49.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 492px; height: 103px;" src="http://4.bp.blogspot.com/_hM8AMxgJLzw/Sfc_UvRQAbI/AAAAAAAABGQ/mabZl2yBqyc/s320/img49.png" alt="" id="BLOGGER_PHOTO_ID_5329798309535023538" border="0" /></a> </div></td></tr> </tbody></table> </div> <p> Однако большее искажение в регистрируемое изображение вносит шум, связанный с неоднородностью фоточувствительности. Это вытекает из того факта, что технологически невозможно изготовить миллионы одинаковых CMOS-пикселей с усилителями внутри. </p><p> </p><h3><a name="SECTION00401200000000000000"> Подавление шума, зависящего от светового сигнала</a> </h3> Так как каждый пиксель CMOS-сенсора содержит несколько транзисторов, управляющих передачей данных, технологически невозможно сделать их идентичными. Это приводит к неоднородности величины сигнала даже при регистрации плоского светового поля, что проиллюстрировано на Рис<span style="text-decoration: underline;">. 4</span><a href="file:///home/beast/matlab/docus/phdthesis/zagashnikPhD_Konnik/zagashnikPhD_Konnik.html#fig:CanonfullframecmosPRNUreduction1"></a> <p> </p><div align="center"><a name="fig:CanonfullframecmosPRNUreduction1"></a><a name="400"></a> <table> <caption align="bottom"><strong>Рис.4:</strong> Сигнал, подверженный шуму, вызванному неоднородностью фоточувствительности.</caption> <tbody><tr><td><div align="center"> <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hM8AMxgJLzw/Sfc_qwXGV0I/AAAAAAAABGY/vYESYFxbxwQ/s1600-h/img50.png"><img src="http://3.bp.blogspot.com/_hM8AMxgJLzw/Sfc_qwXGV0I/AAAAAAAABGY/vYESYFxbxwQ/s320/img50.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 425px; height: 87px;" src="http://3.bp.blogspot.com/_hM8AMxgJLzw/Sfc_qwXGV0I/AAAAAAAABGY/vYESYFxbxwQ/s320/img50.png" alt="" id="BLOGGER_PHOTO_ID_5329798687785113410" border="0" /></a> </div></td></tr> </tbody></table> </div> <p> Изображения, полученные с ранних образцов CMOS-сенсоров, были подвержены шуму неоднородности фоточувствительности из-за того, что сброс темнового заряда на фотодиодах был неполным (см.Рис. <span style="text-decoration: underline;">5</span>) </p><p> Сначала производится сброс значения фотодиода, затем производится регистрация полезного сигнала (S). Следует заметить, что в процессе регистрации светового сигнала так же регистрируется и шум (S+N1). Далее считывался сигнал вместе с шумом (S+N1), фотодиод сбрасывался и считывалось значение шума (N2). Это приводило к тому, что на изображении оставался шум. </p><p> </p><div align="center"><a name="fig:CanonfullframecmosPRNUreductionOLDMETHOD"></a><a name="401"></a> <table> <caption align="bottom"><strong>Рис.5:</strong> Неполный сброс значений фотодиодов приводит к считыванию сигнала с остаточным шумом.</caption> <tbody><tr><td><div align="center"> <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hM8AMxgJLzw/Sfc_yqu2JEI/AAAAAAAABGg/5nght79Nm2M/s1600-h/img51.png"><img src="http://2.bp.blogspot.com/_hM8AMxgJLzw/Sfc_yqu2JEI/AAAAAAAABGg/5nght79Nm2M/s320/img51.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 486px; height: 192px;" src="http://2.bp.blogspot.com/_hM8AMxgJLzw/Sfc_yqu2JEI/AAAAAAAABGg/5nght79Nm2M/s320/img51.png" alt="" id="BLOGGER_PHOTO_ID_5329798823713055810" border="0" /></a> </div></td></tr> </tbody></table> </div> <p>Развитие технологии производства фотодиодов по 4/5Т-технологии сенсоров CMOS позволило более эффективно подавлять шумы, связанные с неоднородностью фоточувствительности. Так, был разработан метод <span class="textit">полной передачи заряда</span>. Каждый фотодиод содержит ячейку для запоминания темнового шума и ячейку для накопления светового сигнала (см.Рис. <span style="text-decoration: underline;">6</span>). </p><p> </p><div align="center"><a name="fig:CanonfullframecmosPRNUreduction"></a><a name="402"></a> <table> <caption align="bottom"><strong>Рис.6:</strong> Метод <span class="textit">полной передачи заряда</span> для устранения шума, связанного с неоднородностью фоточувствительности.</caption> <tbody><tr><td><div align="center"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hM8AMxgJLzw/Sf7FocmnwxI/AAAAAAAABG4/5O6m_Qu_94c/s1600-h/img52.png"><img src="http://1.bp.blogspot.com/_hM8AMxgJLzw/Sf7FocmnwxI/AAAAAAAABG4/5O6m_Qu_94c/s400/img52.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 163px;" src="http://1.bp.blogspot.com/_hM8AMxgJLzw/Sf7FocmnwxI/AAAAAAAABG4/5O6m_Qu_94c/s400/img52.png" alt="" id="BLOGGER_PHOTO_ID_5331916307516867346" border="0" /></a> </div></td></tr> </tbody></table> </div> <p> Сначала считывается остаточный заряд, включающий в себя темновой и световой сигнал. Этот сигнал остаётся в ячейке <span><span class="fullpost">фотодиоде</span></span>, хранящей информацию об уровне шума, после чего производится сброс всех фотодиодов матрицы фотосенсора. </p><p> После завершения экспозиции, значение сигнала и значение шума считываются независимо - происходит замер текущего уровня шума. </p><p> Темновой заряд (N) и световой заряд (S) накапливается в разных ячейках одного и того же фотодиода. После того, как уровень шума (N) считывается, передаётся количество заряда из ячейки фотодиода, которая накапливала световой заряд. Происходит объединение уровней заряда (S+N) и считывание как целого. Так как уровень шума (N) известен для того же фотодиода, происходит их вычитание и, таким образом, считывается только информация о сигнале. Это и составляет основу метода <span class="textit">полной передачи заряда</span> </p><p> Кроме того, шум, вызванный неоднородностью фоточувствительности, возрастает с увеличением усиления ISO. Поэтому в ряде коммерческих цифровых фотокамер применяются технологии, которые усиливают сигнал в зависимости от уровня ``сигнал/шум'' на изображении. Сигналы с высоким соотношением ``сигнал/шум'' посылаются на усилители с большим коэффициентом усиления. Это позволяет CMOS-фотосенсорам выдавать изображения высокого качества в условиях съёмки, требующих высокого значения ISO и длинных экспозиций.<br /></p><p><br /></p><p style="color: rgb(153, 102, 51);">Ссылки</p><p>Пост подготовлен по материалам <a href="http://mydebianblog.blogspot.com/2008/01/canon.html">технической документации компании Canon</a> на цифровые камеры Canon серии EOS и полноформатные фотосенсоры.<br /></p></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-5769086622290562341?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com11tag:blogger.com,1999:blog-30744165.post-47125445387503728012009-04-27T01:40:00.011+04:002009-04-30T16:29:21.323+04:00Настройка Dual-Head в Linux на примере ноутбука Asus M5200AEИтак, нужно настроить режим отображения на два разных монитора - чтобы между разными экранами можно переносить окна приложений. Такой режим, в отличие от Clone Mode (клон, на второй мониторе тоже, что и на первом), называется Dual Head ("две головы", второй монитор отображает другое).<br /><br />Для этого нужно поправить xorg.conf, и править его придётся несколько больше, чем для Clone mode. В режиме Dual Head требуется описать два монитора и две видеокарты в xorg.conf (напомню, что конфиг этот лежит в /etc/X11/ и отвечает за весь графический режим). После того, как всё это будет сделано, нужно включить расширение Xinerama. Ну и естественно, перед тем, как вы начнёте крошить ваш xorg.conf, нужно сделать резервную копию старого конфига.<span class="fullpost"><br /><br /><br /><span style="color: rgb(153, 102, 51);"><b><big>Режим Dual Head в Linux<br /></big></b></span>Итак, привожу рабочий конфиг xorg.conf Что-то в нём будет отмечено серым - это не важно. Цветом я выделил наиболее критичные куски, которые ещё отдельно прокомментирую. Начало конфига трогать не надо - там нет ничего, что относится к двухголовости: пути к шрифтам и настройки раскладки клавиатуры. Поэтому пропускаем и идём дальше.<br /><blockquote><span style="font-size:85%;"><br /></span><span style="color: rgb(153, 153, 153);font-size:85%;" ># XF86Config-4 (XFree86 X Window System server configuration file)<br />#<br /># This file was generated by dexconf, the Debian X Configuration tool, using<br /># values from the debconf database.<br />#<br /># Edit this file with caution, and see the XF86Config-4 manual page.<br /># (Type "man XF86Config-4" at the shell prompt.)<br />#<br /># This file is automatically updated on xserver-xfree86 package upgrades *only*<br /># if it has not been modified since the last upgrade of the xserver-xfree86<br /># package.<br />#<br /><br />Section "Files"<br /># FontPath "unix/:7100" FontPath "/usr/share/fonts/X11/Type1"<br />FontPath "/usr/lib/X11/fonts/Type1"<br />FontPath "/usr/share/fonts/X11/CID"<br />FontPath "/usr/lib/X11/fonts/CID"<br />FontPath "/usr/lib/X11/fonts/Speedo"<br />FontPath "/usr/share/fonts/X11/100dpi"<br />FontPath "/usr/lib/X11/fonts/100dpi"<br />FontPath "/usr/share/fonts/X11/75dpi"<br />FontPath "/usr/lib/X11/fonts/75dpi"<br />EndSection<br /><br />Section "Module"<br />Load "bitmap"<br />Load "dbe"<br />Load "ddc"<br />Load "dri"<br />Load "extmod"<br />Load "freetype"<br />Load "glx"<br />Load "int10"<br />Load "record"<br />Load "vbe"<br />EndSection<br /><br />Section "InputDevice"<br />Identifier "Default Keyboard"<br />Driver "keyboard"<br />Option "CoreKeyboard"<br />Option "XkbRules" "xfree86"<br />Option "XkbModel" "pc102"<br />Option "XkbLayout" "us,ru(winkeys)"<br />Option "XkbOptions" "grp:alt_shift_toggle,grp_led:scroll"<br />EndSection<br /><br />Section "InputDevice"<br />Identifier "Configured Mouse"<br />Driver "mouse"<br />Option "CorePointer"<br />Option "Device" "/dev/input/mice"<br />Option "Protocol" "ImPS/2"<br />EndSection</span><br /></blockquote><br />Теперь переходим к разделу Device - тут надо описать две видеокарты. Названия идентификаторов важны, так как на них</span><span class="fullpost"> вы</span><span class="fullpost"> будете ссылаться дальше. Мониторы имеют номера 0 и 1, BusID остаётся один и тот же.<br /><blockquote><span style="color: rgb(255, 102, 102);">Section "Device"<br />Identifier "Intel Corporation Intel Default Card"<br />Driver "i810"<br />BusID "PCI:0:2:0"<br />Option "MonitorLayout" "CRT,LFP"<br /><b> <span style="color: rgb(204, 0, 0);"> Screen 0</span></b><br />EndSection<br /><br />Section "Device"<br />Identifier "Intel Corporation Intel Default Card External"<br />Driver "i810"<br />BusID "PCI:0:2:0"<br />Option "Display" "CRT"<br />Option "MonitorLayout" "CRT,LFP"<br /><b> <span style="color: rgb(204, 0, 0);"> Screen 1</span></b><br />EndSection</span><br /></blockquote><br />Отлично, теперь к двум видеокартам надо описать два монитора. Будьте внимательны и указывайте правильные частоты HorizSync и VertRefresh.<br /><blockquote><span style="color: rgb(51, 255, 51);"><span style="color: rgb(51, 204, 0);">Section "Monitor"<br />Identifier "Default Monitor"<br />HorizSync 28-50<br />VertRefresh 43-75<br />Option "DPMS"<br />EndSection<br /><br />Section "Monitor"<br />Identifier "External Monitor"<br />HorizSync 30-81<br />VertRefresh 56-75<br />DisplaySize 372 301<br />Option "DPMS"<br />EndSection</span><br /></span></blockquote><br />Дальше описываем разрешения, которые могут реализовать наши мониторы - не перепутайте частоты для Default monitor и External monitor. Также следует указать правильные идентификаторы видеокарт.<br /><blockquote><span style="color: rgb(102, 51, 255);">Section "Screen"<br /><b> Identifier "Default Screen"<br />Device "Intel Corporation Intel Default Card<br />Monitor </b><b> "Default Monitor"</b><br />DefaultDepth 24<br />SubSection "Display"<br /> Depth 1<br /> Modes "1024x768"<br />EndSubSection<br />SubSection "Display"<br /> Depth 4<br /> Modes "1024x768"<br />EndSubSection<br />SubSection "Display"<br /> Depth 8<br /> Modes "1024x768"<br />EndSubSection<br />SubSection "Display"<br /> Depth 15<br /> Modes "1024x768"<br />EndSubSection<br />SubSection "Display"<br /> Depth 16<br /> Modes "1024x768"<br />EndSubSection<br />SubSection "Display"<br /> Depth 24<br /> Modes "1024x768"<br />EndSubSection<br />EndSection<br /><br />Section "Screen"<br /><b> Identifier "External Screen"<br />Device </b><b>"Intel Corporation Intel Default Card External"<br />Monitor </b><b> "External Monitor"</b><br />DefaultDepth 24<br />SubSection "Display"<br />Depth 24<br />Modes "1280x1024" "1024x768" "800x600"<br />EndSubSection<br />EndSection<br /></span></blockquote><br />А если вы хотите таскать окошки приложений между мониторими, нужно включить расширение Xinerama (оно содержится в пакетах libdmx1 и libxinerama1).<br /><blockquote><span style="color: rgb(204, 102, 204);">Section "ServerLayout"<br />Identifier "Default Layout"<br /></span><span style="color: rgb(204, 102, 204);"><span style="color: rgb(204, 51, 204);"><b> Option "Xinerama" "true"</b></span><br />Screen 0 "External Screen"<br />Screen 1 <b>"Default Screen" LeftOf "External Screen"</b><br />InputDevice "Default Keyboard"<br />InputDevice "Configured Mouse"<br />EndSection<br /><br />Section "DRI"<br />Mode 0666<br />EndSection<br /></span></blockquote>Указание параметра LeftOf, как можно догадаться, делает внешний экран слева от основного.<br /><br />Если Xinerama не включить, то при старте иксов на внешнем мониторе появится стандартная сеточка, но перетащить туда ничего не получится.<br /><br /><span style="color: rgb(153, 102, 51);"><b><big>Что ещё</big><br /></b></span>Режим Dual Head особенно актуален: например, вашему научруку резко плохеет от текста статьи, оформленной в LaTeX, но текст нужно обсудить, а перегон в Word это безумие. Что делать? Берём и настраиваем режим Dual Head, на главном мониторе у вас Kile, и вы можете править текст. На внешний монитор вытаскиваем Kdvi, где текст отрисовывается в конечном виде. Все довольны и счастливы: и вы работаете в привычной среде, и ваше начальство видит привычную картинку.<br /><span style="color: rgb(153, 102, 51);"><br />Ссылки</span><br />Пример с конфигом взят <a href="http://www.thinkwiki.org/wiki/Installing_Ubuntu_on_a_ThinkPad_R60e#Xorg.config_for_two_screens">отсюда</a>, где лежит очень толковое описание процесса.<br />Для запуска множественных X-сессий можно начать медленно и вдумчиво прокуривать <a href="http://forum.ubuntu.ru/index.php?topic=49023">сообщения на форуме</a>.<br /><a name="Intel_945GM_with_the_xorg_Intel_driver"></a></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-4712544538750372801?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com24tag:blogger.com,1999:blog-30744165.post-45637582548456849462009-04-13T00:42:00.005+04:002009-04-13T14:12:50.014+04:00Немного о lossless кодировании видео в Linux - сжатие видео без потерьНекоторое время назад была потребность в том, чтобы сжать видеофайл без потерь (lossless compression) и воспроизводить сжатый фильм без пропуска кадров. Задача в меру прикладная, и может быть, кому-нибудь будет интересно.<br /><br />Итак, мы имеем установленный mencoder в Debian GNU/Linux и настойчивое желание сжимать полутоновые файлы без потерь.<br /><br /><br /><span style="color: rgb(153, 102, 51);"><big>Сжимаем видео с помощью Mencoder<br /></big></span>Для этого мы отобрали пару кодеков с lossless и начали сжимать наш видеоролик. Исходно в нашем распоряжении был видеоролик размером 341 Мб, в котором полутоновая картинка перемещалась по экрану. Нужно было сжать без потерь ролик так, чтобы он и места занимал немного, и воспроизводился без торможений.<br /><span class="fullpost"><br /><br /><span style="color: rgb(153, 102, 51);"><b>Сжатие FFV1<br /></b></span>Сначала сжимали кодеком FFV1 командой:<br /><blockquote><span style="font-style: italic;">mencoder -ovc lavc -lavcopts vcodec=ffv1 -o video-before.avi video-compressed-ffv1.avi</span><br /></blockquote>Сжалось до 18Мб, что очень хорошо. Однако при попытке такой сжатый файл воспроизвести, возникли проблемы: Mplayer (как и другие) сильно грузит процессор и видео не успевает воспроизводиться с заданным FPS. О том, какие страдания были с воспроизведением и как мы их героически решали, будет сказано ниже.<br /><br /><br /><b><span style="color: rgb(153, 102, 51);">Сжатие huffyuv<br /></span></b>Ещё один метод сжатия без потерь, но жмёт он хуже, чем FFV1, зато быстрее воспроизводится и меньше грузит процессор. При этом использовали mencoder для сжатия huffyuv с параметрами:<br /><blockquote><span style="font-style: italic;">mencoder -ovc lavc -lavcopts vcodec=ffvhuff:vstrict=-1:pred=2:context=1:format=422p video-before.avi -o video-compressed-ffvhuff.avi</span><br /></blockquote>Получилось видео на 99Мб, что тоже неплохо. Однако при воспроизведении оказалось, что происходит конвертирование в другое цветовое пространство 420p и мы решили отказаться от такого финта:<br /><blockquote><span style="font-style: italic;">mencoder -ovc lavc -lavcopts vcodec=ffvhuff:vstrict=-1:pred=2:context=1 video-before.avi -o video-compressed-ffvhuff-420.avi</span><br /></blockquote>при этом сэкономили ещё почти 20 Мб - фильм стал занимать 80Мб и воспроизводиться чуть глаже.<br /><br />Остановившись на сжатии huffyuv без опции format=422p, мы стали перебирать варианты воспроизведения видео с минимальными тормозами. История на этом не кончается...<br /><br /><br /><span style="color: rgb(153, 102, 51);"><big><b><strike>Играй мой баян</strike> Воспроизведение видео с помощью Mplayer<br /></b></big></span>Видео у нас сжато слабо, воспроизводить надо без задержек и железо скажем сразу весьма чахлое. Как проигрывать видео в таких условиях?<br /><br />Перво-наперво, используем замечательные возможности Mplayer по выводу видео куда и на что угодно: поэкспериментировать с параметром -vo было здравой идеей, и через некоторое время мы остановились на варианте -vo gl и -vo sdl для нашей задачи. Однако иксы - это хорошо, но хочется выводить видео на чёрный экран без всяких засветок.<br /><br />Далее, чтобы отвязаться от дисковой подсистемы как можно больше, используем возможность Mplayer кешировать видео:<br /><blockquote><span style="font-style: italic;">mplayer -vo gl -cache 65535 -cache-min 98 video-compressed-ffvhuff.avi</span><br /></blockquote>Это значит, что мы просим сделать Mplayer кеш на 64Мб и заполнять его не менее чем на 98%. Это сильно помогло делу, но это ещё не всё.<br /><br />Условия нашей задачи в меру экзотические: нужно проигрывать видео без масштабирования, "как есть", и желательно на чёрном экране без фона, с максимально возможной плавностью. Всё осложняется тем, что компьютер, на котором видео будет воспроизводиться, управляется Windows, и Linux там можно задействовать только в режиме LiveCD.<br /><br />Идём дальше и привлекаем для наших нужд Knoppix. В арсенале его параметров загрузки есть неприметный параметр fb1280x1024 для работы с framebuffer. Замечательное дело, и мы решили этим воспользоваться. У нас теперь появилась графическая консоль, чёрная и мрачная, как полярная ночь.<br /><br />Теперь, чтобы воспроизвести сжатое нами видео, копируем видео в память на Knoppix в каталог Desktop. После этого воспроизводим наше многострадальное видео в консоли так:<br /><blockquote><span style="font-style: italic;">mplayer -vo fbdev -cache 65535 -cache-min 98 -quiet video-compressed.avi</span><br /></blockquote>Ключик -quiet нужен для того, чтобы при воспроизведении Mplayer не выводил статистику в бегущей строке. Всё, после этого получаем фильм на чёрном экране, который воспроизводится плавно и без затей.<br /><br /><span style="color: rgb(153, 102, 51);">Скорость воспроизведения в Mplayer</span><br />На всякий случай, если потребуется запускать фильм с другой скоростью, всегда можно попросить Mplayer изменить число кадров в секунду (вплоть до 1 кадра в секунду) так:</span><br /><blockquote><span><span class="fullpost"><span style="font-style: italic;">mplayer -fps 1 video-compressed.avi</span></span></span></blockquote>Эта команда будет воспроизводить фильм со скоростью 1 кард в секунду.<br /><span style="color: rgb(153, 153, 153);">(спасибо тов.</span><a style="color: rgb(153, 153, 153);" href="http://linuxfreshman.blog.tut.by/" rel="nofollow">linuxfreshman</a><span style="color: rgb(153, 153, 153);"> за наводку)</span><br /><span class="fullpost"><br /><span style="color: rgb(153, 102, 51);">Выводы и ссылки</span><br />Воспроизведение таких огромных файлов с большим FPS (у нас это 40FPS) - действительно непростая задача, на любой ОС. Надеюсь, что эта заметка пригодится не только нам, но и тем, кто хочет сжимать видео без потерь.<br />Напоследок приведу интересную ссылку на <a href="http://www.mplayerhq.hu/DOCS/HTML/ru/menc-feat-enc-libavcodec.html#menc-feat-enc-libavcodec-video-codecs">перечень кодеков</a>, который имеется в арсенале libavcodec.</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-4563758254845684946?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com9tag:blogger.com,1999:blog-30744165.post-53859224243095419702009-04-10T13:30:00.003+04:002009-04-10T17:49:17.439+04:00Как сделать мобильную версию блога на Blogger?Очень часто я сам читаю свой блог, когда мне нужно что-то настроить в полевых условиях, где нет интернета и я сижу на своём мобильнике с GPRS. Там мне не до красивого оформления, а нужно просто взять и прочитать то, что я написал. При этом желательно с поиском по сайту.<br />Поэтому в последнее время озадачился тем, что хорошо бы создать мобильную версию блога. Оказалось, что сделать это даже проще, чем я думал.<span class="fullpost"><br /><br /><big><span style="color: rgb(153, 102, 51);"><b>Как сделано<br /></b></span></big>Всё довольно просто - есть такой замечательный сервис под названием <a href="http://mofuse.com/">mofuse</a>, который за несколько минут сделает вам мобильную версию вашего блога вида <i>XXX.mofuse.mobi</i><br /><br />Для этого нужно пройти простую процедуру регистрации, и через несколько минут, поковырявшись в настройках, можно получить желаемое. На предварительном просмотре можно отточить свои дизайнерские изыски, которые сводятся только к цвету текста, фона и ссылок. После этого можно добавить на страницу пару ссылок и в общем всё готово.<br /><blockquote><br />Идея такая: mofuse берёт вашу RSS-ленту блога и транслирует её по адресу <span class="fullpost"><i>XXX.mofuse.mobi </i>в очень облегчённом виде<i>.</i> При этом mofuse будет сжимать и масштабировать картинки в постах, чтобы они быстрее загружались на мобильное устройство. Можно вставить свои страницы и ссылки, сделав таким образом мини-сайт с транслируемым RSS-потоком.<br /><br />В общем, вы получаете отдельный сайт, который есть трансляция RSS-ленты вашего блога плюс возможность вставить ссылки (как это сделано сейчас у меня - ссылка на поисковую форму на сайте). Никаких навороченных яваскриптов и флеш-роликов: просто и аскетично.<br /></span></blockquote></span><span class="fullpost">За все эти прелести mofuse вставит в конец поста на вашем мобильном сайте, после навигации, несколько простых рекламных ссылок - более чем скромная плата за удобный и простой сервис.<br /><br />Пример того, что получилось у меня, находится по адресу <a href="http://mydebianblog.mofuse.mobi/">http://mydebianblog.mofuse.mobi/</a><br /><a href="http://mydebianblog.mofuse.mobi/?sm=1">Прямую ссылку</a> сразу на мобильную версию я уже повесил в боковой панели блога (пока в режиме тестирования), но в общем смотрится на мой взгляд неплохо.<br /><br />Работу mofuse я проверил на своём смартфоне Motorola A1200E и планшетке Nokia N800. В обоих случаях всё выглядит хорошо: есть трансляция короткой RSS-ленты и гуглопоиск по сайту. В общем это получается мобильная версия <span style="font-style: italic;">всего</span> блога, содержимое которого просто подгоняется под формат отображения на мобильных устройствах.<br /><br />Так как мобильная версия блога сделана недавно, с удовольствием принимаются пожелания, замечания и конструктивная критика в комментариях.<br /><br /><span style="color: rgb(102, 102, 102);">P.S. Кроме этого, перевёл Feedburner-ленту в Google, измениться ничего не должно (старая лента должна работать). После перехода адрес ленты поменялся на http://feeds2.feedburner.com/debianletters но менять его не обязательно: Гугл обещает, что работать будут оба адреса. Это так, на всякий случай.</span><br /></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-5385922424309541970?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com11tag:blogger.com,1999:blog-30744165.post-18711457613395481012009-04-02T02:02:00.002+04:002009-04-10T10:29:43.483+04:00Установка MikTeX в WindowsВремя от времени мне присылают письма и спрашивают коллеги - как установить LaTeX в Windows. Далее небольшое руководство по установке дистрибутива MikTeX для глобальной и надёжной ОС Windows.<br /><br /><span class="fullpost"><br />Установка MikTex.<br /><br />1. miktex\setup\setup.exe<br />После этого следует довольно длинная процедура распаковки архивов и установки MiKTeXa версии какой-то выше чем 2.0<br />Лучше не отменять установку какого-то там TeXTree. Говорят, так лучше работает.<br />На вопрос об incorporated лично я отвечаю "нет".<br />Распаковывается и устанавливается действительно ооооочень долго.<br /><br />2. В корневом каталоге запускаем инсталлятор интегрированной оболочки. Это может быть WinEdit (платный), LyX или TexnicCenter.<br /><br />3. Настраиваем интегрированную оболочку: прописываем пути к latex-овским командам (если они не прописаны), убираем ненужные меню и прочее.<br /><br />4. MikTex и русский язык: чтобы при наборе русских букв не вылезала абракадабра, надо всего лишь изменить шрифт. Нажмите Options\Fonts\Courier Cyrillic .<br /><br />5. Чтобы ТеХ автоматически переносил русские слова (английские и так<br />будет), надо сделать следующее:<br /><br />А) MiKTeX Options (кнопочка с шестеренками), далее Languages. Здесь<br />поставить флажок напротив russian ruhyph.tex .<br /><br />Б) Пуск\Выполнить<br />Нужно выполнить две команды (пробелы важны):<br />initexmf --dump<br />initexmf --find-tex language.dat<br /><br />Если не заработает, найдите через поиск файл initexmf и укажите полный путь, примерно так:<br />C:\Programs\texmf\miktex\bin\initexmf --dump<br />C:\Programs\texmf\miktex\bin\initexmf --find-tex language.dat<br />Настоятельно рекомендую сначала попробовать без пути. А то иногда не<br />работает с путем.<br /><br />6. Установить ghostscript и imagemagick, для возможности работы с PostScript и конвертированием изображений в разные форматы соответственно.<br /><br />7. Установить программу для работы с библиографической базой данных JabRef. Идём в интернет и качаем оттуда последнюю версию. Получаем файл .jar, который запускается при помощи Java. Java в Windows, конечно, нет - надо скачивать Java Runtime Environment и устанавливать её.<br /><br />В общем, дружественная такая процедура. Главное - не терять присутствие духа и стоически бороться.<br /><span style="color: rgb(153, 102, 51);"><br />Компромиссный вариант</span><br />Если нужно просто немного поработать с LaTeX-документами в Windows и при этом не устанавливать ничего, можно воспользоваться <a href="http://www.xm1math.net/texmaker/">TexMaker</a> Portable, о котором <a href="http://mydebianblog.blogspot.com/2007/06/latex-texmaker.html">я уже писал</a>. Версия TexMaker для Windows имеется <a href="http://www.badongo.com/it/file/11579099">тут</a>.</span></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-1871145761339548101?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com11tag:blogger.com,1999:blog-30744165.post-784808507399311152009-04-01T01:00:00.000+04:002009-04-01T01:00:00.950+04:00Внимание! Блог меняет название, тематику и владельца<big>Уважаемые читатели блога "Записки дебианщика"!</big><br /><br />Мы рады вам сообщить, что с 1 апреля 2009 года блог "<b><span style="color: rgb(153, 102, 51);">З</span><span style="color: rgb(153, 102, 51);">аписки дебианщика</span></b>" переименован в блог "<b><span style="color: rgb(51, 51, 255);">Vista и Linux</span></b>" и <a href="http://mydebianblog.spaces.live.com/">перемещён</a> на блогодвижок <i>Microsoft Live Spaces</i>. Новая RSS-лента записей блога находится по <a href="feed://mydebianblog.spaces.live.com/feed.rss">этой</a> ссылке. В скором времени будут подготовлены статьи о настройке и подробностях работы глобальной и надёжной операционной системы <i>Microsoft Windows Vista</i>.<span style="color: rgb(255, 255, 255);"><br /><br /></span>Автор блога, г-н <b>virens</b>, доставлен в следственный изолятор ближайшего отделения <i>корпорации </i><i>Microsoft</i> до выяснения обстоятельств. В данный момент с г-ном <b>virens</b> проводятся<span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">жёсткие </span>разъяснительные беседы и прочие оперативно-следственные мероприятия, в ходе которых он должен уяснить себе всю глубину собственных заблуждений относительно движения Open Source. После этого г-н <b>virens</b> будет принят в состав <i>Microsoft Documentation Team</i> в качестве технического писателя документации для<i> OS Windows Vista</i> за еду<i>.</i> В случае проявления неповиновения г-н <b>virens</b> будет сослан на исправительно-трудовые работы в Тундру на лесоповал в колонию строгого режима на 25 лет без права переписки. <span style="color: rgb(255, 255, 255);"><br /><br /></span>Однако нет повода для беспокойства<small><small><span style="color: rgb(102, 102, 102);">*</span></small></small>: дознание ведут опытные сотрудники <i>Отдела<span style="color: rgb(255, 255, 255);"> </span>по борьбе с ересью и инакомыслием</i> <i>корпорации </i><i>Microsoft.</i> Мы уверены, что г-н <b>virens</b> примет <i>правильное</i> решение и вскоре вернётся к привычному образу жизни. В ближайших планах намечена публикация статей о самой справделивой лицензии Microsoft EULA, сверхнадёжной серверной платформы <i>Microsoft IIS</i> и лучшей десктопной всех времён и народов <i>OS Windows Vista.</i><br /><br /><i>С уважением,<br />Microsoft Documentation Team,<br />Российское отделение корпорации </i><i>Microsoft.</i><br /><i><br /></i><span style="color: rgb(102, 102, 102);"><br /></span><span style="font-size:78%;"><span style="color: rgb(102, 102, 102);">* С завтрашнего дня чтение блога станет платным. Для просмотра документации пользователям следует установить в броузер Microsoft Internet Explorer специальный модуль DRM и оплатить месячный абонемент - всего 99$. За чтение статей, содержащих упоминание </span><span style="color: rgb(102, 102, 102);">торговой марки UNIX,</span></span><small><small><small><span style="color: rgb(102, 102, 102);"> следует заплатить отдельные лицензионные отчисления авторам и владельцам UNIX, корпорации SCO Group.<br /></span></small></small></small><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-78480850739931115?l=mydebianblog.blogspot.com'/></div>Microsoft Documentation Teamnoreply@blogger.com41tag:blogger.com,1999:blog-30744165.post-41134830466115336252009-03-23T04:22:00.001+03:002009-05-19T15:40:03.041+04:00Как составить резюме в LaTeX: пример CV оформленного в LaTeXЗадача создания красиво оформленного резюме не из лёгких, однако её может облегчить LaTeX. С помощью пакета modernCV можно сделать красиво оформленное резюме быстро и красиво. Немного терпения, и получаем качественный полиграфический результат.<span class="fullpost"><br /><br /><br /><span style="color: rgb(153, 102, 51);"><big><b>Что нужно для составления резюме<br /></b></big></span>Для составления резюме в LaTeX нам потребуется пакет moderncv, который можно взять <a target="_blank" href="http://www.ctan.org/tex-archive/macros/latex/contrib/moderncv/">здесь</a>, и немного терпения. В интернете просто прорва сайтов, которые дают детальные, до психологизма, рекомендации по составлению резюме. Надеюсь, вы прочли один из них - здесь только технические рецепты по составлению резюме.<br /><br />Итак, нужно скачать <a target="_blank" href="http://www.ctan.org/tex-archive/macros/latex/contrib/moderncv/">moderncv</a>, и распаковать его. Вместе с пакетом идёт пример составления резюме для John Doe (типа Василий Пупкин), который можно найти в файлах template_en.tex или jdoe_classic.tex в архиве moderncv. Надо сказать, что приводимые здесь рецепты относительные, так как автор moderncv очень активно перепиливает свой шаблон и перестраивает его, из-за чего при обновлении стилевый файлов резюме может запросто не собраться. Так что если вас всё устраивает в текущей версии moderncv - не ломайте то, что работает.<br /><br /><br /><span style="color: rgb(153, 102, 51);"><b><big>Комментарии к коду moderncv</big></b></span><br />По умолчанию резюме цветное, хотя для удобства печати его можно сделать чёрно-белым:<br /><blockquote><span style="color: rgb(128, 0, 0);">\moderncvtheme</span><span style="color: rgb(0, 0, 0);">[grey]{classic} </span></blockquote>Можно использовать и цвета (возможные значения 'blue', 'orange', 'red', 'green', 'grey'). Так же вместо классического стиля CV можно использовать более свободный:<br /><blockquote><span style="color: rgb(128, 0, 0);">\moderncvtheme</span><span style="color: rgb(0, 0, 0);">[grey]{casual} </span> </blockquote> В любом случае стоит поставить кодировку UTF8 внутри документа:<br /><blockquote><span style="color: rgb(128, 0, 0);">\usepackage</span><span style="color: rgb(0, 0, 0);">[utf8]{inputenc} </span><span style="font-style: italic; color: rgb(128, 128, 128);">% replace by the encoding you are using</span><span style="font-style: italic; color: rgb(128, 128, 128);"></span><br /></blockquote>Это даст возможность копировать текст из PDF-ника любыми средствами и на любых языках. Что, в случае с резюме, очень важно.<br /><br />Дальше пойдёт заполнение разделов: образование, опыт работы и так далеее. Здесь есть небольшая тонкость: в стилевом файле предусмотрен объект<span style="color: rgb(128, 0, 0);"> \cventry</span><span style="color: rgb(0, 0, 0);">{}{}{}{}{}{}</span> с кучей опций внутри. Это пригодится, когда нужно одним блоком разместить много информации. Например:<span style="color: rgb(128, 0, 0);"><br /></span><blockquote><br /><span style="color: rgb(128, 0, 0);">\cventry</span>{2006-2009}{Ph. D. (planned) Physics and Math}<br />{Moscow Engineering Physics Institute, Russia}<span style="color: rgb(0, 0, 0);"></span><br /><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(128, 0, 0);">\newline</span> Subject: optical cryptography in an incoherent quasimonochromatic light, digital image processing, and high dynamic range imaging}<span style="color: rgb(0, 0, 0);"></span><br /><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(128, 0, 0);">\newline</span> Supervisors: Manykin~E.A.~(RRC Kurtchatov Institute), Bykovskiy~A.Y.~(Lebedev Physical Institute, LPI), Starikov S.N.~(MePHI)}<span style="color: rgb(0, 0, 0);"></span><br /><span style="color: rgb(0, 0, 0);">{}</span><br /></blockquote><br />Каждый блок текста в фигурных скобках будет продолжать текущую строку, и чтобы начать новую строку, надо оповестить об этом LaTeX. Поэтому не стесняйтесь вставлять для <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(128, 0, 0);">\newline</span> перехода на другую строку.<br /><br />Для более коротких строчек в резюме используется <span style="color: rgb(128, 0, 0);">\cvline</span><span style="color: rgb(0, 0, 0);">{}{}</span><span style="color: rgb(128, 0, 0);"><br /></span>Вот например так:<br /><blockquote><span style="color: rgb(128, 0, 0);">\cvline</span><span style="color: rgb(0, 0, 0);">{2005}{Moscow Telecommunication Conference Award.}</span><br /></blockquote>Есть в moderncv такой раздел, как Computer Skills, и там реализовано перечисление <span style="color: rgb(102, 0, 0);">\cvcomputer</span>. Оно будет набирать ваши компьютерные таланты в две колонки - не знаю, удачный ли это ход. Если что, можно вместо <span style="color: rgb(102, 0, 0);">\cvcomputer</span> использовать <span style="color: rgb(128, 0, 0);">\cventry</span><span style="color: rgb(128, 0, 0);"></span> что в приводимом здесь примере и делается.<br /><br /><blockquote><span style="font-style: italic; color: rgb(128, 128, 128);">% Publications from a BibTeX file</span><br /><span style="color: rgb(128, 0, 0);">\nocite</span><span style="color: rgb(0, 0, 0);">{*}</span><br /><span style="color: rgb(128, 0, 0);">\bibliographystyle</span><span style="color: rgb(0, 0, 0);">{unsrt}</span><br /><span style="color: rgb(128, 0, 0);">\bibliography</span><span style="color: rgb(0, 0, 0);">{publications} </span><span style="font-style: italic; color: rgb(128, 128, 128);">% 'publications' is the name of a BibTeX file</span></blockquote><br />Если ваше резюме предполагает наличие публикаций в научных журналах, то их нужно экспортировать в отдельный bib-файл <span style="color: rgb(0, 0, 0);">publications.bib и скопировать в каталог, в котором находится теховский файл с резюме (имя для bib-файла можно подобрать любое). Вы ведь используете библиографические базы, правда? Если нет, то начать делать это очень <a target="_blank" href="http://mydebianblog.blogspot.com/2006/11/latex-jabref.html">легко</a>.<br /><br />Чтобы сделать bib-файл с публикациями быстро, достаточно создать временный tex-файл и накидать в него ссылок на ваши работы, скомпилировать и взять оттуда bib-файл. Ещё хорошо бы открыть его и выделить вашу фамилию в работах полужирным шрифтом, но это уже вензеля.<br /><br />После всех вышеописанных движений у вас должно получиться красиво оформленное резюме (которое в англоязычном мире называется CV, оно же Curriculum Vitae), вроде того, <a href="http://mikhailkonnik.googlepages.com/mikekonnik_classic.pdf">что получилось у </a><a target="_blank" href="http://mikhailkonnik.googlepages.com/mikekonnik_classic.pdf">меня</a>.<br /><br />В общем, это всё. После того, как ваше резюме готово, конвертируем его в HTML\RTF\PDF и выкладываем на самом видном месте в Интернете.</span></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-4113483046611533625?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com18tag:blogger.com,1999:blog-30744165.post-49227687786841892482009-03-09T06:20:00.002+03:002009-03-09T19:58:20.430+03:00Рассылка дисков - и как это всё происходит на самом делеКак-то у меня коллега Garfeild спросил, как лучше упаковывать диски при отправке. Думаю, эта информация будет полезна тем, кто решил / решает заняться этим хлопотным, но полезным делом. Накопленные ошибки и наступленные грабли выложены ниже <span class="fullpost"><br /><br /><b><big><font color="#996633">Предисловие</font></big></b><br />Время от времени при рассчётах за оплату дисков для отправки приходится сталкиваться с откровенно хамскими личностями. Они начинают высчитывать до копейки стоимость отправлений, придираются к непрезентабельной упаковке, требуют десятки дисков за себестоимость носителей и начинают сокрушаться о "погибели опенсорс-духа" вообще и в моём лице в особенности. Таким гражданам я по возможности вежливо отказываю и / или посылаю&nbsp;<strike></strike>в линуксцентр. Там им называют совсем другие цены, и желающие купить по почте 20 дистрибутивов за 200 рублей в графе "Итого" наблюдают астрономические цифры.<br /><br />Так вот, ежели кто сомневается в духе опенсорс - отвечаю словами Ричарда Столмена: "free market from any kind", то бишь "свободный рынок чего угодно". Есть я, есть местные аксакалы и есть Линуксцентр/Nixp.ru. Выбирайте.<br /><br /><br /><br /><big><b><font color="#996633">Технология отправки дисков почтой</font></b></big><br /><div align="right"><font color="#999999"><small>Очень надеюсь, что это не прочтут работники почтовых отделений,<br />в которых я отправляю письма :-)</small></font><br /></div> <br /><font color="#996633">Этап 0. Формулировка заказа</font><br />Добиться точной формулировки заказа и точного адреса. Это бывает нелегко: постоянные жители Интернета в ряде случаев не помнят свой точный адрес, а некоторые не подозревают о существовании почтовых индексов. Заказ должен формулироваться точно, никаких разночтений. Способы оплаты - минимум геморроя, минимум экзотики. Лучше всего сбербанком, на мобильник или электронными деньгами. Переводить лучше в систему электронных денег, которая позволяет быстро отслеживать приход и выводить деньги в наличность / счёт в российском банке. У меня это яндекс.деньги.<br /><font color="#663333">Короче:<br /></font><ul><li><font color="#663333">точный (документальный) заказ</font></li><li><font color="#663333">точный (полный) адрес</font></li><li><font color="#663333">способ оплаты</font></li></ul><br /><br /><font color="#996633">Этап 1. Подготовка</font><br />Диски лучше всего покупать на шпинделе, и сразу штук 100 - дешевле и удобнее. Никаких no-name / Мань-Лянь и прочей безродной китайщины - только честную китайщину типа Verbatim и TDK. <br /><br />Далее, на почте закупаемся конвертами за 1р30коп (они формата 23х16 см). Именно таких - в них помещается с запасом для упаковки диск по высоте. И по ширине можно запихнуть два в ряд, если очень постараться. В такой конверт без скрипа влезает 8-9 дисков. И ещё парочку покупаем полноформатных конвертов А4, за 4 рубля. Туда насовать дисков можно до одури.<br /><br />Кроме того, пойти на рынок и купить простой китайский клей-карандаш, фломастер для дисков, шариковую ручку и скотч, а так же где-нибудь найти пупырчатый упаковочный материал (можно купить или, идя по улице, смотреть по сторонам и не упускать момент) и картонные коробки - например, от купленного оборудования.<br /><br />Кроме того, заводим таблицу (или базу данных) - для отслеживания заказов и их состояния (если планируются масштабные отправки дисков).<br /><blockquote><small><font color="#666666">Сразу отвечаю на вопрос: почему я отправляю только письмами и никогда - посылками. Очень просто: заказное письмо - самый дешёвый и технологичный вид отправлений. Легко и просто наклепать десяток заказных писем и не мучаться с посылками, заполняя на почте описи и платя за всё это весьма ощутимые деньги.</font><br /></small></blockquote><br /><font color="#663333">Короче, потребуется:<br /></font><ul><li><font color="#663333">конверты 23x16 см и 21х29см</font></li><li><font color="#663333">клей-карандаш</font></li><li><font color="#663333">шариковая ручка</font></li><li><font color="#663333">фломастер для дисков<br /></font></li><li><font color="#663333">скотч</font></li><li><font color="#663333">упаковка (картон и пупырчатый полиэтилен)</font></li></ul><br /><font color="#996633">Этап 2. Пропаливание</font><br />Оплата получена - можно палить диски. Лучше это поставить на скрипты - тыкать по цветастым кнопкам быстро надоест. <b><i>Лично у меня каждый диск проходит проверку на совпадение контрольных md5-сумм после прожига</i></b>. Это удлиняет время обработки заказа, но даёт гарантию, что диск читается. <br /><blockquote><font color="#666666"><small>Поначалу я иногда отправлял диски с упреждением - то есть ещё до оплаты. В честности некоторых линуксоидов пришлось разочароваться: от троих деньги так и не пришли. Так что после этого я жёстко следую формуле "утром деньги - вечером стулья", отступая от неё лишь в крайних случаях (вопрос жизни и смерти / прокуратура стучит сапогами у дверей по поводу ворованного софта / угроза выхода из строя стратегических объектов жизнеобеспечения).</small></font><br /></blockquote>Скрипты <a href="http://mydebianblog.blogspot.com/2006/11/blog-post.html">пропаливания</a> и <a href="http://mydebianblog.blogspot.com/2006/11/cd-dvd.html">проверки</a> есть у меня в блоге. Готовые диски подписываются, и сразу складываются на уже заполненный конверт - чтобы потом не забыть, что и кому отправляется.<br /><font color="#663333">Короче:<br /></font><ul><li><font color="#663333">пропаливаем диск</font></li><li><font color="#663333">проверяем md5-суммы</font></li><li><font color="#663333">подписываем диск</font></li></ul><br /><font color="#996633"><br />Этап 3. Упаковка</font><br />Здесь начинается всё самое весёлое. Упаковка! То, о чём так часто забывают скрупулёзные и скуповатые рыцари духа Опенсорс. Если вы просто накидаете дисков в конверт и отправите - к месту назначения придёт кучка сверкающих обломков.<br /><br />Методом проб и ошибок найдены несколько технологий упаковки, которые дают хороший результат: диски приходят в нормальном состоянии и всё читается. Читаются даже те, что приходят с возвратом! Итак:<br /><blockquote><u>3.1 Картон + пупырчатый полиэтилен + бумага</u><br />Берём картонку, вдвое превышающую по формату конверт, сгибаем пополам, вкладываем туда отрезанный под размер пупырчатый полиэтилен <font color="#999999">(это очень эротичное занятие, поверьте мне)</font>. Теперь накладываем туда диски, стараясь класть их в "шахматном" порядке. Разделяем старой бумагой / газетой. В итоге получился бутерброд из дисков, картона и пупырышков. Теперь -<i> важный момент!</i> - несильно <b>сжимаем этот бутерброд и перетягиваем его скотчем</b>.<br />Скотчем клеем не только по вертикали, но и по горизонтали, стягивая друг к другу края "бутерброда" из дисков.<br />Если этого не сделать, диски в процессе транспортировки будут болтаться по конверту и поцарапаются!<br /></blockquote>Это если дисков мало (до 8 штук), а если много (больше 10) - такой способ не пройдёт. Тут нам пригодятся крупные конверты и старые глянцевые (или не очень) журналы, а так же красочные буклеты от купленного когда-то железа.<br /><blockquote><u>3.2 Картон + буклет</u><br />Берём журнал / буклет и набиваем его дисками, помещая между страницами. Шахматный порядок дисков тут тоже важен. Потом подкладываем под одну сторону картонку (для жёсткости), на первую и последнюю станицу вкладываем пупырчатую упаковку и всё это перетягиваем скотчем. Получится тоже бутерброд, только больше :-)<br /></blockquote>Ешё более простой и демократичный способ: <br /><blockquote><u>3.3. Части книги</u><br />Можно использовать ненужные книжки или методические пособия. Разрываем их на нужное количество половинок и вкладываем диски в шахматном порядке между страниц. Первую и последнюю страницу, содержащие диски, лучше всего склеивать скотчем, чтобы диски не болтались при транспортировке. Доходит превосходно, как и в предыдущих случаях.</blockquote>Теперь осталось это всунуть в конверт - море положительных эмоций гарантировано. В деле запихивания упакованных дисков в конверт могут пригодиться навыки игры в тетрис, ножницы и линейка.<br /><br />Даже если вам удастся всё это засунуть в конверт, его ещё надо заклеить. Про клей-карандаш было сказано совсем не зря: если вы думаете, что за рупь-тридцать вам густо намажут полоску конверта клеем - время в этом разочароваться. <br /><br />Намазываем густо клей-карандашом тыльную сторону конверта и, в разумных пределах прикладывая грубую физическую силу, пытаемся две половинки конверта свести. Яростно трём клеевую полоску конверта, чтобы оно-таки схватилось с бумагой.<br /><blockquote><b><i>Внимание! Не вздумайте заклеивать конверт скотчем вместо клея!</i></b> Это вправе делать только сами почтовики на пересылочных пунктах, о чём на конверте ставится печать: "Поступило в Н-ск МСЦ закленное клейкой лентой". <font color="#666666">Мне в своё время за это на почте надавали по шее. Только клеем, причём так, чтобы у работников почты не возникло и мысли о лёгком вскрытии конверта. При сомнениях о содержимом письма и плохой проклеенности они могут полезть внутрь.. и увидев там диски, с чувством выполненного долга разводят вас на ценное ускоренное письмо или того хуже посылку. Но об этом позже.</font><br /></blockquote>Теперь осматриваем этот здоровенный и пухлый конвертище - и если видим, что он начинает расходиться по швам, берём клей-карандаш снова и проходимся по швам.<br /><br />Ну и что мы после этого говорим тем, кто жадничает нам двадцатник? :-) <br /><br /><br /><font color="#996633">Этап 4. Отправка.</font><br />Такое письмо (не менее 50 грамм) в почтовый ящик у почтамта опускать не стоит, ибо это уже не простое письмо, а как минимум заказное, что стоит б<i><b>о</b></i>льших денег. Так что&nbsp;начинается психология, партизанщина и дипломатия: вам предстоит <strike>завалить босса уровня</strike>общение с сотрудниками почты.<br /><br />Значит, так: <b>посылать диски заказными письмами нельзя</b>. Это считается "товарным вложением" и если сотрудник почты прознается, то завернёт вас на ценное ускоренное письмо / посылку. Это влетит в 80-100 рублей и больше, в зависимости от веса и дальности. Заказное письмо стоит 20-25 рублей, максимум - 30.<font color="#666666"><br /></font><blockquote><font color="#666666"><small>Насчёт "товарных вложений" - тут ваша совесть должна быть кристально чиста: вы пересылаете лицензионное опенсорсное ПО, способствуя распространению никс-систем и вытеснению подлой проприетарщины.<br />На самом деле, почтовикам просто не нужна дополнительная ответственность за пересылку хрупкого предмета в конверте - ведь в случае чего, чек останется у вас и вы можете крупно попортить нервы почте (дураков хватает и прецеденты были). Но если диски упакованы по технологиям, описанным выше - всё отлично доходит, дёшево и быстро, и все счастливы.</small></font><br /></blockquote>Стало быть,&nbsp;ваша задача - чтобы сотрудник почты об этом не догадался либо получил от вас бодрый энергичный ответ, который его успокоит. Поэтому при вопросах "что в письме" и "почему такое пухлое" бодро отвечаем, что это книжка / буклет - и никаких придумок на ходу.<br /><br />Если письмо заклеено не плотно - сотрудник почты может его вскрыть. Мало ли, что вы собрались посылать - может, оно тикает и вибрирует? :-)<br /><blockquote><small><font color="#666666">Именно поэтому у Линуксцентра так дорого, а у меня дешевле: они - компания, и распорядок Почты для них закон. Поэтому они отправляют посылками и с солидной задержкой (никто специально ради вас на почту не ломанётся). Для частных лиц устав почты носит, скажем так, рекомендательный характер :</font>-)</small><br /></blockquote>Так вот, с чувством собственной правоты, которое "достигается упражнением", убеждаем почтаря в том, что вы посылаете книжку или буклетик. Отвечаем чётко и убедительно, с ясным взглядом выдерживая этот допрос с пристрастием.<br /><br />Когда сотруднику почты надоест это дело, скорее всего, конверты отправят и чек отдадут (сохраняйте его обязательно!). Но если вы будете этим промышлять регулярно, ваша физиономия быстро примелькается, и допросы с пристрастем могут быть более длительными и коварными - здесь всё зависит от сотрудника почты. Многим наплевать, что вы посылаете, но есть и сугубо принципиальные товарищи. Тут главное ни в коем случае не хамить и <i>быть предельно вежливым</i> - почтовых отделений поблизости мало даже в Москве, и плевать в колодец совершенно не стоит.<br /><br />Это к слову о партизанщине: разузнайте, где ещё в пределах вашей досягаемости есть почтовые отделения. Отправлять письма можно откуда угодно - не обязательно с почты по месту жительства. Если вы занимаетесь отправкой таких писем часто, есть смысл наведываться в разные почтовые отделения.<br /><br /><br /><font color="#996633">Этап 5. После отправки.</font><br />Известите того, кому посылаете диски, что они отправлены. Лучше приложить отсканированный чек с почты - так можно отследить на сайте почты, что диски на самом деле отправлены.<br />Со сроками дохода всё сложнее: обычно - неделя или полторы. От дальности зависит слабо: в Петропавловск-Камчатский одно письмо долетело за четыре дня, а в Вологду тащилось месяц.<br /><br /><br /><font color="#996633">Резюме<br /></font>Здесь я постарался описать технологию пересылки дисков - может быть, кто-то захочет заниматься отправкой дисков. И чтобы получатель не рассматривал красивые обломки вместо долгожданного диска с дистрибутивом, я поделился своим скромным (более сотни почтовых отправлений) опытом по этой части.<br /><br /><br /><font color="#996633">Эпилог</font><br />- "Виренс, ну и зачем тебе всё это надо!?" - спросит, может быть, любопытствующий читатель. Отвечаю: <br /><ol><li>Время, потраченное вместо флейма на ЛОРе, можно использовать лучше. Например, помогая распространению *никс-систем.<br /></li><li>Помогать другим людям вообще приятно. Особенно получая письма, что диски пришли :-)</li><li>Рассылка дисков не приносит огромных прибылей, но на оплату интернета, мобильника и коммунальных платежей вполне хватет.</li><li>И, наконец, философское: когда солнце моих дней зайдёт окончательно, и меня, может быть, спросят "так что ты сделал, чтобы тот мир стал немного лучше?" - и мне будет, что ответить :-)<br /></li></ol>В общем, рассылка дисков - дело интересное, хлопотное, увлекательное, забавное, поучительное и до некоторой степени прибыльное.</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-4922768778684189248?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com23tag:blogger.com,1999:blog-30744165.post-37819434372371271672009-03-04T09:00:00.000+03:002009-03-04T15:38:03.434+03:00Рассылка дисков приостановленаС сожалением сообщаю желающим пропалить диски, что временно (а скоро, видимо, и совсем) я приостанавливаю процесс отправки дисков. Этому есть несколько причин. Во-первых, накрылся винчестер, на котором хранились дистрибутивы. Увы, ничто не вечно. Во-вторых, у кафедры возникли претензии к нам на предмет огромных объёмов выкачиваемых данных. И наконец наша славная Почта подняла свои расценки почти вдвое против прошлогодних. Так что увы. Скоро выложу пост о том, как отсылать диски почтой - мало ли кому пригодится.<span class="fullpost"><br /><br />Вот, кстати, чем мне на прощание помахал винчестер:<br /><br /><blockquote>Mar 3 22:09:19 localhost kernel: ata2.01: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0<br />Mar 3 22:09:19 localhost kernel: ata2.01: (BMDMA stat 0x45)<br />Mar 3 22:09:19 localhost kernel: ata2.01: cmd ca/00:10:3f:ae:00/00:00:00:00:00/f0 tag 0 cdb 0x0 data 8192 out<br />Mar 3 22:09:19 localhost kernel: res 51/10:10:3c:ef:fb/00:00:00:00:00/fb Emask 0x81 (invalid argument)<br />Mar 3 22:09:19 localhost kernel: ata2.01: model number mismatch 'WDC WD4000KS-00MNB0' != ''<br />Mar 3 22:09:19 localhost kernel: ata2.01: revalidation failed (errno=-19)<br />Mar 3 22:09:19 localhost kernel: ata2.01: limiting speed to UDMA/133:PIO3<br />Mar 3 22:09:19 localhost kernel: ata2: failed to recover some devices, retrying in 5 secs<br />Mar 3 22:09:24 localhost kernel: ata2: soft resetting port<br />Mar 3 22:09:24 localhost kernel: ata2.01: revalidation failed (errno=-2)<br />Mar 3 22:09:24 localhost kernel: ata2.01: disabled<br />Mar 3 22:09:24 localhost kernel: ata2: soft resetting port<br />Mar 3 22:09:25 localhost kernel: sd 1:0:1:0: [sdc] Result: hostbyte=0x00 driverbyte=0x08<br />Mar 3 22:09:25 localhost kernel: sd 1:0:1:0: [sdc] Sense Key : 0xb [current] [descriptor]<br />Mar 3 22:09:25 localhost kernel: Descriptor sense data with sense descriptors (in hex):<br />Mar 3 22:09:25 localhost kernel: 72 0b 14 00 00 00 00 0c 00 0a 80 00 00 00 00 00<br />Mar 3 22:09:25 localhost kernel: 0b fb ef 3c<br />Mar 3 22:09:25 localhost kernel: sd 1:0:1:0: [sdc] ASC=0x14 ASCQ=0x0<br />Mar 3 22:09:25 localhost kernel: end_request: I/O error, dev sdc, sector 44607<br />Mar 3 22:09:25 localhost kernel: sd 1:0:1:0: rejecting I/O to offline device<br />Mar 3 22:09:25 localhost kernel: printk: 62 messages suppressed.<br />Mar 3 22:09:25 localhost kernel: Buffer I/O error on device sdc1, logical block 36250668<br />Mar 3 22:09:25 localhost kernel: ata2: EH complete<br />Mar 3 22:09:25 localhost kernel: ata2.01: detaching (SCSI 1:0:1:0)<br />Mar 3 22:09:25 localhost kernel: EXT3-fs error (device sdc1): ext3_readdir: directory #18120705 contains a hole at offset 0<br />Mar 3 22:09:25 localhost kernel: Buffer I/O error on device sdc1, logical block 5570<br />Mar 3 22:09:25 localhost kernel: lost page write due to I/O error on sdc1<br />Mar 3 22:09:25 localhost kernel: Buffer I/O error on device sdc1, logical block 0<br />Mar 3 22:09:25 localhost kernel: lost page write due to I/O error on sdc1<br />Mar 3 22:09:25 localhost kernel: Aborting journal on device sdc1.<br />Mar 3 22:09:25 localhost kernel: journal commit I/O error<br />Mar 3 22:09:25 localhost kernel: ext3_abort called.<br />Mar 3 22:09:25 localhost kernel: EXT3-fs error (device sdc1): ext3_journal_start_sb: Detected aborted journal<br />Mar 3 22:09:25 localhost kernel: Remounting filesystem read-only<br />Mar 3 22:09:25 localhost kernel: Buffer I/O error on device sdc1, logical block 27<br />Mar 3 22:09:25 localhost kernel: lost page write due to I/O error on sdc1<br />Mar 3 22:09:25 localhost kernel: sd 1:0:1:0: [sdc] Synchronizing SCSI cache<br />Mar 3 22:09:25 localhost kernel: sd 1:0:1:0: [sdc] Result: hostbyte=0x04 driverbyte=0x00<br />Mar 3 22:09:25 localhost kernel: sd 1:0:1:0: [sdc] Stopping disk<br />Mar 3 22:09:25 localhost kernel: sd 1:0:1:0: [sdc] START_STOP FAILED<br />Mar 3 22:09:25 localhost kernel: sd 1:0:1:0: [sdc] Result: hostbyte=0x04 driverbyte=0x00<br />Mar 3 22:09:34 localhost kernel: scsi 1:0:1:0: rejecting I/O to dead device<br />Mar 3 22:09:34 localhost kernel: Buffer I/O error on device sdc1, logical block 539<br />Mar 3 22:09:34 localhost kernel: EXT3-fs error (device sdc1): ext3_readdir: directory #2 contains a hole at offset 0<br />Mar 3 22:09:35 localhost kernel: scsi 1:0:1:0: rejecting I/O to dead device<br />Mar 3 22:09:35 localhost kernel: EXT3-fs error (device sdc1): ext3_readdir: directory #2 contains a hole at offset 0<br />Mar 3 22:11:30 localhost kernel: scsi 1:0:1:0: rejecting I/O to dead device<br />Mar 3 22:11:30 localhost kernel: Buffer I/O error on device sdc1, logical block 544<br />Mar 3 22:11:30 localhost kernel: lost page write due to I/O error on sdc1<br /></blockquote><br /></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-3781943437237127167?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com10tag:blogger.com,1999:blog-30744165.post-87441036397415090942009-03-02T05:13:00.000+03:002009-03-02T05:13:00.442+03:00Гибкая неубиваемая клавиатураНичто не вечно - и неудачно упавшая клавиатура тому подтверждение. Многое она повидала, и пролитый чай, и хлебные крошки, и набор огромных текстов, и консольные эксперименты, но падение с полуметровой высоты стало для неё последней каплей. И отправился я на поиски замены - и вот что нашёл... <span class="fullpost"><br /><br />Предыдущая честная китайщина с лейблом "Dialog" прослужила 3 года и повидала всякое, но меньше всего терпела жидкости - пролитый нетвёрдой рукой чай не прощала никогда, блокируя добрую половину клавиш на несколько часов. Ну и падать не любила :-)<br /><br />И тут на местном электронном рынке вижу такую занятную конструкцию. Мягкие резиновые кнопки, возможность свернуть клавиатуру в рулон и вообще оригинальное решение:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://img.alibaba.com/photo/10983213/Flexible_Full_Sized_Keyboard.jpg"><img src="http://img.alibaba.com/photo/10983213/Flexible_Full_Sized_Keyboard.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://img.alibaba.com/photo/10983213/Flexible_Full_Sized_Keyboard.jpg" alt="" border="0" /></a>Однако приходится привыкать к новому стилю нажатия - в общем, точно так же, как я привыкал и к той клавиатуре. Некоторое количество ошибок, плюс (или минус?) к тому, что неуверенности в нажатии новая клавиатура не прощает - никаких тебе мягких пробелов, только энергичные и чёткие удары по клавишам, как и завещал бессмертный Шахиджанян.<br /><br />Кстати, вот на производстве или в полевых условиях такая клавиатура просто бесценна: ничего не боится, не ломается, почти не боится падений и ударов. Наверняка придётся по душе всем тем, кто работает в непростых условиях. Кроме того, при энергичном наборе длинных текстов просто таки чувствуешь прилив сил к пальцам, и стиль становится сам по себе стремительнее и мощнее :-)<br /><br /><br /><big><b><span style="color: rgb(153, 102, 51);">Плюсы и минусы<br /></span></b></big>Определённо, в клавиатурах такого типа есть плюсы.<br /><ul><li>Пыле- и влагостойкость. Пролитый чай или кофе не оставит вас без возможности напечатать письмо или того хуже программу. По крайней мере, зелёный чай и Туборг Твист клавиатура выдерживает легко :-)</li><li>Подсветка. Вроде бы мелочь, а приятно печатать что-то глубоким вечером, когда не хочется включать свет или лампу. Мягкий синий свет, идущий от клавиатуры, подсвечивает буквы. При включённой подсветке слышен негромкий, но довольно отчётливый монотонный звук: он не мешает, и, кроме того, в моём случае легко нейтрализуется <a href="http://mydebianblog.blogspot.com/2007/02/logitech-noise-cancelling-headphone.html">наушниками</a> :-)<br /></li></ul>Конечно, неубиваемая клавиатура это хорошо, но есть у этого решения не только положительные стороны. Например:<br /><ul><li>Сравнительно большое начальное усилие нажатия. Привыкнув к отзывчивой клавиатуре с тихоходными клавишами, набирать тексты на такой клавиатуре немного непривычно, а заодно вылезают старые дурные привычки при наборе.</li><li>Совершенно иные тактильные ощущения. Большой ход клавиш, большая сила нажатия.</li><li>Клавиши расположены довольно далеко друг от друга - в общем эргономично, на мой взгляд, хотя после ноутбучных клавиатур несколько непривычно.<br /></li></ul>Так что после мягких клавиатур будет немного непривычно, особенно смущают два коротких пробела вместо одного длинного (это, очевидно, для возможности складывания). Субъективно, функциональные клавиши нажимаются немного тяжелее, чем обычные, и с непривычки нажимаешь их слегка. Немного практики - и полный порядок. Этот пост, кстати, набирается именно на новой клавиатуре, так что за очепятки строго можно не судить :-)<br /><br /><span style="color: rgb(153, 102, 51);">Резюме:</span><br />В общем, если старая клавиатура накрылась, а хочется новизны ощущений - можно попробовать разыскать подобное чудо в вашей местности. Называется Flexible Full sized keyboard. Есть ещё варианты без цифровой части и без подсветки.<script type="text/javascript"> fmates_member="FMC001676-0501"; fmates_c="eeb422"; fmates_bc="FFF3DC"; fmates_fc="111111"; fmates_ac="0000FF"; </script> <script type="text/javascript" src="http://fmates.ru/announce.js"></script></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-8744103639741509094?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com22tag:blogger.com,1999:blog-30744165.post-14370584992994895132009-02-23T00:01:00.019+03:002009-02-26T18:57:26.709+03:00MCBC - Мобильная система вооруженных силК празднику <strike>Дня Советской Армии</strike>Дня Защитника Отечества решил на свой страх и риск выложить личные впечатления о работе с MCBC 3.0 - мобильной системой вооруженных сил. На самом деле я не понимаю, почему это окутано такой страшной тайной - ну старый RedHat, ну немного допиленный. Вот и всё. Почему бы военным не выложить какую-нибудь демо-версию "для устрашения вероятного противника"?<br /><br />Так или иначе, но на некоторое время мне удалось поработать с этим чудом линуксостроения, о чём дальше кратко повествуется.<br /><br /><b><span style="color: rgb(204, 0, 0);">ПРЕДОСТЕРЕЖЕНИЕ! ВСЁ НИЖЕНАПИСАННОЕ ПРИВОДИТСЯ ТОЛЬКО В ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЯХ! НЕ ПРОСИТЕ МЕНЯ ВЫСЛАТЬ ЭТОТ ДИСТРИБУТИВ - У МЕНЯ ЕГО НЕТ, А ОБРАЗ УСТАНОВЛЕННОЙ СИСТЕМЫ БЕЗВОЗВРАТНО УНИЧТОЖЕН!</span></b><br /><span class="fullpost"><br /><br /><span style="color: rgb(153, 102, 51);"><big>Установка</big></span><br />Пока у меня не отобрали заветный диск с Тайной Родины :-) быстро готовлю виртуальный диск на 4 Гб и зажигаю QEMU для создания виртуальной машины, куда будет ставиться МСВС. Нас приветствует строгий экран, который сразу даёт понять, как всё серьёзно:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hM8AMxgJLzw/SZaT4nYzTiI/AAAAAAAABDM/CWyrOn2qQVM/s1600-h/MCBC-01.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 250px;" src="http://2.bp.blogspot.com/_hM8AMxgJLzw/SZaT4nYzTiI/AAAAAAAABDM/CWyrOn2qQVM/s320/MCBC-01.jpg" alt="" id="BLOGGER_PHOTO_ID_5302588212130303522" border="0" /></a><br />После чего идёт обычная ничем не прикрытая инициализация Linux-ядра. Инсталлятор сразу предупредил - перед началом установки нужно прочесть руководство Системного Программиста (!):<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hM8AMxgJLzw/SZaT-LuU_wI/AAAAAAAABDU/2jCP1m5o_Cg/s1600-h/MCBC-04.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 187px;" src="http://1.bp.blogspot.com/_hM8AMxgJLzw/SZaT-LuU_wI/AAAAAAAABDU/2jCP1m5o_Cg/s320/MCBC-04.jpg" alt="" id="BLOGGER_PHOTO_ID_5302588307783614210" border="0" /></a><br /><br />Я лично такие руководства читать не люблю, а люблю подходить к делу методом научного тыка. Тем, кто (надеюсь) будет устанавливать это в реальных "боевых" условиях, могу сказать, забегая вперёд: ошибиться инсталлятор вам практически не даст. Главное не намудрить при переразбивке диска и не снести свои суперсекретные данные.<br /><br />Дальше всё идёт так же, как в RedHat Linux - Anaconda делает свою работу чётко, только везде пишет не RedHat Linux, а MCBC, но сути это не меняет.<br /><br />Порадовал вопрос инсталлятора о том, использовать ли ему загрузчик. А вот, помнится, при установке MOPSLinux инсталлятор вообще предлагал страшное: запузырить загрузчик Lilo на дискету(!), называя её при этом диском А: Но это всё лирика, а вот MCBC-овский инсталлятор попросил ввести пароль для загрузчика, чтобы кто попало не передавал параметры ядру:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hM8AMxgJLzw/SZaUEb4fNmI/AAAAAAAABDc/d7i0N89AohU/s1600-h/MCBC-13.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 187px;" src="http://1.bp.blogspot.com/_hM8AMxgJLzw/SZaUEb4fNmI/AAAAAAAABDc/d7i0N89AohU/s320/MCBC-13.jpg" alt="" id="BLOGGER_PHOTO_ID_5302588415200409186" border="0" /></a><br /><br />В общем, разумно, а то мало ли какие гентозавры сядут за машину - а там Linux, и давай корёжить загрузчик :-) Дальше по ходу установки начались комплексы - правда не у меня, а у инсталлятора:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hM8AMxgJLzw/SZaUOig8XbI/AAAAAAAABDk/T7Q7SNhLk-E/s1600-h/MCBC-21.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 187px;" src="http://3.bp.blogspot.com/_hM8AMxgJLzw/SZaUOig8XbI/AAAAAAAABDk/T7Q7SNhLk-E/s320/MCBC-21.jpg" alt="" id="BLOGGER_PHOTO_ID_5302588588779396530" border="0" /></a><br /><br /><br />Видимо, программы управления ракетными комплексами устанавливаются при выборе многообещающего пункта <b>ВСЁ (ВКЛЮЧАЯ НЕОБЯЗАТЕЛЬНЫЕ)</b>. Вспомнив, что ракетных комплексов у меня в хозяйстве не имеется, решил ограничиться базовой конфигурацией, средствами разработки и подсистемой графического интерфейса. На всё потребовалось 1.7Гб и, получив от меня добро, система начала инсталлироваться. Даже учитывая то, что дело происходит в QEMU, установка прошла довольно быстро - всего за 12 минут.<br /><br /><span style="color: rgb(192, 192, 192);"><small><small><small><small><small><small><small><small>Этот материал написал Михаил Конник aka virens и опубликовал на своём блоге <a href="http://mydebianblog.blogspot.com/">Записки дебианщика</a>.<br /></small></small></small></small></small></small></small></small></span><br />Судя по копируемым пакетам, объём работ ВНИИНС составил, скажем так, не самую большую часть: библиотеки, которые копировались, были настолько древними, что я даже не знаю, из какого музея их уволокли. В названии каждого пакета гордо красовалось -vniins, видимо на что-то намекая. Ну да ладно, дядька Столлман до вас ещё доберётся, если узнает...<br /><br />Спросили пароль рута (не менее 8 символов), после чего я узрел вот это:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hM8AMxgJLzw/SZaUUGHPHLI/AAAAAAAABDs/iI4egRLNNpg/s1600-h/MCBC-27.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 187px;" src="http://4.bp.blogspot.com/_hM8AMxgJLzw/SZaUUGHPHLI/AAAAAAAABDs/iI4egRLNNpg/s320/MCBC-27.jpg" alt="" id="BLOGGER_PHOTO_ID_5302588684234595506" border="0" /></a><br />Однако, набор дискет. Хорошо хоть, что опционально, а то я уже забыл, как они выглядят. После удара с дискетами последовало добивание с просьбой указать объём "Видео ОЗУ":<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hM8AMxgJLzw/SZaUavqjejI/AAAAAAAABD0/0a5vgBRHFoA/s1600-h/MCBC-28.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 187px;" src="http://2.bp.blogspot.com/_hM8AMxgJLzw/SZaUavqjejI/AAAAAAAABD0/0a5vgBRHFoA/s320/MCBC-28.jpg" alt="" id="BLOGGER_PHOTO_ID_5302588798467799602" border="0" /></a><br />Интересно зачем, ну не в игрушки же играть... Потом частоты монитора. Вообще-то оно должно определиться само, но учитывая общую древность системы и явно не передового оборудования, на которое это всё будет ставиться, вопрос в общем-то логичный. Заодно не даёт расслабляться в стиле "убунту - тык-тык и готово".<br />Ну всё, меня поздравили с успешной установкой <strike>RedHat</strike>MCBC.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hM8AMxgJLzw/SZaUgRQpHrI/AAAAAAAABD8/gSPcVYW_W4E/s1600-h/MCBC-31.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 187px;" src="http://3.bp.blogspot.com/_hM8AMxgJLzw/SZaUgRQpHrI/AAAAAAAABD8/gSPcVYW_W4E/s320/MCBC-31.jpg" alt="" id="BLOGGER_PHOTO_ID_5302588893385268914" border="0" /></a><br />Было это совсем не так сложно, как пугали в начале установки, даже не пришлось читать руководство Системного Программиста. Теперь загружаемся в свежеустановленную МСВС.<br /><br /><br /><span style="color: rgb(153, 102, 51);"><big><br />Работа</big></span><br />При загрузке имеем графический бутлоадер и дешёвую надпись "starting MCBC".<br /><span style="color: rgb(192, 192, 192);"><small><small><small><small><small><small><small><small>Этот материал написал Михаил Конник aka virens и опубликовал на своём блоге <a href="http://mydebianblog.blogspot.com/">Записки дебианщика</a>.</small></small></small></small></small></small></small></small></span><br />При входе в систему нас ждёт сурового вида приветствие с флагом:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hM8AMxgJLzw/SZaUmjS60oI/AAAAAAAABEE/V923e2hGUJs/s1600-h/MCBC-34.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://1.bp.blogspot.com/_hM8AMxgJLzw/SZaUmjS60oI/AAAAAAAABEE/V923e2hGUJs/s320/MCBC-34.jpg" alt="" id="BLOGGER_PHOTO_ID_5302589001305870978" border="0" /></a><br />Пользователь при входе root. Для справки - USSR это я так назвал машину. А вот и графический режим...<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hM8AMxgJLzw/SZaUtORtpGI/AAAAAAAABEM/Y4mNFwKc5O4/s1600-h/MCBC-35.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://2.bp.blogspot.com/_hM8AMxgJLzw/SZaUtORtpGI/AAAAAAAABEM/Y4mNFwKc5O4/s320/MCBC-35.jpg" alt="" id="BLOGGER_PHOTO_ID_5302589115922752610" border="0" /></a><br />Хм... в справке написано (цитирую), что "были сделаны значительные доработки по части интерфейса пользователя". Страшно представить, что же было до <i>этого</i>. Очень надеюсь, что за компьютером будут сидеть нетребовательные к интерфейсу пользователи, ибо невесть откуда взятые страшные курсоры вкупе с глазораздирающими шрифтами комфортной работе не способствуют. Вообще шрифты определённо <i>удались</i>... ЛОРовским аналитикам просьба воздержаться от комментариев, а также предварительно закапать глазные капли и выпить валидолу :-) Я, конечно, не фанат шрифтоведения, но даже мои не слишком требовательные глаза этого долго терпеть не могут. Хотя МСВС это не то место, где ждут каких-то изящных изысков. Главное - чтобы работало. И оно в общем работает. И со стороны простого пользователя, работает достаточно хорошо.<br /><br />Ладно, работаем дальше. Работаем, кстати, от рута по умолчанию, что вообще-то<span style="color: rgb(192, 192, 192);">, напоминая экспертам из ВНИИНС,</span> не есть хорошо. Так, пошли по программам.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hM8AMxgJLzw/SZaU0PSf0bI/AAAAAAAABEU/W-eimDbvEgs/s1600-h/MCBC-37.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://4.bp.blogspot.com/_hM8AMxgJLzw/SZaU0PSf0bI/AAAAAAAABEU/W-eimDbvEgs/s320/MCBC-37.jpg" alt="" id="BLOGGER_PHOTO_ID_5302589236453560754" border="0" /></a><br />Есть игрушки - причём довольно много. В военной ОС особенно колоритно смотрятся игры "Сапёр" и "Парашюты", что понятно: специализация системы даёт о себе знать.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hM8AMxgJLzw/SZaU8a9iD3I/AAAAAAAABEc/Tu3YO4ty8u0/s1600-h/MCBC-44.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://4.bp.blogspot.com/_hM8AMxgJLzw/SZaU8a9iD3I/AAAAAAAABEc/Tu3YO4ty8u0/s320/MCBC-44.jpg" alt="" id="BLOGGER_PHOTO_ID_5302589377025806194" border="0" /></a>Из научных программ - только калькулятор. Есть неопознанная программа работы с изображениями пера ВНИИНС образца 2004 года, которая умеет менять масштаб и поворачивать изображения:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hM8AMxgJLzw/SZaVCE66sKI/AAAAAAAABEk/k_Xk3LFyvQA/s1600-h/MCBC-43.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://3.bp.blogspot.com/_hM8AMxgJLzw/SZaVCE66sKI/AAAAAAAABEk/k_Xk3LFyvQA/s320/MCBC-43.jpg" alt="" id="BLOGGER_PHOTO_ID_5302589474188472482" border="0" /></a>Из плюсов - только наличие кириллической справки. Из форматов знает лишь BMP, GIF, JPG и PNG - даже поддержки TIFF нет. Теперь я не удивлён, почему наш <i>не очень гражданский</i> заказчик передавал нам карты аэрофотосъёмки в формате BMP :-)<br /><br />Довольно забавно, однако в комплекте идёт много обоев для рабочего стола, даже для разрешений 1280х1024:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hM8AMxgJLzw/SZaVJI2JgUI/AAAAAAAABEs/CyR10LhpAxo/s1600-h/MCBC-46.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://2.bp.blogspot.com/_hM8AMxgJLzw/SZaVJI2JgUI/AAAAAAAABEs/CyR10LhpAxo/s320/MCBC-46.jpg" alt="" id="BLOGGER_PHOTO_ID_5302589595501297986" border="0" /></a>Обои идеологически выдержанные и довольно неплохие - кто-то из разработчиков в душе большой фотограф.<br /><br />Панель управления тоже есть, и, судя по справке, не менялась аж с 2003 года. Для управления программами есть frontend к RPM версии 4.2.1, хотя я не очень себе представляю, где могут быть репозитории к МСВС.<br /><br />В комплекте оказался MC (Midnight Commander), что приятно - будет чем с удовольствием побродить по файловой системе, чем сейчас и займёмся.<br /><br /><span style="color: rgb(153, 102, 51);"><big><br />Что внутри?</big></span><br />Собственно, не нужно быть большим специалистом, чтобы быстро выяснить - ядро здесь 2.4.32, а это значит, что на современное оборудование МСВС вам поставить не удастся. Плакали ваши SATA-винчестеры, PCI-E видеокарты вместе с доброй половиной флешек и других USB-устройств. Очень надеюсь, что информация там, где МСВС реально работает, переносится на дискетах или по сети: когда я ещё на Debian Woody работал с ядром 2.4.28, бОльшая часть флешек просто не опознавалась.<br /><br />Иксы версии 6.8.2 особых проблем на Cirrus Logic имени QEMU не повстречали. Опять-таки сильно надеюсь, что в войсковых частях продукции ATI не будет, а то искать драйвера под X.org 6.8.2 сейчас будет очень даже нелегко.<br /><br /><span style="color: rgb(192, 192, 192);"><small><small><small><small><small><small><small><small>Этот материал написал Михаил Конник aka virens и опубликовал на своём блоге <a href="http://mydebianblog.blogspot.com/">Записки дебианщика</a>.<br /></small></small></small></small></small></small></small></small></span><br />Исходники ядра лежат в /usr/src/linux-2.4.32-viins42, однако там только заголовочные файлы. Это ещё раз к вопросу о лицензии и о том, что кое-кто её не читал: зажимать исходники вообще и ядра в особенности крайне нехорошо, особенно вместе с удалением отовсюду копирайтов и самой лицензии GPL. Ну и писать в графе "Поставщик" пакета kernel своё ВНИИНС по крайней мере не вежливо по отношению к товарищу Торвальдсу.<br /><br />Много интересного содержит в себе каталог /usr/share - я нашёл там целых 4 версии automake (хотя я для своих мелких поделок обходился до сих пор почему-то одной), а также библиотеки GTK и QT времён очаковских и покоренья Крыма. В качестве загрузчика исправно трудится LiLo 22.8, расшаривание файлов с помощью Samba 2.2.12, печать с помощью CUPS версии 1.1.23. А вы говорите, что Debian это старьё... :-)<br /><br /><br /><span style="color: rgb(153, 102, 51);"><b>Документация<br /></b></span>Документация лежит в каталоге /usr/MCBC/doc и представляет собой HTML-файлы и кучей растровых вкраплений - ума не приложу, зачем нужно было оформлять "Систему единой документации" в виде намертво вбитых картинок. Упоминаний об истинных авторах программ нет - вытерты все упоминания о GPL, которой авторы сего обязаны решительно всем, ибо не будь Linux, они никогда бы не изваяли МСВС. На uname, впрочем, оно отзывается, как ему и положено: Linux 2.4.32.<br /><br />Документация в общем неплоха, и лучше, чем вообще ничего. Но некоторое разделы просто не написаны, и справка страдает отчаянным лаконизмом. Хотя на русском, без кучи орфографических ошибок, опечаток и англо-россиянской мешанины, как в том же LinuxXP. Есть немножко документации даже по PAM и Samba, хотя для понимания дела её, конечно, мало. То есть руководство Системного Программиста читать всё равно придётся :-)<br /><br /><span style="color: rgb(192, 192, 192);"><small><small><small><small><small><small><small><small>Этот материал написал Михаил Конник aka virens и опубликовал на своём блоге <a href="http://mydebianblog.blogspot.com/">Записки дебианщика</a>.<br /></small></small></small></small></small></small></small></small></span><br /><br /><span style="color: rgb(153, 102, 51);"><big><b>Впечатления</b></big></span><br />Скажем так, я ждал худшего. Но в целом довольно неплохо: установка, как и всё прочее, <span style="color: rgb(153, 153, 153);">не очень </span>честно содранное с RedHat, работает. Всё на русском, локализовано добросовестно, есть даже сколько-нибудь адекватная справочная система. Комплект программ спартанский, сугубо без излишеств (за исключением игр). Не знаю и не уверен, можно ли под это чудо программировать, ибо судя по стонам в разных интернетах, библиотеки в МСВС мягко говоря не первой свежести. Однако со стороны простого пользователя всё выглядит приемлемо, кроме страшных шрифтов и сомнительных курсоров.<br /><br />Ещё раз напоминаю о том, что дистрибутива у меня больше нет и МСВС выслать почтой даже не просите. Буду рад отзывам разработчиков (в частности интересует, на базе чего создан ELK) и конструктивной критике.<br /><br /><span style="color: rgb(153, 102, 51);">Ссылки по теме:</span><br />Кроме данной статьи, есть материал в <a href="http://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B1%D0%B8%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D0%92%D0%BE%D0%BE%D1%80%D1%83%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%A1%D0%B8%D0%BB">Википедии</a> и довольно <a href="http://www.osp.ru/os/2001/10/180520/">интересный</a> обзор.<br />(спасибо уважаемым комментаторам!)<br /></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-1437058499299489513?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com68tag:blogger.com,1999:blog-30744165.post-60049792098944730232009-02-09T03:18:00.001+03:002009-02-09T03:18:00.291+03:00Древовидные редакторы - outlinersЕсть такой жанр программ, как древовидные редакторы - или <span style="font-weight: bold;">outliners</span>, как называют их загадочные англичане. Такие программы очень полезны, так как являются неким промежуточным вариантом между кучей "липких заметок" (что хорошо реализуется с помощью <span style="font-weight: bold;">knotes</span>) и достаточно мощными базами данных (от <span style="font-weight: bold;">Kixi</span> до <span style="font-weight: bold;">PostgeSQL</span> и им подобных). То есть тот самый промежуточный вариант, когда липкие заметки уже не справляются с организацией данных, а городить базы данных нет нужды.<span class="fullpost"><br /><br /><br /><span style="color: rgb(153, 102, 51);"><big><b>Древовидная организация данных</b></big></span><br />Самый простой вариант в этом случае - просто создавать документы с нужными данными в любом удобном формате и хранить их в каталогах файловой системы. Подход простой, но не гибкий. Поэтому хорошо бы найти такую программу, которая хранила бы "липкие заметки" в виде какой-то организованной структуры. Вот тут-то мы и начинаем искать по репозиторию с ключевыми словами <span style="font-weight: bold;">outliner</span> и <span style="font-weight: bold;"> tree-like</span>. На выходе имеем:<br /><blockquote>vim-vimoutliner - script for building an outline editor on top of Vim<br />postgresql-contrib-8.1 - additional facilities for PostgreSQL<br />postgresql-contrib-7.4 - additional facilities for PostgreSQL<br />treeline - versatile tree-like structured custom data manager<br /></blockquote>Первое - для поклонников vim, про PostgreSQL уже говорилось выше. А вот treeline нам явно в тему. Кроме TreeLine, который есть в репозиториях Etch, имеется ещё замечательная программа Notecase, о которой речь пойдёт чуть ниже.<br /><br />К слову сказать, обе программы используют для хранения данных XML, что естественно и оправданно для таких задач. Поэтому записанные данные можно просмотреть и редактировать не только в создавших их программах, а в любом текстовом редакторе с подсветкой синтаксиса.<br /><br /><span style="color: rgb(153, 102, 51);">TreeLine<br /></span>После установки и непродолжительного использования становится понятно, что это скорее некое подобие хранителя паролей, так как отображение введённых данных идёт в строчку. Это для хранения сколько-нибудь больших текстов не годится.<br /><br /><br /><span style="color: rgb(153, 102, 51);">Notecase<br /></span>В репозитории его можно не искать, так как лицензия у приложения BSD. Но это не мешает нам скачать тарбол с <a href="http://notecase.sourceforge.net/index.html">сайта</a> автора, поставить нужные dev-пакеты и собрать себе самим это приложение.<br /><br />Сборка notecase в пакет проблем не представляет - нужно только поставить немного гномовских пакетов для сборки:<br /><blockquote>aptitude install libgtk2.0-dev libgnomevfs2-dev</blockquote>После сборки пакеты можно удалить. Процесс сборки ничем не отличается от уже описанного здесь.<br /><br />Собрав и установив пакет, мы получаем вот такое скромное приложение:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_hM8AMxgJLzw/SIThalEkceI/AAAAAAAAAtU/NnLBeTSB9hU/s1600-h/notecase1.jpg"><img src="http://bp0.blogger.com/_hM8AMxgJLzw/SIThalEkceI/AAAAAAAAAtU/NnLBeTSB9hU/s320/notecase1.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_hM8AMxgJLzw/SIThalEkceI/AAAAAAAAAtU/NnLBeTSB9hU/s320/notecase1.jpg" alt="" id="BLOGGER_PHOTO_ID_5225549314400743906" border="0" /></a><br /><br />Ничего лишнего, никаких бесполезных наворотов, но зато быстро и удобно.В программе есть русский интерфейс, включается так: Edit - Options - вкладка Global - Use system language settings.<br /><br />На скриншоте показано рабочее окно программы с уже имеющейся базой. Каждый элемент дерева может содержать подэлементы, к которым можно прикреплять текст или рисунки. В приведённом случае это база данных лабораторий канадских университетов, занимающихся обработкой изображений (список, конечно, не полон).<br /><br />Среди основных возможностей можно выделить:<br /><ul><li>шрифтовое оформление <span style="font-weight: bold;">bold</span>, <span style="font-style: italic;">italic</span>, <span style="text-decoration: underline;">underline</span>, <del>strikethrough</del>, <span style="color: rgb(255, 0, 0);">color </span></li><li><span style="color: rgb(255, 0, 0);"><span style="color: rgb(0, 0, 0);">шифрование документа</span></span></li><li><span style="color: rgb(255, 0, 0);"><span style="color: rgb(0, 0, 0);">поиск и замена, перетаскивание фргаментов деревьев</span></span></li><li><span style="color: rgb(255, 0, 0);"><span style="color: rgb(0, 0, 0);">вставка документов и файлов</span></span></li><li><span style="color: rgb(255, 0, 0);"><span style="color: rgb(0, 0, 0);">метки (tags) для элементов деревьев данных</span></span></li><li><span style="color: rgb(255, 0, 0);"><span style="color: rgb(0, 0, 0);">импорт и экспорт данных в другие приложения<br /></span></span></li></ul>В общем, если вам нужно хранить заметки в структурированном виде, то notecase это то, что вы искали.<br /><br /><br /><span style="color: rgb(153, 102, 51);">Ссылки<br /></span>Большое про древовидные редакторы можно прочесть например тут, TreeLine есть в дистрибутивах, а notecase можно скачать <a href="http://notecase.sourceforge.net/download.html">отсюда</a> (там же есть пакеты под Убунту).</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-6004979209894473023?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com24tag:blogger.com,1999:blog-30744165.post-62829249667860755612009-01-24T02:40:00.005+03:002009-01-26T16:53:08.024+03:00Юмор: UNIX-коаны Мастера ФуНесколько историй из замечательной книги "Искусство программирования для UNIX" Эрика Реймонда. Наверное, многие это уже читали, но всё равно - время от времени хорошо припадать к истокам и перечитывать классику.<b><br /><br /><span style="color: rgb(153, 102, 51);"><big>Мастер Фу и десять тысяч строк</big></span></b><b></b><span style="color: rgb(153, 102, 51);"><big><br /></big></span>Однажды Мастер Фу сказал заезжему программисту: "В одной строке кода shell-сценария больше духа UNIX, чем в десяти тысячах строк кода на С!"<span class="fullpost"><br /><br />Программист, гордый своими познаниями в С, ответил: "Может ли быть такое? Ведь С - язык, в котором реализовано само ядро UNIX!"<br /><br />На это Мастер Фу ответил: "Это так. Тем не менее, в одной строке shell-сценария больше духа UNIX, чем в десяти тысячах строк С!"<br /><br />Программист выглядел удрученным. "Но ведь через язык С мы познаем просвещенность патриарха Ритчи! Мы уподобляемся человеку с операционной системой и компьютером, который получает непревзойденную производительность!"<br /><br />Мастер Фу сказал: "То, что ты говоришь, правда. Однако в одной строке shell-сценария больше духа UNIX, чем в десяти тысячах строк С".<br /><br />Программист усмехнулся и поднялся, чтобы удалиться. Но Мастер Фу кивнул своему ученику Ньюби, который писал строку shell-кода на стоящей рядом белой доске, и сказал: "Господин программист, посмотрите на этот конвейер! Не заняла бы его реализация на C десять тысяч строк?"<br /><br />Просматривая то, что писал Ньюби, программист что-то бормотал в бороду. В конце концов, он согласился, что это так.<br /><br />"И сколько часов потребовалось бы вам для реализации и отладки этой программы на языке С?"<br /><br />"Много", - признал заезжий программист. "Но только безумец стал бы тратить столько времени, когда его ждет множество более достойных задач".<br /><br />"Так кто лучше понимает дух UNIX?" - спросил Мастер Фу. "тот, кто пишет десять тысяч строк, или тот, кто, сознавая тщетность этих усилий, извлекает пользу, не программируя?"<br /><br />Услышав это, программист достиг просветления.<br /><br /><br /><br /><br /><span style="color: rgb(0, 0, 0);"><span style="color: rgb(153, 102, 51);"><big><b>Мастер Фу и Скрипт Кидди</b><br /></big></span>Незнакомец из страны Вут пришел к Мастеру Фу во время его утренней трапезы.<br /><br />"Я не раз слышал о вашем величии, - сказал он. - Пожалуйста, научите меня всему, что знаете".<br /><br />Ученики Мастера Фу переглянулись, смущенные варварским языком пришельца. Мастер Фу только улыбнулся и ответил: "Вы хотите изучить путь UNIX?"<br /><br />"Я хочу быть волшебником-хакером, - ответил незнакомец, - и владеть всеми компьютерами".<br /><br />"Я не учу этому", - ответил Мастер Фу.<br /><br />Волнение незнакомца росло. "Отец, вы - позер и ничего больше, - сказал он. - Если бы Вы знали хоть что-нибудь, то научили бы меня".<br /><br />"Есть путь, который может привести тебя к мудрости", - сказал Мастер Фу. Мастер нацарапал какой-то IP-адрес на клочке бумаги. "Взлом этого сервера не составит для тебя большого труда, поскольку его хранители не компетентны. Возвращайся и расскажи мне, что ты ищешь".<br /><br />Незнакомец поклонился и вышел. Мастер Фу закончил трапезу.<br /><br />Прошли дни, а затем и месяцы. О незнакомце забыли.<br /><br />Спустя годы незнакомец из страны Вут вернулся.<br /><br />"Будь ты проклят!" - воскликнул он. - Я взломал этот сервер, это было не трудно, как ты и сказал. Но ФБР схватило меня и бросило в тюрьму".<br /><br />"Хорошо", -сказал Мастер Фу. - Ты готов к следующему уроку". Он написал IP-адрес на бумаге и передал его незнакомцу.<br /><br />"Вы с ума сошли?", - пронзительно вскрикнул тот. - После всего, что я прошёл, я не собираюсь снова взламывать компьютеры!"<br /><br />Мастер Фу улыбнулся. "Здесь, - сказал он, - начинается мудрость".<br /><br />Услышав это, странник достиг просветления.<br /><br /><br /><br /></span><span style="color: rgb(0, 0, 0);"><b><br /><span style="color: rgb(153, 102, 51);"><big>Мастер Фу учил своих студентов</big></span></b><span style="color: rgb(153, 102, 51);"><big><br /></big></span>"В учении дхармы есть направление, выражаемое мантрой патриарха Макилроя - "Делай хорошо одну вещь", которая подчеркивает, что программное обеспечение движется по пути UNIX, если оно ведет себя просто и последовательно, и обладает свойствами, которые могут быть легко смоделированы в мозгу пользователя и использованы другими программами".<br /><br />"Но есть и другое направление в учении Дхармы, примером которого может служить великая мантра патриарха Томпсона - "Находясь в сомнении, используй грубую силу", и различные сутры о большей ценности 90% функций прямо сейчас, чем 100% позже, что подчеркивает надежность и простоту реализации"<br /><br />"Теперь скажите мне: каким программам присущ дух UNIX?"<br /><br />Помолчав, Ньюби заметил: "Учитель, эти два учения могут противоречить друг другу".<br /><br />"Простой реализации может не хватить логики в граничных ситуациях, таких как нехватка ресурсов и неудачная попытка закрыть окно или таймаут во время незаконченной транзакции".<br /><br />"Когда возникают подобные граничные ситуации, поведение программного обеспечения становится непредсказуемым и сложным. Конечно, это не есть путь UNIX".<br /><br />Мастер Фу кивнул в знак согласия.<br /><br />"С другой стороны, хорошо известно, что причудливые алгоритмы хрупки. Кроме того, каждая попытка охватить граничные случаи имеет тенденцию взаимодействовать с центральными алгоритмами других программ и с кодами, описывающими другие граничные ситуации".<br /><br />"Таким образом, попытка изначально охватить все граничные случаи, гарантируя "простоту описания", может на деле привести к созданию кода, который излишне усложнен или слишком неустойчив, или который в случае, если он переполнен ошибками, не будет завершен никогда. Конечно, это не есть путь UNIX".<br /><br />Мастер Фу кивнул в знак согласия.<br /><br />"Каков же, в таком случае, пусть дхармы?" - спроил Ньюби.<br /><br />И учитель ответил: "Когда орел летит, забывает ли он о том, что его лапы касались земли? Когда тигр после прыжка настигает свою жертву, забывает ли он о моменте, проведенном в воздухе? Три фунта VAX!"<br /><br />Услышав это, Ньюби достиг просветления.<br /><br /><br /><br /></span><span style="color: rgb(0, 0, 0);"><span style="color: rgb(153, 102, 51);"><big><b>Мастер Фу и консультант по методологии<br /></b></big></span>Когда Мастер Фу и его ученик Ньюби посещали святые места, по вечерам Мастер Фу имел обыкновение выступать перед неофитами UNIX тех городов и сёл, где они останавливались на ночлег.<br /><br />Однажды среди тех, кто собрался его послушать, оказался консультант по методологии.<br /><br />"Если при доводке вы не профилируете регулярно ваш код в поисках узких мест, то вы уподобляетесь рыбаку, который закидывает сеть в озеро, в котором нет рыбы," - сказал Мастер Фу.<br /><br />"Не верно ли тогда и то, - сказал консультант по методологии, - что если вы не замеряете постоянно вашу производительность при управлении ресурсами, то вы уподобляетесь рыбаку, который закидывает сеть в озеро, в котором нет рыбы".<br /><br />"Однажды я встретил рыбака, который только что уронил сеть в озеро, по которому плыла его лодка, - сказал Мастер фу. - Он долго шарил по дну лодки, пытаясь найти ее".<br /><br />"Но если он уронил свою сеть в озеро, - сказал консультант по методологии, - то почему он искал ее в лодке?"<br /><br />"Потому, что он не умел плавать", - ответил Мастер Фу.<br /><br />Услышав это, консультант достиг просветления.<br /><br /><br /><br /><br /><big><span style="color: rgb(153, 102, 51);"><b>Мастер Фу рассуждает о графическом пользовательском интерфейсе</b><br /></span></big>Однажды вечером Мастер Фу и Ньюби посетили собрание программистов, которые встретились, чтобы поучиться друг у друга. Один из программистов спросил у Ньюби, к какой школе принадлежит он и его учитель. Когда Ньюби сказал, что он и его учитель - последователи Великого Пути UNIX, программист презрительно усмехнулся.<br /><br />"Средства командной строки UNIX грубые и отсталые, - насмешливо сказал он. - Современные, правильно спроектированные операционные системы делают все через графический интерфейс пользователя".<br /><br />Мастер Фу не проронил ни слова, но указал на Луну. Находившийся поблизости пёс залаял на руку учителя.<br /><br />"Я не понимаю вас", - сказал программист.<br /><br />Мастер Фу молчал и показал на образ Будды. Потом указал на окно.<br /><br />"Что вы хотите этим сказать?" - спросил программист.<br /><br />Мастер Фу указал на голову программиста. Потом указал на камень.<br /><br />"Почему вы не можете сказать яснее?" - потребовал программист.<br /><br />Мастер Фу задумчиво нахмурился, дважды щелкнул программиста по носу и бросил его в находящийся рядом мусорный контейнер.<br /><br />Пока программист пытался выбраться из горы мусора, пёс ходил рядом и лаял на него<br /><br />В этот момент программист достиг просветления.<br /><br /><br /></span><span style="color: rgb(0, 0, 0);"><b><br /><big><span style="color: rgb(153, 102, 51);">Мастер Фу и фанатик UNIX</span></big></b><br />Один фанатик UNIX, услышав, что Мастер Фу обладает мудростью Великого Пути, пришел к нему поучиться. Мастер Фу сказал ему:<br /><br />Когда патриарх Томпсон изобрел UNIX, он не понял этого. Потом к нему пришло понимание, но он уже не мог ничего изобрести.<br /><br />Когда патриарх Макилрой изобрел канал, он знал, что это преобразит программное обеспечение, но он не знал, что это изменит его мышление.<br /><br />Когда патриарх Ритчи изобрел язык С, он обрёк программистов на адские муки переполнения буфера, повреждения данных и ошибки из-за недействительного указателя.<br /><br />Действительно, патриархи были слепы и глупы!<br /><br />Фанатик был очень рассержен словами Мастер Фу.<br /><br />"Просвещенные, - запротестовал он, - открыли нам Великий путь UNIX. И если мы будем насмехаться над ними, мы потеряем добродетель и возродимся как звери или MCSE".<br /><br />"Бывает ли когда-либо твой код полностью без погрешностей и ошибок?" - спросил Мастер Фу.<br /><br />"Нет, - ответил фанатик, - такое недоступно человеку".<br /><br />"Мудрость патриархов, - сказал Мастер Фу, - в том, что они знали, что они безумцы".<br /><br />Услышав это, фанатик достиг просветления.<br /><br /><br /><br /><br /></span><span style="color: rgb(0, 0, 0);"><span style="color: rgb(153, 102, 51);"><big><b>Мастер Фу рассуждает о природе UNIX<br /></b></big></span>Один ученик сказал Мастеру Фу: "Нам говорят, что фирма SCO удерживает реальную власть над UNIX".<br /><br />Мастер Фу кивнул в знак согласия.<br /><br />Ученик продолжал: "Однако нам также говорят, что другая фирма, OpenGroup, также удерживает реальную власть над UNIX".<br /><br />Мастер Фу кивнул в знак согласия.<br /><br />"Как такое возможно?" - спросил ученик.<br /><br />Мастер Фу ответил: "SCO действительно владеет кодом UNIX, но код UNIX - это не сама UNIX. OpenGroup действительно владеет маркой UNIX, но название UNIX - это не сама UNIX".<br /><br />"В чем же тогда сущность UNIX?" - спросил студент.<br /><br />Мастер Фу ответил: "Не в коде. Не в имени. Не в мышлении. Вообще ничего материального. Вечное изменение без перемен".<br /><br />"Сущность UNIX проста и пуста. Поскольку она проста и пуста, она сильнее тайфуна"<br /><br />"Повинуясь естественным законам, она непреклонно расцветает в умах программистов, ассимилируя конструкции в свою собственную природу. Всякое программное обеспечение, которое хотело бы конкурировать с UNIX, должно стать таким, как UNIX: пустым, пустым, глубоко пустым, абсолютно лишенным содержания потоком!"<br /><br />Услышав это, ученик достиг просветления.<br /><br /><br /><br /><big><span style="color: rgb(153, 102, 51);"><br /><b>Мастер Фу и конечный пользователь</b></span></big><br />В другой раз, когда Мастер Фу давал публичную лекцию, один пользователь, наслушавшись рассказов о мудрости Учителя, подошел к нему за советом. Он трижды поклонился Мастеру Фу.<br /><br />"Я хочу постичь тайны Великого Пути, но командная строка вводит меня в замешательство".<br /><br />Некоторые из наблюдавших это неофитов начали насмехаться над пользователем, называя его невежественным и говоря, что Великий Путь UNIX предназначен только для тех, в ком есть порядок и интеллект.<br /><br />Учитель поднял руку, призывая к тишине, и позвал самого шумного из неофитов, который засмеялся первым, подойти к месту, где они сидели с пользователем.<br /><br />"Расскажи мне, - спросил он у неофита, - о коде, который ты написал, и о работе по проектированию, которую ты проделал".<br /><br />Неофит начал, заикаясь, отвечать, но не мог ничего сказать.<br /><br />Мастер Фу повернулся к пользователю. "Скажи мне, - осведомился он, - зачем ты ищешь Великий Путь?"<br /><br />"Мне не нравится программное обеспечение, которое окружает меня, - отвечал пользователь. - Оно ненадежно работает и не радует глаз и сердце. Услышав о том, что путь UNIX, хотя и труден, но превосходен, я пытаюсь отбросить все препоны и обман".<br /><br />"И чем же ты занимаешься, если так борешься с нынешним программным обеспечением?" - спросил Мастер Фу.<br /><br />"Я - строитель, - ответил пользователь. - Многие дома в этом городе построены моими руками".<br /><br />Мастер Фу повернулся к неофиту. "Кошка может насмехаться над тигром, - сказал он, - но это не превратит мяуканье в рев".<br /><br />Услышав это, неофит достиг просветления.<br /></span></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-6282924966786075561?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com23tag:blogger.com,1999:blog-30744165.post-80065525364627377392009-01-19T01:24:00.005+03:002009-01-19T13:57:42.883+03:00Математические формулы в LaTeX: Math in LaTeX<div style="text-align: right;">Этот пост является частью большой статьи<br />"<a href="http://mydebianblog.blogspot.com/2008/11/latex.html">Как оформить диплом в LaTeX?</a>",<br />которую написал <a href="http://www.blogger.com/profile/12420257446841864325">virens</a>,<br />ведущий блога "<a href="http://mydebianblog.blogspot.com/">Записки дебианщика</a>".<br /></div><br />Для того, чтобы написать диплом по физическим специальностям, трёхэтажных километровых формул набирать не надо, а надо усвоить несколько простых и понятных команд. Потребуется освоить окружение нумерованных и ненумерованных формул, а так же набор массива формул. Ну и основные команды для обозначения математических символов.<br /><br />Ещё раз повторюсь: эти посты предназначены для физиков, таких простых крепких парней, которым от математиков нужны только основные вещи. Я ни в коем разе не претендую здесь (и вообще нигде) на полноту изложения - лишь приведу то, что использую сам. И этого должно хватить для набора не особенно заматемаченного диплома по физике.<span class="fullpost"><br /><br /><br /><span style="color: rgb(153, 102, 51); font-weight: bold;font-size:130%;" >О формулах в целом</span><br /><span style="color: rgb(0, 0, 0);">Первое и главное - пользуйтесь тем, что предоставляет вам интегрированная среда. В её вкладках должны быть таблицы греческих символов, основных математических операторов и прочего. Самое главное, что их в таком виде гораздо проще найти и быстренько вставить, не перелистывая талмуд со специальными символами. Специально учить это не нужно, вы и так большинство команд запомните за их красивые и лаконичные названия. Едва ли вы испытаете серьёзные затруднения с названиями греческих букв </span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(96, 96, 0);">\alpha</span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(96, 96, 0);">\gamma</span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(0, 0, 0);"> или </span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(96, 96, 0);">\delta</span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(0, 0, 0);">. Основные математические символы тоже должны быть в вашей интегрированной среде, такие как столь любимые физиками приближённые равенства </span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(96, 96, 0);">\approx</span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(0, 0, 0);"> или интегралы с суммами.</span><br /><br /><span style="color: rgb(0, 0, 0);">Быстрый старт такой: формулы можно вставлять в строке или торжественно на отдельной строке, по центру и с номером. Малозначительные формулы типа </span><span style="color: rgb(0, 160, 0);">$f(x) = a</span><span style="color: rgb(96, 96, 0);">\cdot</span><span style="color: rgb(0, 160, 0);"> x + b$</span><span style="color: rgb(0, 0, 0);"> вставляются, как правило, в строчку, а что-то серьёзное, вроде разложения в ряд Фурье:</span><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">equation</span><span style="color: rgb(0, 0, 0);">}</span><span style="color: rgb(96, 96, 0);">\label</span><span style="color: rgb(0, 160, 0);">{eq:fourierrow}</span><br /><span style="color: rgb(0, 160, 0);">f(x) =</span><br /><span style="color: rgb(96, 96, 0);">\frac</span><span style="color: rgb(0, 160, 0);">{A_0}{2}</span><br /><span style="color: rgb(0, 160, 0);">+</span><br /><span style="color: rgb(96, 96, 0);">\sum</span><span style="color: rgb(0, 160, 0);"> </span><span style="color: rgb(96, 96, 0);">\limits</span><span style="color: rgb(0, 160, 0);">_{n=1}^{</span><span style="color: rgb(96, 96, 0);">\infty</span><span style="color: rgb(0, 160, 0);">} A_n </span><span style="color: rgb(96, 96, 0);">\cos</span><span style="color: rgb(0, 160, 0);"> </span><span style="color: rgb(96, 96, 0);">\left</span><span style="color: rgb(0, 160, 0);">( </span><span style="color: rgb(96, 96, 0);">\frac</span><span style="color: rgb(0, 160, 0);">{2 n </span><span style="color: rgb(96, 96, 0);">\pi</span><span style="color: rgb(0, 160, 0);"> x}{</span><span style="color: rgb(96, 96, 0);">\nu</span><span style="color: rgb(0, 160, 0);">} - </span><span style="color: rgb(96, 96, 0);">\alpha</span><span style="color: rgb(0, 160, 0);">_n </span><span style="color: rgb(96, 96, 0);">\right</span><span style="color: rgb(0, 160, 0);">)</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">equation</span><span style="color: rgb(0, 0, 0);">}</span><br /><br /><span style="color: rgb(0, 0, 0);">оформляется с помощью окружения</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">equation</span><span style="color: rgb(0, 0, 0);">}</span><span style="color: rgb(96, 96, 0);">\label</span><span style="color: rgb(0, 160, 0);">{ссылка} ... </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">equation</span><span style="color: rgb(0, 0, 0);">}. При этом напротив неё будет помещён номер, а в тексте будем ставить (</span><span style="color: rgb(240, 0, 0);">\ref</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">ссылка</span><span style="color: rgb(0, 0, 0);">}) чтобы на неё сослаться. Если формула приводится для пояснений и ссылаться на неё не надо, следует поставить после equation звёздочку, то есть equation*</span><br /><br /><span style="color: rgb(0, 0, 0);">Внутрь можно вставить метку с помощью команды </span><span style="color: rgb(240, 0, 0);">\label</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">ссылка</span><span style="color: rgb(0, 0, 0);">}. Как уже отмечалось, ставить нужно осмысленные ссылки и выбивать из своей головы лень и глупость, проявляющуюся в ссылках типа </span><span style="color: rgb(240, 0, 0);">\label</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">uravnenie6</span><span style="color: rgb(0, 0, 0);">}.</span><br /><br /><span style="color: rgb(0, 0, 0);">Если в математическом режиме нужно поставить верхний индекс в LaTeX, набираем символ возведения в степень </span><span style="color: rgb(0, 160, 0);">$x^2$</span><span style="color: rgb(0, 0, 0);">. Тут есть хитрая партизанская засада: LaTeX возведёт в степень только первый символ после крышки. Для того, чтобы набирать длинные формулы в степенях, используем фигурные скобки </span><span style="color: rgb(0, 160, 0);">$x^{2a + b}$</span><span style="color: rgb(0, 0, 0);">. Полезно оставлять между символами пробелы, а не лепить всё в одну кучу. Нижний индекс в LaTeX набирается символом подчёркивания </span><span style="color: rgb(0, 160, 0);">$x_1$</span><span style="color: rgb(0, 0, 0);">, и партизанская засада тут та же самая: хотите набирать длинные пассажи в подчёркивании - ставьте фигурные скобки </span><span style="color: rgb(0, 160, 0);">$x_{i,j}$</span><span style="color: rgb(0, 0, 0);">. Пару дней практики, и вы будете рубить формулы в LaTeX, как Чапай белогвардейцев.</span><br /><br /><span style="color: rgb(0, 0, 0);">Если вы обрабатываете изображения, вам пригодится команда </span><span style="color: rgb(128, 0, 0);">\times</span><span style="color: rgb(0, 0, 0);">, что позволяет набирать вставки типа NхM в более приглядном виде </span><span style="color: rgb(0, 160, 0);">$N</span><span style="color: rgb(96, 96, 0);">\times</span><span style="color: rgb(0, 160, 0);"> M$</span><span style="color: rgb(0, 0, 0);">. А если нужно набрать в LaTeX символ градуса, можно воспользоваться таким трюком: </span><span style="color: rgb(0, 160, 0);">$180^</span><span style="color: rgb(96, 96, 0);">\circ</span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(0, 0, 0);">, что наберёт 180 градусов.</span><br /><br /><span style="color: rgb(0, 0, 0);">Короче говоря, чтобы вставить формулу внутрь текста, используем ненумеруемое окружение </span><span style="color: rgb(0, 160, 0);">$ $</span><span style="color: rgb(0, 0, 0);">, внутри которого помещаем формулу, например: </span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(96, 96, 0);">\alpha</span><span style="color: rgb(0, 160, 0);">_0$</span><span style="color: rgb(0, 0, 0);"> это даст нам букву АЛЬФА с индексом 0. Если же вам нужен верхний индекс в формуле, используем символ </span><span style="color: rgb(128, 0, 0);">^</span><span style="color: rgb(0, 0, 0);"> так: </span><span style="color: rgb(0, 160, 0);">$x^2$</span><span style="color: rgb(0, 0, 0);">, а если в степень нужно возвести сразу много символов, экранируем их фигурными скобками (они не отображаются в тексте): </span><span style="color: rgb(0, 160, 0);">$x^{2x+1}$</span><span style="color: rgb(0, 0, 0);">.</span><br /><br /><span style="color: rgb(0, 0, 0);">Ещё раз подчеркну: LaTeX не сложен, он прост как рельса. LaTeX сделает<span style="font-style: italic;"> </span></span><span style="color: rgb(0, 0, 0);"><span style="font-style: italic;">буквально то</span>, что вы попросите. Поэтому не бойтесь в коде документа перемежать текст вставками математического режима - такой слегка костылявый способ приведёт вас к желаемому результату быстро и просто.</span><br /><br /><br /><span style="color: rgb(153, 102, 51); font-weight: bold;font-size:130%;" >... и парочка примеров формул в LaTeX</span><span style="font-size:130%;"> </span><span style="color: rgb(0, 0, 0);">Не люблю длинные теоретические введения и сразу перехожу к примерам, чем мы сейчас и займёмся. С точки зрения математиков часть моих примеров кошмарны полным отсутствием смысла, но идею должны передать.</span><br /><br /><span style="color: rgb(153, 102, 51); font-weight: bold;">Набор формулы LaTeX с дробью и суммами</span> <span style="color: rgb(0, 0, 0);"><br />Пример первый: набор формулы с дробью и суммами:</span><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hM8AMxgJLzw/SXGNqd17lkI/AAAAAAAABCI/K5AmEfxgfNs/s1600-h/img15.png"><img src="http://4.bp.blogspot.com/_hM8AMxgJLzw/SXGNqd17lkI/AAAAAAAABCI/K5AmEfxgfNs/s320/img15.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 264px; height: 111px;" src="http://4.bp.blogspot.com/_hM8AMxgJLzw/SXGNqd17lkI/AAAAAAAABCI/K5AmEfxgfNs/s320/img15.png" alt="" id="BLOGGER_PHOTO_ID_5292166797841897026" border="0" /></a><span style="color: rgb(0, 0, 0);">Код такой:</span><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">equation</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 160, 0);">f(x,y,</span><span style="color: rgb(96, 96, 0);">\alpha</span><span style="color: rgb(0, 160, 0);">, </span><span style="color: rgb(96, 96, 0);">\beta</span><span style="color: rgb(0, 160, 0);">) =</span><br /><span style="color: rgb(96, 96, 0);">\frac</span><span style="color: rgb(0, 160, 0);">{</span><span style="color: rgb(96, 96, 0);">\sum</span><span style="color: rgb(0, 160, 0);"> </span><span style="color: rgb(96, 96, 0);">\limits</span><span style="color: rgb(0, 160, 0);">_{n=1}^{</span><span style="color: rgb(96, 96, 0);">\infty</span><span style="color: rgb(0, 160, 0);">} A_n </span><span style="color: rgb(96, 96, 0);">\cos</span><span style="color: rgb(0, 160, 0);"> </span><span style="color: rgb(96, 96, 0);">\left</span><span style="color: rgb(0, 160, 0);">( </span><span style="color: rgb(96, 96, 0);">\frac</span><span style="color: rgb(0, 160, 0);">{2 n </span><span style="color: rgb(96, 96, 0);">\pi</span><span style="color: rgb(0, 160, 0);"> x}{</span><span style="color: rgb(96, 96, 0);">\nu</span><span style="color: rgb(0, 160, 0);">} </span><span style="color: rgb(96, 96, 0);">\right</span><span style="color: rgb(0, 160, 0);">)}</span><br /><span style="color: rgb(0, 160, 0);">{</span><span style="color: rgb(96, 96, 0);">\prod</span><span style="color: rgb(0, 160, 0);"> </span><span style="color: rgb(96, 96, 0);">\mathcal</span><span style="color: rgb(0, 160, 0);">{F} </span><span style="color: rgb(96, 96, 0);">\{</span><span style="color: rgb(0, 160, 0);">g(x,y)</span><span style="color: rgb(96, 96, 0);">\}</span><span style="color: rgb(0, 160, 0);"> }</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">equation</span><span style="color: rgb(0, 0, 0);">}</span><br /><br /><span style="color: rgb(0, 0, 0); font-style: italic;">Предупреждаю сразу: структурируйте свой LaTeXовский код грамотно, без сваливания всего в одну кучу и набора в строчку длинных формул. Иначе потом не поймёте, где отец, а где кузнец :-)</span><br /><br /><span style="color: rgb(0, 0, 0);">Если посмотреть на код формулы без страха и ужаса, можно заметить в нём много простых и понятных английских слов. Слово </span><span style="color: rgb(128, 0, 0);">\sum</span><span style="color: rgb(0, 0, 0);"> это, видимо, суммирование, а </span><span style="color: rgb(128, 0, 0);">\limits</span><span style="color: rgb(0, 0, 0);"> - это пределы суммирования. Если немного напрячь познания английского, то можно вспомнить слово fraction и догадаться, что </span><span style="color: rgb(128, 0, 0);">\frac</span><span style="color: rgb(0, 0, 0);"> скорее всего набирает дроби. Как видно, набор формул в LaTeX для лиц, каким-то образом получивших техническое образование вкупе с зачатками знаний английской языка, в общем-то не такая неподъёмная задача.</span><br /><br /><span style="color: rgb(0, 0, 0);">Но довольно лирики. Итак, эта формула с дробью - дроби набираются командой </span><span style="color: rgb(128, 0, 0);">\frac</span><span style="color: rgb(0, 0, 0);">{числитель}{знаменатель}. Лично я числитель и знаменатель в дробях набираю на разных строчках в коде - так проще потом работать с формулой.</span><br /><br /><span style="color: rgb(0, 0, 0);">Примечательная команда </span><span style="color: rgb(128, 0, 0);">\limits</span><span style="color: rgb(0, 0, 0);">, которая позволяет набирать верхние и нижние пределы в формулах LaTeX. Сама по себе команда </span><span style="color: rgb(128, 0, 0);">\sum</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(128, 0, 0);">\prod</span><span style="color: rgb(0, 0, 0);"> или </span><span style="color: rgb(128, 0, 0);">\int</span><span style="color: rgb(0, 0, 0);"> просто отрисовывает интеграл, а если нужно над ними ставить пределы - вспоминаем по </span><span style="color: rgb(128, 0, 0);">\limits</span><span style="color: rgb(0, 0, 0);">_{n=1}^{</span><span style="color: rgb(128, 0, 0);">\infty</span><span style="color: rgb(0, 0, 0);">}. Здесь нижний предел это n=1, а верхний предел бесконечен (символ бесконечности в LaTeX это команда </span><span style="color: rgb(128, 0, 0);">\infty</span><span style="color: rgb(0, 0, 0);">).</span><br /><br /><span style="color: rgb(0, 0, 0);">Набор скобок в LaTeX немного замороченный на первый взгляд. Можно просто поставить обычные скобки, но если формула большая, то можно поставить большие скобки в LaTeX командой </span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(96, 96, 0);">\Bigr</span><span style="color: rgb(0, 160, 0);">($</span><span style="color: rgb(0, 0, 0);"> и </span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(96, 96, 0);">\Bigl</span><span style="color: rgb(0, 160, 0);">)$</span><span style="color: rgb(0, 0, 0);">.</span><br /><br /><span style="color: rgb(0, 0, 0);">Для тех, кому нужно работать с Фурье-преобразованием, будет приятно набрать букву F в более торжественном стиле для функций, над которым выполняется преобразование: </span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(96, 96, 0);">\mathcal</span><span style="color: rgb(0, 160, 0);">{F} </span><span style="color: rgb(96, 96, 0);">\{</span><span style="color: rgb(0, 160, 0);">g(x,y)</span><span style="color: rgb(96, 96, 0);">\}</span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(0, 0, 0);"> наберёт большую и красивую букву F для фурье-преобразования.</span><br /><br /><span style="color: rgb(0, 0, 0);">Основные идеи вы к этому моменту должны воспринять, потому как у меня уже подоспел второй примерчик с интегралами.</span><br /><br /><span style="color: rgb(192, 192, 192);"><small><small><small><small><small><small><small><small>Этот материал написал Михаил Конник aka virens и опубликовал на своём блоге <a href="http://mydebianblog.blogspot.com/">Записки дебианщика</a>.<br /></small></small></small></small></small></small></small></small></span><br /><br /><span style="color: rgb(240, 0, 0);">\subsection</span><span style="color: rgb(0, 0, 0);">{Длинные формулы в LaTeX}</span><br /><span style="color: rgb(0, 0, 0);">Например, нужно набрать длинную формулу, а она не умещается в строчку. Вот пример такого монстра:</span><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hM8AMxgJLzw/SXGSrOeHpwI/AAAAAAAABC8/qtr6G1oYjmo/s1600-h/img19.png"><img src="http://3.bp.blogspot.com/_hM8AMxgJLzw/SXGSrOeHpwI/AAAAAAAABC8/qtr6G1oYjmo/s320/img19.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 96px;" src="http://3.bp.blogspot.com/_hM8AMxgJLzw/SXGSrOeHpwI/AAAAAAAABC8/qtr6G1oYjmo/s320/img19.png" alt="" id="BLOGGER_PHOTO_ID_5292172308453500674" border="0" /></a><br /><br /><span style="color: rgb(0, 0, 0);">Код формулы:</span><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">eqnarray</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 160, 0);">S_{</span><span style="color: rgb(96, 96, 0);">\text</span><span style="color: rgb(0, 0, 0);">{вых}</span><span style="color: rgb(0, 160, 0);">}(x_2, y_2) = </span><span style="color: rgb(96, 96, 0);">\iint</span><span style="color: rgb(0, 160, 0);"> dx_0 dy_0 A_0 g(x_0, y_0) </span><span style="color: rgb(96, 96, 0);">\cdot</span><span style="color: rgb(0, 160, 0);"> h(x_2-x_0, y_2 -y_0) = </span><span style="color: rgb(96, 96, 0);">\\</span><br /><span style="color: rgb(0, 160, 0);">= A_0 </span><span style="color: rgb(96, 96, 0);">\underbrace</span><span style="color: rgb(0, 160, 0);">{</span><span style="color: rgb(96, 96, 0);">\iint</span><span style="color: rgb(0, 160, 0);"> dx_0 dy_0 </span><span style="color: rgb(96, 96, 0);">\;</span><span style="color: rgb(0, 160, 0);"> g(x_0, y_0) </span><span style="color: rgb(96, 96, 0);">\cdot</span><span style="color: rgb(0, 160, 0);"> h(x_2-x_0, y_2 -y_0)}_{</span><span style="color: rgb(96, 96, 0);">\text</span><span style="color: rgb(0, 0, 0);">{по определению это есть свёртка }</span><span style="color: rgb(0, 160, 0);">} = A_0 g </span><span style="color: rgb(96, 96, 0);">\otimes</span><span style="color: rgb(0, 160, 0);"> h</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">eqnarray</span><span style="color: rgb(0, 0, 0);">}</span><br /><br /><span style="color: rgb(0, 0, 0);">Так, что у нас тут новенького? Во-первых, тут интеграл, да не простой, а двойной. Интеграл в LaTeX обозначается как </span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(96, 96, 0);">\int</span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(0, 0, 0);">, двойной интеграл в LaTeX - </span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(96, 96, 0);">\iint</span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(0, 0, 0);">.</span><br /><br /><span style="color: rgb(0, 0, 0);">Во-вторых, внизу формулы есть подпись - её можно поставить с помощью команды </span><span style="color: rgb(128, 0, 0);">\underbrace</span><span style="color: rgb(0, 0, 0);">{формула}{подпись}. Подпись под буквой можно вставить, воспользовавшись командой </span><span style="color: rgb(128, 0, 0);">\text</span><span style="color: rgb(0, 0, 0);">{текст}, которая на время выключит математический режим в формуле и вставит текст.</span><br /><br /><span style="color: rgb(0, 0, 0);">В-третьих, собственно, в LaTeX перенос формул на новую строку можно выполнить обычной командой </span><span style="color: rgb(128, 0, 0);">\\</span><span style="color: rgb(0, 0, 0);"> и это избавит от необходимости использовать окружение eqnarray, о котором чуть ниже.</span><br /><br /><span style="color: rgb(0, 0, 0);">Так же можно отметить маленькую, но очень изящную команду </span><span style="color: rgb(128, 0, 0);">\cdot</span><span style="color: rgb(0, 0, 0);">, которая наберёт вам маленькую точечку умножения вместо этой страшной вордовской *. Так же в этом примере показано, как поставить пробел в формуле LaTeX, а именно командой </span><span style="color: rgb(128, 0, 0);">\;</span><span style="color: rgb(0, 0, 0);"> то есть </span><span style="color: rgb(0, 160, 0);">$dx_0 dy_0 </span><span style="color: rgb(96, 96, 0);">\;</span><span style="color: rgb(0, 160, 0);"> g(x_0, y_0)$</span><span style="color: rgb(0, 0, 0);">.</span><br /><br /><span style="color: rgb(192, 192, 192);"><small><small><small><small><small><small><small><small>Этот материал написал Михаил Конник aka virens и опубликовал на своём блоге <a href="http://mydebianblog.blogspot.com/">Записки дебианщика</a>.<br /></small></small></small></small></small></small></small></small></span><br /><br /><br /><br /><span style="color: rgb(153, 102, 51); font-weight: bold;">Большие и страшные формулы в несколько строк</span> <span style="color: rgb(0, 0, 0);">Если формула очень длинная и в строку не помещается, используем окружение </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">eqnarray</span><span style="color: rgb(0, 0, 0);">}</span><span style="color: rgb(0, 160, 0);"> ... </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">eqnarray</span><span style="color: rgb(0, 0, 0);">}, а переносы формулы на другую строку делаем с помощью </span><span style="color: rgb(128, 0, 0);">\\</span><br />В результате получаем:<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hM8AMxgJLzw/SXGQPisrwNI/AAAAAAAABCY/sbkM5gE0oGU/s1600-h/img24.png"><img src="http://1.bp.blogspot.com/_hM8AMxgJLzw/SXGQPisrwNI/AAAAAAAABCY/sbkM5gE0oGU/s320/img24.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 85px;" src="http://1.bp.blogspot.com/_hM8AMxgJLzw/SXGQPisrwNI/AAAAAAAABCY/sbkM5gE0oGU/s320/img24.png" alt="" id="BLOGGER_PHOTO_ID_5292169633823703250" border="0" /></a><span style="color: rgb(0, 0, 0);">Код формулы:</span><br /><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">eqnarray</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 160, 0);">J_</span><span style="color: rgb(96, 96, 0);">\lambda</span><span style="color: rgb(0, 160, 0);">(x_2, y_2, s_2) =</span><br /><span style="color: rgb(96, 96, 0);">\iint</span><span style="color: rgb(0, 160, 0);"> I_</span><span style="color: rgb(96, 96, 0);">\lambda</span><span style="color: rgb(0, 160, 0);">(x_2, y_2) </span><span style="color: rgb(96, 96, 0);">\cdot</span><span style="color: rgb(0, 160, 0);"> </span><span style="color: rgb(96, 96, 0);">\Biglm</span><span style="color: rgb(0, 160, 0);">_</span><span style="color: rgb(96, 96, 0);">\lambda</span><br /><span style="color: rgb(96, 96, 0);">\left</span><span style="color: rgb(0, 160, 0);">(</span><br /><span style="color: rgb(96, 96, 0);">\frac</span><span style="color: rgb(0, 160, 0);">{x_2-x_0}{</span><span style="color: rgb(96, 96, 0);">\lambda</span><span style="color: rgb(0, 160, 0);"> </span><span style="color: rgb(96, 96, 0);">\cdot</span><span style="color: rgb(0, 160, 0);"> s_2} , </span><span style="color: rgb(96, 96, 0);">\frac</span><span style="color: rgb(0, 160, 0);">{y_2-y_0}{</span><span style="color: rgb(96, 96, 0);">\lambda</span><span style="color: rgb(0, 160, 0);"> </span><span style="color: rgb(96, 96, 0);">\cdot</span><span style="color: rgb(0, 160, 0);"> s_2}</span><span style="color: rgb(96, 96, 0);">\right</span><span style="color: rgb(0, 160, 0);">)</span><span style="color: rgb(96, 96, 0);">\Bigr</span><span style="color: rgb(0, 160, 0);">^2 </span><span style="color: rgb(96, 96, 0);">\,</span><span style="color: rgb(0, 160, 0);">dx_0</span><span style="color: rgb(96, 96, 0);">\,</span><span style="color: rgb(0, 160, 0);">dy_0 = </span><span style="color: rgb(96, 96, 0);">\nonumber</span><span style="color: rgb(0, 160, 0);"> </span><span style="color: rgb(96, 96, 0);">\\</span><br /><span style="color: rgb(0, 160, 0);">= I_</span><span style="color: rgb(96, 96, 0);">\lambda</span><span style="color: rgb(0, 160, 0);">(x_2, y_2) </span><span style="color: rgb(96, 96, 0);">\otimes</span><span style="color: rgb(0, 160, 0);"> </span><span style="color: rgb(96, 96, 0);">\Biglm</span><span style="color: rgb(0, 160, 0);">_</span><span style="color: rgb(96, 96, 0);">\lambda</span><span style="color: rgb(0, 160, 0);"> </span><span style="color: rgb(96, 96, 0);">\left</span><span style="color: rgb(0, 160, 0);">( </span><span style="color: rgb(96, 96, 0);">\frac</span><span style="color: rgb(0, 160, 0);">{x_2}{</span><span style="color: rgb(96, 96, 0);">\lambda</span><span style="color: rgb(0, 160, 0);"> </span><span style="color: rgb(96, 96, 0);">\cdot</span><span style="color: rgb(0, 160, 0);"> s_2} , </span><span style="color: rgb(96, 96, 0);">\frac</span><span style="color: rgb(0, 160, 0);">{y_2}{</span><span style="color: rgb(96, 96, 0);">\lambda</span><span style="color: rgb(0, 160, 0);"> </span><span style="color: rgb(96, 96, 0);">\cdot</span><span style="color: rgb(0, 160, 0);"> s_2} </span><span style="color: rgb(96, 96, 0);">\right</span><span style="color: rgb(0, 160, 0);">) </span><span style="color: rgb(96, 96, 0);">\Bigr</span><span style="color: rgb(0, 160, 0);">^2</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">eqnarray</span><span style="color: rgb(0, 0, 0);">}</span><br /><br /><br /><span style="color: rgb(0, 0, 0);">Окружение eqnarray позволяет набирать длинные формулы и нумеровать перенесённые на новую строку части формулы. По умолчанию номер ставится после каждой части формулы, перенесённой на новую строку. Если нумеровать кусок не нужно - ставим директиву </span><span style="color: rgb(128, 0, 0);">\nonumber</span><span style="color: rgb(0, 0, 0);"> перед переносом формулы </span><span style="color: rgb(128, 0, 0);">\\</span><span style="color: rgb(0, 0, 0);">.</span><br /><br /><span style="color: rgb(0, 0, 0);">В коде формулы я так же хочу отметить конструкцию </span><span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(160, 128, 0);">\Bigl ... \Bigr</span><span style="color: rgb(0, 0, 0);">. Это позволит вам ставить в формулах LaTeX большие скобки, и не только скобки: в данном случае приведён пример с модулем. </span><br /><br /><br /><span style="color: rgb(240, 0, 0);"></span><span style="font-size:130%;"><span style="color: rgb(153, 102, 51); font-weight: bold;">Заключение</span></span><br /><span style="color: rgb(0, 0, 0);">Разумеется, это далеко не полное руководство по набору формул, но я думаю, что прочтение это поста поможет кому-то быстро включиться (а мне - вспомнить :-)) про набор основных формул в LaTeX. </span><span style="color: rgb(0, 0, 0);"></span></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-8006552536462737739?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com14tag:blogger.com,1999:blog-30744165.post-24272146151495250602009-01-05T03:27:00.012+03:002009-01-19T12:01:57.429+03:00Набор таблиц в ЛаТеХе: Tables in LaTeX<div style="text-align: right;">Этот пост является частью большой статьи<br />"<a href="http://mydebianblog.blogspot.com/2008/11/latex.html">Как оформить диплом в LaTeX?</a>",<br />которую написал <a href="http://www.blogger.com/profile/12420257446841864325">virens</a>,<br />ведущий блога "<a href="http://mydebianblog.blogspot.com/">Записки дебианщика</a>".<br /></div><br />При наборе таблиц в LaTeX, как нигде, нужна правильная организация кода. Откровенно говоря, таблицы - это то, что в ТеХе делать сложнее всего. И если вы свалите в кучу все управляющие метки ЛаТеХа, то проклянете потом всё на свете. Однако если делать всё грамотно и не лениться, то сделать таблицу в LaTeX не так трудно. Ещё раз подчеркну, что в деле набора таблиц в ЛаТеХе как нигде важно структурирование кода. Здесь каждый выбирает свой стиль по своему вкусу, однако надо постараться отличать управляющие символы от собственно текста таблицы. Например, символ &amp; можно помещать на новую строку.<span class="fullpost"><br /><br />Таблица в идеологическом смысле очень похожа на рисунок: есть окружение <span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">table</span><span style="color: rgb(0, 0, 0);">}... </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">table</span><span style="color: rgb(0, 0, 0);">}, которое собственно и содержит все ``опознавательные знаки'' вроде подписи и ссылки.<br /><br /><span style="color: rgb(0, 0, 0);">Есть одна вещь, которую почему-то не освещают в книжках, и совершенно напрасно. Дело в том, что есть для таблиц два окружения - </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">table</span><span style="color: rgb(0, 0, 0);">}... </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">table</span><span style="color: rgb(0, 0, 0);">} и </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular</span><span style="color: rgb(0, 0, 0);">}{|rlc|} ... </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular</span><span style="color: rgb(0, 0, 0);">}+. Так вот, окружение </span><span style="color: rgb(0, 0, 0);"><span style="font-weight: bold;">table</span>, как ни странно, вам таблицу не создаст, и вы будете тщетно биться лбом о </span><span style="color: rgb(0, 0, 0);">стену. Окружение </span><span style="color: rgb(0, 0, 0);"><span style="font-weight: bold;">table</span> даёт вам возможность оформить заголовок таблицы с помощью </span><span style="color: rgb(128, 0, 0);">\caption</span><span style="color: rgb(0, 0, 0);">{} и поставить на таблицу ссылку с помощью привычного </span><span style="color: rgb(240, 0, 0);">\label</span><span style="color: rgb(0, 0, 0);">{}.</span><br /></span><p></p><blockquote><small><span style="color: rgb(0, 0, 0);">Кое-кто из комментаторов распалялся по поводу того, что, дескать, ``всё уже давно написано, читайте книжки''. Я ещё раз уточню свою позицию по этому поводу:<span style="font-style: italic;"> </span></span><span style="color: rgb(0, 0, 0);"><span style="font-style: italic;">время тыкания людей в пудовые талмуды и дурно написанные маны прошло</span>. Документация, как и программы, должны быть повёрнуты к пользователю лицом, а не задницей. Специализированные методические пособия типа этого помогут людям начать разбираться с предметом, подталкивая к изучению книг и делая кривую обучения более пологой. Но это лирика и я не буду на ней задерживаться.</span></small><br /></blockquote><p><span style="color: rgb(0, 0, 0);">Сама таблица, то есть текст, набранный строго по столбцам и колонкам, делается с помощью окружения </span><span style="color: rgb(0, 0, 0);">tabular. Важно помнить, что </span><span style="color: rgb(0, 0, 0);"><span style="font-weight: bold;">tabular</span> есть просто текст-как-таблица и не содержит заголовка или ссылки. Сама по себе таблица находится в окружении </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular</span><span style="color: rgb(0, 0, 0);">}{|rlc|} ... </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular</span><span style="color: rgb(0, 0, 0);">}+. Здесь вертикальная линия обозначает отделение линией столбцов, а R L и С выравнивание соответственно по правому / левому краю и по центру.<br /></span></p><p><span style="color: rgb(0, 0, 0);">Если столбец слишком широкий, можно задать его ширину с помощью выражения p{0.7</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}, которое сделает столбец шириной в 70</span><span style="color: rgb(128, 0, 0);">\%</span><span style="color: rgb(0, 0, 0);"> от ширины линии, например так: </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular</span><span style="color: rgb(0, 0, 0);">}{|p{0.4</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}p{0.4</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}}+ сделает таблицу с двумя колонками по 40</span><span style="color: rgb(128, 0, 0);">\%</span><span style="color: rgb(0, 0, 0);"> от ширины линии и отчеркнёт вертикальными линиями по бокам. Строки отделяются друг от друга при помощи команды </span><span style="color: rgb(128, 0, 0);">\hline</span><span style="color: rgb(0, 0, 0);">| а каждая строка таблицы завершается двойным слешем </span><span style="color: rgb(128, 0, 0);">\\</span><span style="color: rgb(0, 0, 0);"> или командой </span><span style="color: rgb(128, 0, 0);">\linebreak</span><span style="color: rgb(0, 0, 0);">. В общем, это всё, что нужно для набора таблиц. Ну и немного удачи, конечно :-)</span><br /><br /><span style="color: rgb(192, 192, 192);"><small><small><small><small><small><small><small><small>Этот материал написал Михаил Конник aka virens и опубликовал на своём блоге <a href="http://mydebianblog.blogspot.com/">Записки дебианщика</a>.<br /></small></small></small></small></small></small></small></small></span><br /><br /><span style="color: rgb(0, 0, 0);">И немного вещей, которые помогут вам в дальнейшем. Набросайте на листке бумаги или графическом редакторе примерную схему таблицы - это всегда проще, а заодно есть возможность подумать о том, а нужна ли таблица вообще. Если решили, что она всё-таки нужна, то это торжественное дело нужно скорее всего оформить по центру, для чего вам пригодится окружение </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">center</span><span style="color: rgb(0, 0, 0);">} </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">center</span><span style="color: rgb(0, 0, 0);">}. Простановка ссылок осуществляется так же, как и всегда, то есть: поставить ссылку в LaTeX можно командой </span><span style="color: rgb(240, 0, 0);">\label</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabl:Textssylki</span><span style="color: rgb(0, 0, 0);">} а сослаться на неё командой </span><span style="color: rgb(240, 0, 0);">\ref</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabl:Textssylki</span><span style="color: rgb(0, 0, 0);">}. Не забываем ставить тильду между словом и ссылкой слово~</span><span style="color: rgb(240, 0, 0);">\ref</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabl:Textssylki</span><span style="color: rgb(0, 0, 0);">} чтобы ваша ссылка не уехала на другую строчку.</span><br /><br /><span style="color: rgb(0, 0, 0);">Напоминаю снова и снова о необходимости ставить понятные и информативные ссылки, чтобы вы сами смогли потом понять, где то место, куда вы ссылаетесь. Ставим длинные и подробные имена ссылок, чтобы потом не искать по Тайге ris21 или tabl43. Никаких оправданий таким именам ссылок нет, и дядя Кнут будет недоволен :-)</span><br /><br /><span style="color: rgb(0, 0, 0);">Итак, прочтите ещё разок этот текст сначала для лучшего запоминания и давайте разберём пару примерчиков. </span><p></p><p><br /><br /><span style="color: rgb(153, 102, 51);"><big><b>Набор простой таблицы в LaTeX</b></big></span><br /><span style="color: rgb(0, 0, 0);">Например, нам не требуется ссылка на таблицу или подпись под ней - тогда достаточно только окружения </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular</span><span style="color: rgb(0, 0, 0);">}... </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular</span><span style="color: rgb(0, 0, 0);">}. Ниже - пример кода простой таблицы в ЛаТеХе.</span></p><p><span style="color: rgb(0, 0, 0);"></span><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">center</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular</span><span style="color: rgb(0, 0, 0);">}{ccc}</span><br /><span style="color: rgb(0, 0, 0);"> Расширение краёв: &amp; </span><span style="color: rgb(128, 0, 0);">\textbf</span><span style="color: rgb(0, 0, 0);">{1,0-1,4} &amp; размер ФРТ </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> Аподизация: &amp; </span><span style="color: rgb(128, 0, 0);">\textbf</span><span style="color: rgb(0, 0, 0);">{0,25-0,30}&amp; размер ФРТ </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> Сглаживания краёв: &amp; </span><span style="color: rgb(128, 0, 0);">\textbf</span><span style="color: rgb(0, 0, 0);">{0,25-0,50}&amp; размер ФРТ </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">center</span><span style="color: rgb(0, 0, 0);">}</span><br /><br /><br /><span style="color: rgb(240, 0, 0);"></span><br /></p> <p> </p><div align="center"> <table cellpadding="3"> <tbody><tr><td align="center">Расширение краёв:</td> <th align="center"><span class="textbf">1,0-1,4</span></th> <td align="center">размер ФРТ</td> </tr> <tr><td align="center">Аподизация:</td> <td align="center"><span class="textbf">0,25-0,30</span></td> <td align="center">размер ФРТ</td> </tr> <tr><td align="center">Сглаживания краёв:</td> <td align="center"><span class="textbf">0,25-0,50</span></td> <td align="center">размер ФРТ</td></tr></tbody></table></div><br /><br /><br /><span style="color: rgb(0, 0, 0);">Здесь есть та самая партизанская засада, про которую я говорил выше: если вы внутрь окружения </span><span style="color: rgb(0, 0, 0);"><span style="font-weight: bold;">tabular</span> поставите метку командой </span><span style="color: rgb(240, 0, 0);">\label</span><span style="color: rgb(0, 0, 0);">{} а потом сошлётесь на неё, то получите совсем не то, что ждёте. Ссылка в тексте укажет на </span><span style="color: rgb(0, 0, 0);"><span style="font-style: italic;">номер раздела</span>, а вовсе не таблицы.</span><br /><br /><span style="color: rgb(0, 0, 0);">Вот тут-то мы и вспоминаем про то, что есть такое замечательное окружение как </span><span style="color: rgb(0, 0, 0);"><span style="font-weight: bold;">table</span>. Давайте посмотрим, как наша таблица будет выглядеть с этим окружением:</span><br /><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">table</span><span style="color: rgb(0, 0, 0);">}[H]</span><br /><span style="color: rgb(128, 0, 0);">\caption</span><span style="color: rgb(0, 0, 0);">{Исправьте это на подпись к таблице}</span><br /><span style="color: rgb(240, 0, 0);">\label</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular:timesandtenses</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">center</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular</span><span style="color: rgb(0, 0, 0);">}{ccc}</span><br /><span style="color: rgb(0, 0, 0);"> Расширение краёв: &amp; </span><span style="color: rgb(128, 0, 0);">\textbf</span><span style="color: rgb(0, 0, 0);">{1,0-1,4} &amp; размер ФРТ </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> Аподизация: &amp; </span><span style="color: rgb(128, 0, 0);">\textbf</span><span style="color: rgb(0, 0, 0);">{0,25-0,30}&amp; размер ФРТ </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> Сглаживания краёв: &amp; </span><span style="color: rgb(128, 0, 0);">\textbf</span><span style="color: rgb(0, 0, 0);">{0,25-0,50}&amp; размер ФРТ </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">center</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">table</span><span style="color: rgb(0, 0, 0);">}</span><br /><br /><br /><br /><br /><table cellpadding="3"><caption><strong>Таблица 1.1:</strong><br />Исправьте это на подпись к таблице</caption><tbody><tr><td align="center">Расширение краёв:</td><th align="center"><span class="textbf">1,0-1,4</span></th><td align="center">размер ФРТ</td></tr><tr><td align="center">Аподизация:</td><td align="center"><span class="textbf">0,25-0,30</span></td><td align="center">размер ФРТ</td></tr><tr><td align="center">Сглаживания краёв:</td><td align="center"><span class="textbf">0,25-0,50</span></td><td align="center">размер ФРТ</td></tr></tbody></table><br /><br />Вроде как то же самое, только номер теперь стал 1.1. А кроме того, окружение <span style="font-weight: bold;" class="textbf">table</span> позволит вам указывать LaTeX, где вы хотите видеть таблицу:<br /><br /><ol><li><span style="color: rgb(0, 0, 0);"> оставить определение места таблицы в тексте на усмотрение ЛаТеХа - </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">table</span><span style="color: rgb(0, 0, 0);">}[h]| "хотелось бы таблицу здесь";</span></li><li><span style="color: rgb(0, 0, 0);"> настойчиво просить разместить таблицу после текста </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">table</span><span style="color: rgb(0, 0, 0);">}[h!]| "очень хочу таблицу здесь", или</span></li><li><span style="color: rgb(0, 0, 0);"> ударить кулаком по столу - таблицу тут </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">table</span><span style="color: rgb(0, 0, 0);">}[H]| "ХОЧУ таблицу здесь и баста", а с прибавлением буквы p мы заставляем поместить ЛаТеХ таблицу отдельно на страницу так: </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">table</span><span style="color: rgb(0, 0, 0);">}[pH]|.</span></li></ol><span style="color: rgb(240, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">Вставка подписи к таблице </span><span style="color: rgb(128, 0, 0);">\caption</span><span style="color: rgb(0, 0, 0);">{Исправьте это на подпись к таблице}</span><span style="color: rgb(0, 0, 0);"> и ссылки на таблицу </span><span style="color: rgb(240, 0, 0);">\label</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular:timesandtenses</span><span style="color: rgb(0, 0, 0);">} делается так же, как и для рисунков.<br /><br /><br /><br /><span style="color: rgb(153, 102, 51);"><big><b>Объединение нескольких колонок в одну<br /></b></big></span><br /></span><span style="color: rgb(0, 0, 0);">Часто нужно сделать в колонке пояснение, и убрать вертикальные линии для этого. В визуальных табличных редакторах типа OpenOffice.Calc это довольно просто. В ЛаТеХе это ничуть не сложнее, просто для этого нужно воспользоваться командой </span><span style="color: rgb(128, 0, 0);">\multicolumn</span><span style="color: rgb(0, 0, 0);">.</span><br /><br /><span style="color: rgb(0, 0, 0);">Синтаксис у неё простой: </span><span style="color: rgb(128, 0, 0);">\multicolumn</span><span style="color: rgb(0, 0, 0);">{2}{|c|}{Результаты измерений} означает, что мы объединяем 2 строки в таблице, получившаяся ячейка будет центрирована и с вертикальными линиями, а в ней будет текст </span><span style="color: rgb(0, 0, 0);"><span style="font-style: italic;">Результаты измерений</span>. Вот как это выглядит в реальной жизни:</span><br /><br /><div align="center"> <div align="center"> <a name="228"></a> <table border="1" cellpadding="3"> <caption><strong>Таблица 2:</strong> Измерительные характеристики цифровой камеры Canon EOS 400D.</caption> <tbody><tr><td align="center">Параметр</td> <td align="center">Значение</td> </tr> <tr><td align="center">Разрешение</td> <td align="center"><!-- MATH $3888 \times 2592$ --> <span class="MATH">3888х2592</span> </td> </tr> <tr><td align="center">Размер сенсора</td> <td align="center"><!-- MATH $22.2 \times 14.8$ --> <span class="MATH"></span>22.2х14.8 мм</td> </tr> <tr><td align="center">АЦП</td> <td align="center">12 bit</td> </tr> <tr><td colspan="2" align="center"><span>Результаты измерений</span></td> </tr> <tr><td align="center">Темновое смещение (BLO)</td> <td align="center">256</td> </tr> <tr><td align="center">Максимальный линейный сигнал</td> <td align="center">3070 DN</td> </tr> <tr><td align="center">Значение насыщения</td> <td align="center">3470 DN</td> </tr> </tbody></table> </div> </div><br /><br /><br /><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">table</span><span style="color: rgb(0, 0, 0);">}[H]</span><br /><span style="color: rgb(128, 0, 0);">\caption</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(240, 0, 0);">\label</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tab:canonsummary</span><span style="color: rgb(0, 0, 0);">}Измерительные характеристики цифровой камеры Canon EOS 400D.}</span><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">center</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular</span><span style="color: rgb(0, 0, 0);">}{|c|c|}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\hline</span><br /><span style="color: rgb(0, 0, 0);">Параметр &amp; Значение </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\hline</span><br /><span style="color: rgb(0, 0, 0);">Разрешение &amp; </span><span style="color: rgb(0, 160, 0);">$3888 </span><span style="color: rgb(96, 96, 0);">\times</span><span style="color: rgb(0, 160, 0);"> 2592$</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);">Размер сенсора &amp; </span><span style="color: rgb(0, 160, 0);">$22.2 </span><span style="color: rgb(96, 96, 0);">\times</span><span style="color: rgb(0, 160, 0);"> 14.8$</span><span style="color: rgb(0, 0, 0);"> мм </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);">АЦП &amp; 12~bit</span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(128, 0, 0);">\hline</span><br /><span style="color: rgb(128, 0, 0);">\multicolumn</span><span style="color: rgb(0, 0, 0);">{2}{|c|}{Результаты измерений} </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(128, 0, 0);">\hline</span><br /><span style="color: rgb(0, 0, 0);">Темновое смещение (BLO) &amp; 256 </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);">Максимальный линейный сигнал &amp; 3070~DN </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);">Значение насыщения &amp; 3470~DN </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\hline</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">center</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">table</span><span style="color: rgb(0, 0, 0);">}</span><br /><br /><span style="color: rgb(0, 0, 0);">Это может пригодиться особенно в длинных таблицах, которые простираются на несколько страниц и которые нужно переносить со страницы на страницу. Сейчас мы ими и займёмся.<br /><br /><br /><span style="color: rgb(153, 102, 51);"><big><b>Многостраничные таблицы</b></big></span><br /><span style="color: rgb(0, 0, 0);">Время от времени таблицы становятся длинными до неприличия и не влезают в одну страницу. Чтобы сделать многостраничную таблицу в ЛаТеХе, используем пакет расширений </span><span style="color: rgb(128, 0, 0);">\usepackage</span><span style="color: rgb(0, 0, 0);">{longtable}, который подключаем в преамбуле документа (там, где остальные команды типа </span><span style="color: rgb(128, 0, 0);">\usepackage</span><span style="color: rgb(0, 0, 0);">). В остальном всё то же самое, как и раньше, только используем окружение <span style="font-weight: bold;">longtable</span> вместо <span style="font-weight: bold;">table</span>. Вот пример:</span><br /><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">longtable</span><span style="color: rgb(0, 0, 0);">}[h]{lp{0.7</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}}</span><br /><span style="color: rgb(0, 160, 0);">$A$</span><span style="color: rgb(0, 0, 0);"> &amp; area of the (geometrical) pixel [m</span><span style="color: rgb(128, 0, 0);">\textsuperscript</span><span style="color: rgb(0, 0, 0);">2] </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 160, 0);">$c$</span><span style="color: rgb(0, 0, 0);"> &amp; Speed of light </span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(96, 96, 0);">\approx</span><span style="color: rgb(0, 160, 0);"> 3 </span><span style="color: rgb(96, 96, 0);">\cdot</span><span style="color: rgb(0, 160, 0);"> 10^8$</span><span style="color: rgb(0, 0, 0);"> m/s </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 160, 0);">$DYN_{in}$</span><span style="color: rgb(0, 0, 0);"> &amp; Input dynamic range [1] </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 160, 0);">$DYN_{out}$</span><span style="color: rgb(0, 0, 0);"> &amp; Output dynamic range~[1] </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 160, 0);">$E$</span><span style="color: rgb(0, 0, 0);"> &amp; irradiance on the sensor surface~[W/m</span><span style="color: rgb(128, 0, 0);">\textsuperscript</span><span style="color: rgb(0, 0, 0);">2] </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 160, 0);">$F$</span><span style="color: rgb(0, 0, 0);"> &amp; Non-whiteness coefficient </span><span style="color: rgb(128, 0, 0);">\\</span><span style="color: rgb(0, 0, 0);"> </span><br /><span style="color: rgb(0, 160, 0);">$h$</span><span style="color: rgb(0, 0, 0);"> &amp; Planck's constant h </span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(96, 96, 0);">\approx</span><span style="color: rgb(0, 160, 0);">6.63 </span><span style="color: rgb(96, 96, 0);">\cdot</span><span style="color: rgb(0, 160, 0);"> 10^{-34} Js$</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 160, 0);">$K$</span><span style="color: rgb(0, 0, 0);"> &amp; overall system gain~[DN/e-] </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 160, 0);">$k_d$</span><span style="color: rgb(0, 0, 0);"> &amp; Doubling temperature of the dark current~[</span><span style="color: rgb(0, 160, 0);">$^</span><span style="color: rgb(96, 96, 0);">\circ</span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(0, 0, 0);">C] </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 160, 0);">$N_d$</span><span style="color: rgb(0, 0, 0);"> &amp; dark current~[e-/s] </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 160, 0);">$N_{d30}$</span><span style="color: rgb(0, 0, 0);"> &amp; dark current for a housing temperature of </span><span style="color: rgb(0, 160, 0);">$30^</span><span style="color: rgb(96, 96, 0);">\circ</span><span style="color: rgb(0, 160, 0);"> C$</span><span style="color: rgb(0, 0, 0);">~[e-/s]</span><span style="color: rgb(128, 0, 0);">\textsuperscript</span><span style="color: rgb(0, 0, 0);">2 </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 160, 0);">$S_g^2$</span><span style="color: rgb(0, 0, 0);"> &amp; variance coefficient of the spatial gain noise~[</span><span style="color: rgb(128, 0, 0);">\%</span><span style="color: rgb(0, 0, 0);">] </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">longtable</span><span style="color: rgb(0, 0, 0);">}</span><br /><br /><span style="color: rgb(0, 0, 0);">Стоит упомянуть, что если столбец слишком широкий, можно задать его ширину вот так: </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">longtable</span><span style="color: rgb(0, 0, 0);">}[h]{lp{0.7</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}} с помощью выражения p{0.7</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}, которое сделает столбец шириной в 70</span><span style="color: rgb(128, 0, 0);">\%</span><span style="color: rgb(0, 0, 0);"> от ширины линии.<br /><br /><span style="color: rgb(192, 192, 192);"><small><small><small><small><small><small><small><small>Этот материал написал Михаил Конник aka virens и опубликовал на своём блоге <a href="http://mydebianblog.blogspot.com/">Записки дебианщика</a>.<br /></small></small></small></small></small></small></small></small></span><br /><br /><span style="color: rgb(153, 102, 51);"><big><b><span style="color: rgb(240, 0, 0);"></span>Таблицы с объединением столбцов<br /></b></big></span><span style="color: rgb(0, 0, 0);">Для того, чтобы несколько столбцов объединить в один (особенно в начале таблицы, для заголовков), применяется хитрый приём, сочетающий в себе несколько трюков. Я в начале не зря говорил, что таблицы в ЛаТеХе часто - занятие не для слабонервных :-) И тем не менее, выход есть всегда, вот например:</span><br /><br /></span> <div align="center"> <div align="center"> <a name="230"></a> <table border="1" cellpadding="3"> <caption><strong>Таблица:</strong> Нестандартные болты для левой резьбы.</caption> <tbody><tr><td align="center"><br /></td> <td colspan="2" align="center"><span>Диаметр</span></td> </tr> <tr><td align="center">Нестандартные болты</td> <td align="center">Норма</td> <td align="center">Разброс</td> </tr> <tr><td align="center">Размеры</td> <td align="center">10 мм</td> <td align="center">1 мм</td> </tr> </tbody></table> </div> </div><br /><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);"><br /><span style="color: rgb(0, 0, 0);">Разбор полётов: для этой таблицы использован трюк с </span><span style="color: rgb(128, 0, 0);">\multicolumn</span><span style="color: rgb(0, 0, 0);"> для объединения двух ячеек в одну, </span><span style="color: rgb(128, 0, 0);">\cline</span><span style="color: rgb(0, 0, 0);">{2-3} для прочерчивания горизонтальной линии в таблице от второй колонки до третьей, и </span><span style="color: rgb(128, 0, 0);">\raisebox</span><span style="color: rgb(0, 0, 0);"> для вставки надписи </span><span style="color: rgb(0, 0, 0);"><span style="font-style: italic;">Нестандартные болты</span>. А вот и код:</span><br /><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">table</span><span style="color: rgb(0, 0, 0);">}[H]</span><br /><span style="color: rgb(128, 0, 0);">\caption</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(240, 0, 0);">\label</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tab:bolts</span><span style="color: rgb(0, 0, 0);">} Нестандартные болты для левой резьбы.}</span><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">center</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular</span><span style="color: rgb(0, 0, 0);">}{|c|c|c|}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\hline</span><br /><span style="color: rgb(0, 0, 0);"> &amp; </span><span style="color: rgb(128, 0, 0);">\multicolumn</span><span style="color: rgb(0, 0, 0);">{2}{c|}{Диаметр} </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\cline</span><span style="color: rgb(0, 0, 0);">{2-3}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\raisebox</span><span style="color: rgb(0, 0, 0);">{1.5ex}[0cm][0cm]{Нестандартные болты}</span><br /><span style="color: rgb(0, 0, 0);"> &amp; Норма &amp; Разброс </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\hline</span><br /><span style="color: rgb(0, 0, 0);"> Размеры &amp; 10 мм &amp; 1 мм </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\hline</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">center</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">table</span><span style="color: rgb(0, 0, 0);">}</span><br /><br /><span style="color: rgb(0, 0, 0);">Надеюсь, что с такими таблицами вы будете встречаться так же редко, как и с такими экзотическими болтами.<br /><br /><br /><span style="color: rgb(153, 102, 51);"><big><b> Поворот таблицы в LaTeX </b></big></span><br /><span style="color: rgb(0, 0, 0);">Ну и под занавес приведу пример достаточно сложной таблицы, которая повёрнута на 90 градусов (таблица в ландшафтной ориентации в ЛаТеХе). Поворот сделан при помощи команды </span><span style="color: rgb(128, 0, 0);">\rotatebox</span><span style="color: rgb(0, 0, 0);">{90}{я - объект} что обеспечивает поворот любого объекта. Так как данные структурированы и код организован достаточно логично, редактировать таблицу относительно просто. Итак:</span><br /><br /><span style="color: rgb(128, 0, 0);">\rotatebox</span><span style="color: rgb(0, 0, 0);">{90}{ </span><span style="font-style: italic; color: rgb(128, 128, 128);">%это обеспечивает поворот любого объекта</span><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}{1.5</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">table</span><span style="color: rgb(0, 0, 0);">}[H]</span><br /><span style="color: rgb(128, 0, 0);">\caption</span><span style="color: rgb(0, 0, 0);">{Сравнение количественных данных по влиянию искажений на результат декодирования}</span><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">center</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular</span><span style="color: rgb(0, 0, 0);">}{|p{5cm}c|c|}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\hline</span><br /><span style="color: rgb(128, 0, 0);">\multicolumn</span><span style="color: rgb(0, 0, 0);">{3}{|c|}{</span><span style="color: rgb(128, 0, 0);">\textbf</span><span style="color: rgb(0, 0, 0);">{Графические изображения}}</span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\hline</span><br /><span style="color: rgb(128, 0, 0);">\textbf</span><span style="color: rgb(0, 0, 0);">{Характеристика} &amp; </span><span style="color: rgb(128, 0, 0);">\textbf</span><span style="color: rgb(0, 0, 0);">{8-битные} &amp; </span><span style="color: rgb(128, 0, 0);">\textbf</span><span style="color: rgb(0, 0, 0);">{16-битные}</span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\hline</span><br /><span style="color: rgb(128, 0, 0);">\multicolumn</span><span style="color: rgb(0, 0, 0);">{3}{|c|}{Влияние шумов квантования}</span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\hline</span><br /><span style="color: rgb(0, 0, 0);">Шумы квантования</span><br /><span style="color: rgb(0, 0, 0);">&amp; </span><span style="color: rgb(0, 160, 0);">$6.3 </span><span style="color: rgb(96, 96, 0);">\div</span><span style="color: rgb(0, 160, 0);"> 22.6</span><span style="color: rgb(96, 96, 0);">\%</span><span style="color: rgb(0, 160, 0);">$</span><br /><span style="color: rgb(0, 0, 0);">&amp; </span><span style="color: rgb(0, 160, 0);">$0.2 </span><span style="color: rgb(96, 96, 0);">\div</span><span style="color: rgb(0, 160, 0);"> 0.5</span><span style="color: rgb(96, 96, 0);">\%</span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\hline</span><br /><span style="color: rgb(128, 0, 0);">\multicolumn</span><span style="color: rgb(0, 0, 0);">{3}{|c|}{Влияние шумов фотоприёмника}</span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\hline</span><br /><span style="color: rgb(0, 0, 0);">Шумы фотоприёмника</span><br /><span style="color: rgb(0, 0, 0);">&amp; </span><span style="color: rgb(0, 160, 0);">$8.8 </span><span style="color: rgb(96, 96, 0);">\div</span><span style="color: rgb(0, 160, 0);"> 87.5</span><span style="color: rgb(96, 96, 0);">\%</span><span style="color: rgb(0, 160, 0);">$</span><br /><span style="color: rgb(0, 0, 0);">&amp; </span><span style="color: rgb(0, 160, 0);">$7.1 </span><span style="color: rgb(96, 96, 0);">\div</span><span style="color: rgb(0, 160, 0);"> 87.6</span><span style="color: rgb(96, 96, 0);">\%</span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\hline</span><br /><span style="color: rgb(128, 0, 0);">\multicolumn</span><span style="color: rgb(0, 0, 0);">{3}{|c|}{Влияние особенностей ФРТ}</span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\hline</span><br /><span style="color: rgb(0, 0, 0);">декодирование ФРТ той же реализацией шума</span><br /><span style="color: rgb(0, 0, 0);">&amp; </span><span style="color: rgb(0, 160, 0);">$6 </span><span style="color: rgb(96, 96, 0);">\div</span><span style="color: rgb(0, 160, 0);"> 13</span><span style="color: rgb(96, 96, 0);">\%</span><span style="color: rgb(0, 160, 0);">$</span><br /><span style="color: rgb(0, 0, 0);">&amp; </span><span style="color: rgb(0, 160, 0);">$0.5 </span><span style="color: rgb(96, 96, 0);">\div</span><span style="color: rgb(0, 160, 0);"> 15</span><span style="color: rgb(96, 96, 0);">\%</span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\hline</span><br /><span style="color: rgb(0, 0, 0);">декодирование ФРТ с другой реализацией шума</span><br /><span style="color: rgb(0, 0, 0);">&amp; </span><span style="color: rgb(0, 160, 0);">$6 </span><span style="color: rgb(96, 96, 0);">\div</span><span style="color: rgb(0, 160, 0);"> 14</span><span style="color: rgb(96, 96, 0);">\%</span><span style="color: rgb(0, 160, 0);">$</span><br /><span style="color: rgb(0, 0, 0);">&amp; </span><span style="color: rgb(0, 160, 0);">$0.3 </span><span style="color: rgb(96, 96, 0);">\div</span><span style="color: rgb(0, 160, 0);"> 12</span><span style="color: rgb(96, 96, 0);">\%</span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\hline</span><br /><span style="color: rgb(0, 0, 0);">декодирование идеальным ФРТ</span><br /><span style="color: rgb(0, 0, 0);">&amp; </span><span style="color: rgb(0, 160, 0);">$6 </span><span style="color: rgb(96, 96, 0);">\div</span><span style="color: rgb(0, 160, 0);"> 6.5</span><span style="color: rgb(96, 96, 0);">\%</span><span style="color: rgb(0, 160, 0);">$</span><br /><span style="color: rgb(0, 0, 0);">&amp; </span><span style="color: rgb(0, 160, 0);">$0.2 </span><span style="color: rgb(96, 96, 0);">\div</span><span style="color: rgb(0, 160, 0);"> 6.4</span><span style="color: rgb(96, 96, 0);">\%</span><span style="color: rgb(0, 160, 0);">$</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\hline</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">center</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">table</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}}</span><br /><br /><br /><span style="color: rgb(240, 0, 0);"></span><big><span style="color: rgb(153, 102, 51);"><b>Заключение</b></span></big><br /><span style="color: rgb(0, 0, 0);">В этом разделе я собрал все примеры таблиц, которые использовал в реальных документах. Этого должно хватить для того, чтобы оформить практически любую таблицу, которую нужно вставить в ЛаТеХовский документ. Главное - структурирование кода таблицы и не лениться в этом деле, иначе таблицы в ЛаТеХе могут превратиться для вас в камеру пыток.</span></span></span></span></span></span></span></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-2427214615149525060?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com27tag:blogger.com,1999:blog-30744165.post-8317802351444019592008-12-31T12:00:00.000+03:002008-12-31T17:48:13.149+03:00С наступающим!Поздравляю всех читателей и читательниц блога "Записки дебианщика" с наступающим 2009 годом! Всем всего самого наилучшего, и да пребудет с вами Сила!<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hM8AMxgJLzw/SUywsNEGIYI/AAAAAAAAA1Y/BStApn30y3A/s1600-h/rms1.jpg"><img src="http://1.bp.blogspot.com/_hM8AMxgJLzw/SUywsNEGIYI/AAAAAAAAA1Y/BStApn30y3A/s320/rms1.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 213px;" src="http://1.bp.blogspot.com/_hM8AMxgJLzw/SUywsNEGIYI/AAAAAAAAA1Y/BStApn30y3A/s320/rms1.jpg" alt="" id="BLOGGER_PHOTO_ID_5281790736466321794" border="0" /></a><br /><div style="text-align: center;">Столлмен с нами,<br />С нами сила<br />И уверенность в победе!<br /></div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-831780235144401959?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com12tag:blogger.com,1999:blog-30744165.post-26402427206122217162008-12-22T02:05:00.004+03:002008-12-23T10:09:03.287+03:00Midnight Commander: обновление и использование MCБудучи поклонником двухпанельных файловых менеджеров, я просто не мог пройти мимо такого знаменательного события! <span style="font-weight: bold;">Midnight Commander</span>, он же <span style="font-weight: bold;">MC</span> после многих лет простоя обновился до версии 4.6.3. В ней подавлено много жуков и тараканов на радость простым пользователям. Этому и посвящена сия заметка.<span class="fullpost"><br /><br />Надо сказать, что <span style="font-weight: bold;">Midnight Commander</span> является наследником традиций norton commander, так что если кто скучает по легендарному двухпанельному файловому менеджеру, тот найдёт в Linux его достойную замену в лице <span style="font-weight: bold;">Midnight Commander.</span><br /><br /><br /><span style="color: rgb(204, 153, 51); font-weight: bold;">Что изменилось в новом Midnight Commander?</span><br />Из наиболее разительных изменений: поменялась подсветка типов файлов по умолчанию, починен старый и весьма раздражающий баг "Интерпретатор занят выполнением команды", отображение объёма свободного места в текущей точке монтирования и просто огромное количество других изменений. Разработчики так же обещают в ближайшем времени продолжить охоту за багами и объединить все накопившиеся патчи, чтобы любимый многими <span style="font-weight: bold;">Midnight Commander</span> стал ещё краше.<br /><br />Самое главное и ценное - наконец-то появилась <span style="font-weight: bold; font-style: italic;">более вменяемая документация по MC</span>. Её можно <a href="http://people.redhat-club.org/inf/mc-slavaz/docs/">скачать</a> и вдумчиво читать долгими зимними снежными вечерами.<br /><br />В целом всё это стоит того, чтобы обновить старый-добрый <span style="font-weight: bold;">Midnight Commander</span>. Для некоторых дистрибутивов есть сборки, так что скачать mc можно на <a href="http://people.redhat-club.org/inf/mc-slavaz/">странице проекта</a> сразу в собранном для вашего дистрибутива виде. Для тех же из нас, кто <span style="color: rgb(192, 192, 192);">как и автор этих строк</span> использует Rock-Solid Debian Stable, сборка <span style="font-weight: bold;">Midnight Commander</span> из исходников сразу в пакет проблемы не составит. Достаточно скачать приглянувшийся срез <a href="http://people.redhat-club.org/inf/mc-slavaz/source/">отсюда</a> и дать несколько простых команд:<br /><blockquote>dh_make --createorig</blockquote>и пишем, что пакет собрали мы сами, после чего:<br /><blockquote>debuild</blockquote>и наблюдаем, как за несколько мгновений собирается <span style="font-weight: bold;">Midnight Commander</span>. Сборка должна пройти без проблем, и полученный deb-пакет легко и просто ставится:<br /><blockquote>dpkg -i mc_4.6.3-1_i386.deb</blockquote>Самые ленивые могут забрать мой пакет для Debian Etch <a href="http://mydebianblog.googlepages.com/mc_4.6.3-1_i386.deb">тут</a>.<br /><br />На этом установка <span style="font-weight: bold;">mc</span> завершена, существующий <span style="font-weight: bold;">Midnight Commander</span> будет обновлён до версии 4.6.3. После этого набираем привычное <span style="font-weight: bold;">mc</span> и наслаждаемся. Вот как выглядит <span style="font-weight: bold;">Midnight Commander</span> у меня в <a href="http://mydebianblog.blogspot.com/2007/06/yakuake-quake-iii.html">Yakuake</a>:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hM8AMxgJLzw/SUyrGhrZP8I/AAAAAAAAA1Q/sYSO_9TnbIk/s1600-h/mc-463.jpg"><img src="http://2.bp.blogspot.com/_hM8AMxgJLzw/SUyrGhrZP8I/AAAAAAAAA1Q/sYSO_9TnbIk/s320/mc-463.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 120px;" src="http://2.bp.blogspot.com/_hM8AMxgJLzw/SUyrGhrZP8I/AAAAAAAAA1Q/sYSO_9TnbIk/s320/mc-463.jpg" alt="" id="BLOGGER_PHOTO_ID_5281784591606693826" border="0" /></a><br />Если не считать немного изменившейся подсветки файлов и отображение места на текущей точке монтирования, всё осталось, как и прежде.<br /><br /><span style="color: rgb(153, 102, 51);font-size:130%;" ><span style="color: rgb(204, 153, 51); font-weight: bold;">Клавиатурные сокращения MC</span></span><br />Чтобы выжать из </span><span class="fullpost"><span style="font-weight: bold;">Midnight Commander</span></span><span class="fullpost"> всё, стоит запомнить хотя бы несколько клавиатурных сокращений, которые могут сильно облегчить выполнение задач. Клавиатурные комбинации в </span><span class="fullpost"><span style="font-weight: bold;">Midnight Commander</span></span><span class="fullpost"> имеют особенность: комбинация <b>Ctrl + x c</b> означает, что нужно нажать CTRL и X, отпустить и потом нажать клавишу C.<br /><br />Итак, некоторые комбинации клавиш <span style="font-weight: bold;">Midnight Commander</span>:<br /><ul><li><b>Ctrl + R</b> обновляет активную панель; </li><li><b> Ctrl + X C </b> посмотреть/поменять права (chmod) для отмеченных файлов;</li><li><b> Ctrl + X O </b>посмотреть/поменять владельца (chown) для отмеченных файлов;</li><li><b>Ctrl + S</b> или <b>Alt + S</b> открывает диалог быстрого поиска (вводимые символы отображаются не в командной строке, а в строке поиска); </li><li><b> Ctrl + X A </b> открывает диалог виртуальных файловых систем; </li><li><b>Ctrl</b><span style="font-weight: bold;">+ </span><span>\</span> вызывается меню часто используемых каталогов. </li><li><b>Ctrl + X J</b> показываются все фоновые задачи.</li><li><span style="font-weight: bold;">Ctrl + X T</span> послать выделенные объекты в командную строку</li><li><span style="font-weight: bold;">Ctrl + X S</span> создать символическую ссылку (symlink)</li><li><b>Ctrl + X Q </b>быстрый просмотр содержимого файла на второй панели.</li><li><b>Ctrl + X I </b>быстрый просмотр информации о текущем объекте на второй панели. </li><li><span style="font-weight: bold;">ESC + T </span> или<span style="font-weight: bold;"> ALT + T </span>cмена вида панели (стандартный, укороченный, расширенный);</li><li><span style="font-weight: bold;">ESC + H</span> или<span style="font-weight: bold;"> ALT + H</span> вызов списка последних выполненных команд;</li><li><b> Alt + G</b> отмечает первый файл или каталог в отображаемом списке на панели</li><li><b> Alt + R</b> отмечает средний файл или каталог в отображаемом списке на панели</li><li><b> Alt + J</b> отмечает последний файл или каталог в отображаемом списке на панели<br /></li><li><b>Alt + O</b> неактивная панель переходит в каталог на который указывает активная панель.</li><li><b>Alt + . </b>не показывать или показать скрытые файлы или каталоги.</li><li><b>Alt + ,</b> переключить режим отображения панелей (вертикально/горизонтально). </li><li>+<b> (Plus)</b> вызывает окно для выделения группы файлов (можно использовать регулярные выражения)</li><li><span style="font-weight: bold;">\</span> <span style="font-weight: bold;">(Backslash)</span> снимает отметку с группы файлов (действие, обратное тому, которое<br />вызывается по клавише "+").<br /></li></ul>Следует отметить, что по крайней мере в версии 4.6.3 клавиатурные комбинации могут не работать, если выключена русская раскладка.<br /><br />Часть этих клавиатурных сокращений я время от времени забываю, и чтобы не перечитывать мануалы и не перегружать гугл поисковыми запросами, выложил здесь.<br /><span style="font-weight: bold;"><br /><br /></span><span style="color: rgb(153, 102, 51);">Ссылки</span><br />Теперь основное развитие <span style="font-weight: bold;">Midnight Commander</span> идёт здесь, где лежат исходники, немного собранных пакетов и вполне приличная документация на <a href="http://mc.redhat-club.org/trac/wiki/HotKeyMc">русском языке</a>. Список горячих клавиш <span style="font-weight: bold;">Midnight Commander</span> так же есть и <a href="http://www.keyxl.com/aaae4b0/407/Midnight-Commander-keyboard-shortcuts.htm">на английском</a>. Интересная инструкция по работе с <span style="font-weight: bold;">Midnight Commander</span> лежит <a href="http://linuxforum.ru/index.php?showtopic=42892">здесь</a>. Шпаргалка по основным сокращениям MC находится <a href="http://www.keyxl.com/aaae4b0/407/Midnight-Commander-keyboard-shortcuts.htm">здесь</a>.<br /></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-2640242720612221716?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com16tag:blogger.com,1999:blog-30744165.post-4751842156754498812008-12-15T02:50:00.002+03:002009-01-17T11:17:00.335+03:00Иллюстрации и рисунки в LaTeX<div style="text-align: right;">Этот пост является частью большой статьи<br />"<a href="http://mydebianblog.blogspot.com/2008/11/latex.html">Как оформить диплом в LaTeX?</a>",<br />которую написал <a href="profile/12420257446841864325">virens</a>,<br />ведущий блога "<a href="http://mydebianblog.blogspot.com/">Записки дебианщика</a>".<br /></div><br />Здесь приводятся базовые идеи и примеры, которые вам нужно освоить для вставки изображений и рисунков в LaTeX. Мы рассмотрим вставку нескольких рисунков в ряд и оформление групп рисунков, для чего будем пользоваться окружением minipage. Для набора дипломов по физическим специальностям приведённых сведений должно хватить в подавляющем большинстве случаев. О том, как просто это сделать, читайте дальше.<span class="fullpost"><br /><br /><span style="color: rgb(240, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);"><span style="color: rgb(153, 102, 51);"><b>Подготовка</b></span></span><br /><span style="color: rgb(0, 0, 0);">Для начала работы с изображениями нужно подключить пакет graphicx, который обеспечивает их вставку в текст документа. Есть много драйверов для работы с изображениями, но мы будем использовать dvips - это позволит нам потом сравнительно легко и довольно <a href="http://mydebianblog.blogspot.com/2007/01/latex-word-openoffice.html">просто конвертировать диплом из LaTeX в Word или OpenOffice</a> через формат RTF, используя открытую программу latex2rtf. Для этого ваши рисунки нужно конвертировать в EPS, что делается программой convert из пакета <a href="http://mydebianblog.blogspot.com/2007/07/imagemagick.html">imagemagick</a> или утилитой sam2p. И <a href="http://mydebianblog.blogspot.com/2007/07/imagemagick.html">imagemagick</a>, и sam2p есть в стандартных репозиториях Debian и ставятся на раз. </span><br /></span><span class="fullpost"><br /><br /><span style="color: rgb(192, 192, 192);"><small><small><small><small><small><small><small><small>Этот материал написал Михаил Конник aka virens и опубликовал на своём блоге <a href="http://mydebianblog.blogspot.com/">Записки дебианщика</a>.<br /></small></small></small></small></small></small></small></small></span></span><br /><span class="fullpost"><span style="color: rgb(240, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);"><span style="color: rgb(153, 102, 51);"><b>Как вставить в LaTeX-документ изображение?</b></span></span><br /><span style="color: rgb(0, 0, 0);">Рисунок в технической статье или отчёте - это не просто картинка, а ещё и подпись к нему, и возможность поставить на рисунок ссылку. Для этого сначала в преамбуле документа (это те самые магические заклинания, которые до </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">document</span><span style="color: rgb(0, 0, 0);">} ) нужно вставить следующее:</span><br /><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\usepackage</span><span style="color: rgb(0, 0, 0);">[dvips]{graphicx}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\graphicspath</span><span style="color: rgb(0, 0, 0);">{{noiseimages/}}</span><br /><br /><span style="color: rgb(0, 0, 0);">Рисунки лучше хранить в отдельных каталогах, идеально - для каждой главы диплома свой каталог. Следует перечислить все каталоги с рисунками, чтобы ЛаТеХ смог их найти. Делается это так: </span><span style="color: rgb(128, 0, 0);">\graphicspath</span><span style="color: rgb(0, 0, 0);">{{images-overview/}{images-deconv/}{images-linearization/}{images-noiseincoding/}{images-linearization/imagemotion/}{images-opticalcoding/}}</span><br /></span><br /><br /><br /><span style="color: rgb(0, 0, 0);">В ЛаТеХе вы только упоминаете рисунок - ставите на него относительную ссылку при помощи команды </span><span style="color: rgb(128, 0, 0);">\includegraphics</span><span style="color: rgb(0, 0, 0);">[width=1</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">]{image}. Как уже говорилось, если ваш рисунок в формате PNG/TIF/JPG или ещё каком-нибудь, нужно сначала перевести его в EPS при помощи программы convert из пакета imagemagick или утилитой sam2p. Например, чтобы конвертировать файл в EPS программой convert, нужно дать команду:</span><br /><br /><blockquote><i><span style="color: rgb(0, 0, 0);"> convert image.jpg image.eps</span></i><br /></blockquote><br /><span style="color: rgb(0, 0, 0);">После этого копируем полученный eps-файл в каталог, указанный в </span><span style="color: rgb(128, 0, 0);">\graphicspath</span><span style="color: rgb(0, 0, 0);">{{noiseimages/}}, в данном случае подкаталог noiseimages, который находится в каталоге с нашим tex-файлом.</span><br /></span><span class="fullpost"><br /><br /><span style="color: rgb(192, 192, 192);"><small><small><small><small><small><small><small><small>Этот материал написал Михаил Конник aka virens и опубликовал на своём блоге <a href="http://mydebianblog.blogspot.com/">Записки дебианщика</a>.<br /></small></small></small></small></small></small></small></small></span></span><br /><span class="fullpost"><span style="color: rgb(0, 0, 0);">Помимо вставки картинки, нам нужна к нему подпись и возможность сослаться. В общем, мы можем:</span><span style="color: rgb(240, 0, 0);"><br /></span><ol><li><span style="color: rgb(0, 0, 0);">определить место рисунка в тексте - разрешить алгоритмам ТеХа принять решение исходя из заполненности страницы </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">figure</span><span style="color: rgb(0, 0, 0);">}[h] "хотелось бы картинку здесь", настойчиво просить разместить после текста </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">figure</span><span style="color: rgb(0, 0, 0);">}[h!] "очень хочу картинку здесь", и ударить кулаком по столу - картинку тут и точка </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">figure</span><span style="color: rgb(0, 0, 0);">}[H] "ХОЧУ картинку здесь и баста", а с прибавлением буквы p мы заставляем поместить ЛаТеХ картинку отдельно на страницу так: </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">figure</span><span style="color: rgb(0, 0, 0);">}[pH].</span></li><li><span style="color: rgb(0, 0, 0);"> задать размер изображения в относительных единицах - долях от ширины строки или текста</span></li><li><span style="color: rgb(0, 0, 0);"> вставить подпись под рисунком </span><span style="color: rgb(128, 0, 0);">\caption</span><span style="color: rgb(0, 0, 0);">{Зависимость сигнала от шума для данных.}</span></li><li><span style="color: rgb(0, 0, 0);"> вставить ссылку на рисунок </span><span style="color: rgb(240, 0, 0);">\label</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">ris:image</span><span style="color: rgb(0, 0, 0);">}</span></li></ol><span style="color: rgb(240, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">А теперь всё сразу:</span><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">figure</span><span style="color: rgb(0, 0, 0);">}[h]</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\center</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(128, 0, 0);">\includegraphics</span><span style="color: rgb(0, 0, 0);">[width=1</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">]{image}}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\caption</span><span style="color: rgb(0, 0, 0);">{Зависимость сигнала от шума для данных.}</span><br /><span style="color: rgb(240, 0, 0);">\label</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">ris:image</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">figure</span><span style="color: rgb(0, 0, 0);">}</span><br /><br /><span style="color: rgb(0, 0, 0);">Результат в документе:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hM8AMxgJLzw/SUPdgGJGFxI/AAAAAAAAA0o/72mUzrXvRvI/s1600-h/pictures_html_m473a3719.jpg"><img src="http://4.bp.blogspot.com/_hM8AMxgJLzw/SUPdgGJGFxI/AAAAAAAAA0o/72mUzrXvRvI/s320/pictures_html_m473a3719.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 320px;" src="http://4.bp.blogspot.com/_hM8AMxgJLzw/SUPdgGJGFxI/AAAAAAAAA0o/72mUzrXvRvI/s320/pictures_html_m473a3719.jpg" alt="" id="BLOGGER_PHOTO_ID_5279306731682666258" border="0" /></a><br /><br /></span><span style="color: rgb(0, 0, 0);">Всё просто и понятно в этом примере: мы разместили рисунок, который находится в файле image, в тексте - оставляем выбор размещения за ТеХом. Размер его будет во всю строку, подпись - "Рис.N:Зависимость сигнала от шума для данных.", где N - номер рисунка, который будет вставлен позже, во время сборки документа. Расширение у документа не указывается: если вы используете драйвер dvips, то это обязательно postscipt. Теперь не надо ссылаться на рисунок в дурном стиле визуальщины: как показано на Рис.1... А надо так: как показано на Рис.~</span><span style="color: rgb(240, 0, 0);">\ref</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">ris:image</span><span style="color: rgb(0, 0, 0);">} - так вы всегда сошлётесь на правильный рисунок. Только нужно следить, чтобы имена рисунков не повторялись.</span><br /><br /><span style="color: rgb(0, 0, 0);">Полезно запомнить, что ЛаТеХ рассматривает рисунок как одну большую букву. Поэтому в некоторых сложных случаях полезно применять грубую силу, т.е. например можно сделать интервал от подписи командой </span><span style="color: rgb(128, 0, 0);">\vspace</span><span style="color: rgb(0, 0, 0);">{1cm} - не очень изящно, зато действенно.</span><br /><br /><span style="color: rgb(0, 0, 0);">Главное - делать название рисунков осмысленными и понятными вам, а не просто ris1, ris2... Естественно, что LaTeX - это язык программирования, так что все советы по грамотному написанию программ уместны и здесь.</span><br /></span><span class="fullpost"><br /><br /><span style="color: rgb(192, 192, 192);"><small><small><small><small><small><small><small><small>Этот материал написал Михаил Конник aka virens и опубликовал на своём блоге <a href="http://mydebianblog.blogspot.com/">Записки дебианщика</a>.<br /></small></small></small></small></small></small></small></small></span></span><br /><span class="fullpost"><span style="color: rgb(0, 0, 0);"><br /><span style="color: rgb(153, 102, 51);"><b>Два рисунка в строчку</b></span><br />Немного усложним пример - вставим два рисунка в строку, с единой подписью под каждым. Можно вставить ещё один </span><span style="color: rgb(128, 0, 0);">\includegraphics</span><span style="color: rgb(0, 0, 0);">, но под рисунками должны быть подписи а) и б) и нужно, чтобы они были по центру. Для этого есть замечательное окружение </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">} .. </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}. То есть резервируем место под рисунок, и вставляем его во фрейм. Вот так:</span><br /><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">figure</span><span style="color: rgb(0, 0, 0);">}[h]</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}[h]{0.49</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\center</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(128, 0, 0);">\includegraphics</span><span style="color: rgb(0, 0, 0);">[width=0.5</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">]{image} </span><span style="color: rgb(128, 0, 0);">\\</span><span style="color: rgb(0, 0, 0);"> а)}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(128, 0, 0);">\hfill</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}[h]{0.49</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\center</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(128, 0, 0);">\includegraphics</span><span style="color: rgb(0, 0, 0);">[width=0.5</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">]{image} </span><span style="color: rgb(128, 0, 0);">\\</span><span style="color: rgb(0, 0, 0);"> б)}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(128, 0, 0);">\caption</span><span style="color: rgb(0, 0, 0);">{Зависимость сигнала от шума для данных.}</span><br /><span style="color: rgb(240, 0, 0);">\label</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">ris:image1</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">figure</span><span style="color: rgb(0, 0, 0);">}</span><br /><br /><span style="color: rgb(0, 0, 0);">Здесь ширина рисунка указана 1</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);"> то есть во всю строку, но строка теперь ширины 0.49</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);"> так что рисунок будет во весь фрейм размера в половину строки. Кроме того, после каждого рисунка идёт разрыв строки и буква, обозначающая рисунок. Нужно помнить, что ссылка и подпись под рисунками одна.</span><br /><br /><span style="color: rgb(0, 0, 0);">Результат, как всегда, логичен и приятен:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hM8AMxgJLzw/SUPdq69VotI/AAAAAAAAA0w/x_V19mQ42b8/s1600-h/pictures_html_m6bcfa3c3.jpg"><img src="http://2.bp.blogspot.com/_hM8AMxgJLzw/SUPdq69VotI/AAAAAAAAA0w/x_V19mQ42b8/s320/pictures_html_m6bcfa3c3.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 119px;" src="http://2.bp.blogspot.com/_hM8AMxgJLzw/SUPdq69VotI/AAAAAAAAA0w/x_V19mQ42b8/s320/pictures_html_m6bcfa3c3.jpg" alt="" id="BLOGGER_PHOTO_ID_5279306917659124434" border="0" /></a><br /></span><span style="color: rgb(0, 0, 0);">Команда </span><span style="color: rgb(128, 0, 0);">\hfill</span><span style="color: rgb(0, 0, 0);"> позволяет раздвинуть рисунки к краям страницы, как бы заполняя между ними пространство пустотой. Из приведённых примеров должно быть понятно, как вставлять несколько рисунков в строку, теперь немного усложним задачу и попробуем вставить два рисунка в строчку и два в столбец.</span><br /><br /><span style="color: rgb(0, 0, 0);"><br /><span style="color: rgb(153, 102, 51);"><b>Два рисунка в строчку и два в столбец<br /></b></span>Следующий уровень нирваны - вставляем рисунки не только в строчку, но и по столбцам. Идея та же, только после заполнения строчек вставляем команду </span><span style="color: rgb(128, 0, 0);">\vfill</span><span style="color: rgb(0, 0, 0);"> которая растолкнёт рисунки по строкам. Всё остальное остаётся в силе: используем окружение minipage и грамотно выставляем ширину этих самых minipage так, чтобы оставался небольшой зазор: для двух картинок 0.48, для трёх 0.31 и так далее.</span><br /><br /><span style="color: rgb(0, 0, 0);">Так, давайте наконец вставим два рисунка в строчку и два в столбец. И это действительно легко!</span><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">figure</span><span style="color: rgb(0, 0, 0);">}[H]</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}[h]{0.47</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\center</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(128, 0, 0);">\includegraphics</span><span style="color: rgb(0, 0, 0);">[width=1</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">]{image}} a) </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(128, 0, 0);">\hfill</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}[h]{0.47</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\center</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(128, 0, 0);">\includegraphics</span><span style="color: rgb(0, 0, 0);">[width=1</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">]{image}} </span><span style="color: rgb(128, 0, 0);">\\</span><span style="color: rgb(0, 0, 0);">b)</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(128, 0, 0);">\vfill</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}[h]{0.47</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\center</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(128, 0, 0);">\includegraphics</span><span style="color: rgb(0, 0, 0);">[width=1</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">]{image}} c) </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(128, 0, 0);">\hfill</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}[h]{0.47</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\center</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(128, 0, 0);">\includegraphics</span><span style="color: rgb(0, 0, 0);">[width=1</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">]{image}} d) </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(128, 0, 0);">\caption</span><span style="color: rgb(0, 0, 0);">{Correlation signal peaks: a) numerical experiment, b)</span><br /><span style="color: rgb(0, 0, 0);">registered correlation signals, c) intensity distribution of correlation</span><br /><span style="color: rgb(0, 0, 0);"> signals in numerical experiment, d) correlation signals intensity</span><br /><span style="color: rgb(0, 0, 0);"> distribution for DCRAW processed data.}</span><br /><span style="color: rgb(240, 0, 0);">\label</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">ris:experimentalcorrelationsignals</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">figure</span><span style="color: rgb(0, 0, 0);">}</span><br /><br />Результат:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hM8AMxgJLzw/SUPd3XFs5MI/AAAAAAAAA04/-2BtY6BqBIc/s1600-h/pictures_html_3dfa933d.jpg"><img src="http://3.bp.blogspot.com/_hM8AMxgJLzw/SUPd3XFs5MI/AAAAAAAAA04/-2BtY6BqBIc/s320/pictures_html_3dfa933d.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 316px; height: 320px;" src="http://3.bp.blogspot.com/_hM8AMxgJLzw/SUPd3XFs5MI/AAAAAAAAA04/-2BtY6BqBIc/s320/pictures_html_3dfa933d.jpg" alt="" id="BLOGGER_PHOTO_ID_5279307131368826050" border="0" /></a><br /><br /><span style="color: rgb(0, 0, 0);">То есть теперь мы не падаем в обморок от просьбы вставить 12 рисунков по 3 в ряд. Все идеи те же самые, хотя едва ли в дипломе вам придётся столкнуться с большим количеством хитро расположенных рисунков. </span><br /></span><span class="fullpost"><br /><br /><br /><br /><span style="color: rgb(153, 102, 51);"><b>Два рисунка с разными подписями</b></span><br /><span style="color: rgb(0, 0, 0);">Это важный частный случай, так как довольно часто сделать одну подпись для двух рисунков или длинно, или сложно, и поэтому лучше выделить их в два отдельных рисунка, но в ряд. Мы не будем привлекать для этого отдельные сущности, а воспользуемся старым-добрым minipage. Надеюсь, благодарный читатель ещё помнит, что ЛаТеХ - он как рельса, прост и бесхитростен, и делает то, что вы ему прикажете, как бы костыляво это не выглядело. </span><br /><br /><span style="color: rgb(0, 0, 0);">Итак, два рисунка в ряд с разными подписями заказывали? Получаем:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hM8AMxgJLzw/SUPeXBHz0FI/AAAAAAAAA1A/3LGy1Bm1xsU/s1600-h/pictures_html_ff4fc31.jpg"><img src="http://1.bp.blogspot.com/_hM8AMxgJLzw/SUPeXBHz0FI/AAAAAAAAA1A/3LGy1Bm1xsU/s320/pictures_html_ff4fc31.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 146px;" src="http://1.bp.blogspot.com/_hM8AMxgJLzw/SUPeXBHz0FI/AAAAAAAAA1A/3LGy1Bm1xsU/s320/pictures_html_ff4fc31.jpg" alt="" id="BLOGGER_PHOTO_ID_5279307675227902034" border="0" /></a><br /><br /></span><span style="color: rgb(0, 0, 0);">Для этого случая код следующий: </span><br /><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">figure</span><span style="color: rgb(0, 0, 0);">}[h]</span><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">center</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}[h]{0.4</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\includegraphics</span><span style="color: rgb(0, 0, 0);">[width=1</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">]{image}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\caption</span><span style="color: rgb(0, 0, 0);">{Исходное изображение.} </span><span style="font-style: italic; color: rgb(128, 128, 128);">%% подпись к рисунку</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\label</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">ris:experimoriginal</span><span style="color: rgb(0, 0, 0);">} </span><span style="font-style: italic; color: rgb(128, 128, 128);">%% метка рисунка для ссылки на него</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\hfill</span><span style="color: rgb(0, 0, 0);"> </span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}[h]{0.4</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\includegraphics</span><span style="color: rgb(0, 0, 0);">[width=1</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">]{image}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\caption</span><span style="color: rgb(0, 0, 0);">{Закодированное изображение.}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\label</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">ris:experimcoded</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">center</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">figure</span><span style="color: rgb(0, 0, 0);">}</span><br /><br /><span style="color: rgb(0, 0, 0);">Как видно, всё достаточно легко и просто. Не забываем проставлять нужные размеры minipage-ей и рисунков, периодически посматривая на результат в kdvi и корректируя код по ходу дела. </span><br /><br /></span><span class="fullpost"><br /><br /><span style="color: rgb(192, 192, 192);"><small><small><small><small><small><small><small><small>Этот материал написал Михаил Конник aka virens и опубликовал на своём блоге <a href="http://mydebianblog.blogspot.com/">Записки дебианщика</a>.<br /></small></small></small></small></small></small></small></small></span></span><br /><span class="fullpost"><span style="color: rgb(153, 102, 51);"><b>Три рисунка разной высоты</b></span><br /><span style="color: rgb(0, 0, 0);">Иногда случается такая партизанская засада, как разномасштабные рисунки, которые под один размер подгонять нехорошо по смыслу, и нужно сделать так, чтобы подписи к ним были в одну строчку. Иначе получается некрасиво: буквы под рисунками в разных положениях. Я не претендую на истину в последней инстанции, но вот выход, который я нашёл для себя:</span><br /><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">figure</span><span style="color: rgb(0, 0, 0);">}[H]</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}[h]{0.32</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(128, 0, 0);">\center</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(128, 0, 0);">\includegraphics</span><span style="color: rgb(0, 0, 0);">[width=0.8</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">]{image}}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(128, 0, 0);">\hfill</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}[h]{0.32</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(128, 0, 0);">\center</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(128, 0, 0);">\includegraphics</span><span style="color: rgb(0, 0, 0);">[width=0.4</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">]{image}}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(128, 0, 0);">\hfill</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}[h]{0.32</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(128, 0, 0);">\center</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(128, 0, 0);">\includegraphics</span><span style="color: rgb(0, 0, 0);">[width=0.9</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">]{image}}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}[h]{1</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular</span><span style="color: rgb(0, 0, 0);">}{p{0.32</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}p{0.32</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}p{0.32</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\centering</span><span style="color: rgb(0, 0, 0);"> а) &amp; </span><span style="color: rgb(128, 0, 0);">\centering</span><span style="color: rgb(0, 0, 0);"> б) &amp; </span><span style="color: rgb(128, 0, 0);">\centering</span><span style="color: rgb(0, 0, 0);"> в) </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(128, 0, 0);">\vspace*</span><span style="color: rgb(0, 0, 0);">{-1cm}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\caption</span><span style="color: rgb(0, 0, 0);">{Процесс кодирования: а) оригинальное изображение, б) ФРТ киноформа, в) закодированное изображение.}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\label</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">ris:correlationsignals</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">figure</span><span style="color: rgb(0, 0, 0);">}</span><br /><br /><span style="color: rgb(0, 0, 0);">Как это выглядит в документе:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hM8AMxgJLzw/SUPevUGy0cI/AAAAAAAAA1I/GuUrtijdp2A/s1600-h/pictures_html_31366980.jpg"><img src="http://1.bp.blogspot.com/_hM8AMxgJLzw/SUPevUGy0cI/AAAAAAAAA1I/GuUrtijdp2A/s320/pictures_html_31366980.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 107px;" src="http://1.bp.blogspot.com/_hM8AMxgJLzw/SUPevUGy0cI/AAAAAAAAA1I/GuUrtijdp2A/s320/pictures_html_31366980.jpg" alt="" id="BLOGGER_PHOTO_ID_5279308092640776642" border="0" /></a><br /><br /></span><span style="color: rgb(0, 0, 0);">Здесь игра в том, что после всех окружений minipage, в которых вставлены картинки, идёт отдельная minipage. В ней - таблица, ширина колонок которой точно такая же, как и ширина minipage для картинок. Вот, собственно, код:</span><br /><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}[h]{1</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular</span><span style="color: rgb(0, 0, 0);">}{p{0.32</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}p{0.32</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}p{0.32</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\centering</span><span style="color: rgb(0, 0, 0);"> а) &amp; </span><span style="color: rgb(128, 0, 0);">\centering</span><span style="color: rgb(0, 0, 0);"> б) &amp; </span><span style="color: rgb(128, 0, 0);">\centering</span><span style="color: rgb(0, 0, 0);"> в) </span><span style="color: rgb(128, 0, 0);">\\</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">tabular</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">minipage</span><span style="color: rgb(0, 0, 0);">}</span><br /><br /><br /><span style="color: rgb(0, 0, 0);">Я немного забегаю вперёд и использую таблицы, которые будут описываться в другом разделе, но думаю, что человек с высшим образованием без труда переведёт слово tabular.</span><br /><br /><span style="color: rgb(0, 0, 0);">Опять-таки, это не единственный выход из подобной ситуации, но это пример того, как можно выкрутиться из сложной ситуации с помощью простых средств. </span><br /><br /><span style="color: rgb(240, 0, 0);"><br /><br /></span><span style="color: rgb(153, 102, 51);"><b>Обтекание текстом рисунка</b></span><br /><span style="color: rgb(0, 0, 0);">Это вообще-то уже криминал и за такие оформительские проделки можно получить по шапке, но если очень нужно или хочется, можно сделать и так. Хотя ещё раз предупреждаю: в дипломах такие выкрутасы крайне не приветствуются. Аксакалы старой школы вообще рекомендуют выносить каждый рисунок на отдельную страницу.</span><br /><br /><span style="color: rgb(0, 0, 0);">Для того, чтобы текст обтекал рисунок, можно использовать различные пакеты расширений, например wrapfig. Для это подключаем этот пакет в преамбуле </span><span style="color: rgb(128, 0, 0);">\usepackage</span><span style="color: rgb(0, 0, 0);">{wrapfig}.</span><br /><br /><span style="color: rgb(0, 0, 0);">После этого у нас появляется замечательная возможность продемонстрировать свою невероятную оформительскую крутизну, используя окружение </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">wrapfigure</span><span style="color: rgb(0, 0, 0);">}...</span><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">wrapfigure</span><span style="color: rgb(0, 0, 0);">}, когда нужно сделать обтекание рисунка:</span><br /><br /><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">wrapfigure</span><span style="color: rgb(0, 0, 0);">}{l}{0.2</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(240, 0, 0);">\begin</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">center</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(128, 0, 0);">\includegraphics</span><span style="color: rgb(0, 0, 0);">[width=</span><span style="color: rgb(128, 0, 0);">\linewidth</span><span style="color: rgb(0, 0, 0);">]{image}</span><br /><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">\caption</span><span style="color: rgb(0, 0, 0);">{Some caption}</span><br /><span style="color: rgb(240, 0, 0);">\label</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">fig:somelabel</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">center</span><span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(240, 0, 0);">\end</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 208);">wrapfigure</span><span style="color: rgb(0, 0, 0);">}</span><br /><br /><span style="color: rgb(0, 0, 0);">Буква в фигурных скобках обозначает соответственно обтекание справа {r}, слева {l} или по центру {c}. Как я и говорил, если вам за такое надают по ушам при предъявлении диплома, меня в последствиях не винить.</span></span><br /><br /><br /><span style="color: rgb(153, 102, 51);"><b>Выводы</b></span><br /><span style="color: rgb(0, 0, 0);">Вставка изображений в ЛаТеХ - дело очень простое, и оно сэкономит вам много нервных клеток и седых волос для более важных дел и приключений. Используя простые команды, здравый смысл и немного фантазии, можно с минимальными мозговыми усилиями набирать сложные конструкции из изображений. Гораздо более важно то, что со временем эти конструкции у вас войдут в привычку, и однажды написанный код начнёт кочевать из работы в работу. </span><br /></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-475184215675449881?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com19tag:blogger.com,1999:blog-30744165.post-318115530168741292008-12-08T00:02:00.002+03:002008-12-13T19:41:46.271+03:00Как оформить текст в LaTeX: структура текста<div style="text-align: right;">Этот пост является частью большой статьи<br />"<a href="http://mydebianblog.blogspot.com/2008/11/latex.html">Как оформить диплом в LaTeX?</a>",<br />которую написал <a href="http://www.blogger.com/profile/12420257446841864325">virens</a>,<br />ведущий блога "<a href="http://mydebianblog.blogspot.com/">Записки дебианщика</a>".<br /><br /></div>В этом посте показывается, как сделать текст структурированным в LaTeX. Рассматривается создание разделов, глав и списков.<br /><br /><b><span style="color: rgb(153, 102, 51);">Структура текста </span><br /></b> Большое количество вордолюбов просто не подозревает о наличии такой простой вещи, как стили. Отчасти потому, что Word так потворствует бардаку в документе и отсутствии у него логической структуры. Документ превращается в единый поток текста, разбавленный вечно прыгающими картинками, уродливыми формулами и библиографическими ссылками и намертво вбитыми номерами. <span class="fullpost"><br /><br />LaTeX, наоборот, вынуждает автора текста в какой бы то ни было форме структурировать документ, иначе на выходе будет сгенерирован именно тот бесформенный поток текста, который набьёт нерадивый автор. Команды<span style="color: rgb(153, 0, 0);"> </span><span style="color: rgb(153, 0, 0);">\section</span>{}, <span style="color: rgb(153, 0, 0);">\subsection</span>{} и <span style="color: rgb(153, 0, 0);">\chapter</span>{} есть то, чему учат книжки по ЛаТеХу буквально с первых же страниц, и незадачливый латехник просто вынужден их использовать. <span class="fullpost"><br /><span style="color: rgb(192, 192, 192);"><small><small><small><small><small><small><small><small>Этот материал написал Михаил Конник aka virens и опубликовал на своём блоге <a href="http://mydebianblog.blogspot.com/">Записки дебианщика</a>.</small></small></small></small></small></small></small></small></span></span><br /><br /><span style="color: rgb(153, 102, 51);"><b><big> Главы и разделы<br /></big></b></span>Начинаем с логической структуры - так проще писать текст, ибо структура его ясна. Перед написанием диплома (и не только) нужно обязательно проработать логическую структуру - ни в коем случае не пишите текст ``от фонаря''.<br />Самая крупная структура в дипломе это <b>Глава</b>, и сделать её можно с помощью команды <span style="color: rgb(153, 0, 0);">\chapter</span>{Это глава}. Начинается глава с новой страницы. Глава присутствует в классе документов <i>report</i>, который и используется в нашем примере для написания диплома. Есть и другие классы документов, но для диплома вам они не нужны.<br /><br />Глава - это очень крупная часть текста, их у вас будет от 3 до 5. Дальше текст логически делится на разделы, которые в ЛаТеХе обозначаются естественным английским словом:<br /><span style="color: rgb(153, 0, 0);">\section</span>{Я - большой раздел}.<br /><br />Разделы могут содержать подразделы:<br /><span style="color: rgb(153, 0, 0);">\subsection</span>{Я - подраздел поменьше},<br /><br />и ещё меньшие единицы - подподразделы:<br /><span style="color: rgb(153, 0, 0);">\subsubsection</span>{А я - самый маленький раздельчик}<br /><br />а так же абзацы:<br /><span style="color: rgb(153, 0, 0);">\paragraph</span>{Ну совсем крошечный кусочек}.<br /><br />Это должно быть достаточно понятно, единственное пожелание - не увлекаться разделами и понимать, что разделов много не бывает. Если не можете внятно назвать раздел, то, скорее всего, он не нужен и является более мелкой частью документа.<br /><br /><b><span style="color: rgb(153, 102, 51);">Ссылки на разделы и главы<br /></span></b>Естественно, что на разделы вы будете время от времени ссылаться. Поэтому хорошей морской практикой считается постановка ссылок на все разделы. Для этого на раздел нужно поставить метку командой <span style="color: rgb(153, 153, 153);">(кто бы мог подумать, правда?)</span> <span style="color: rgb(153, 0, 0);">\label</span>{<span style="color: rgb(0, 0, 153);">Textssylki</span>}. <span class="fullpost"><br /><span style="color: rgb(192, 192, 192);"><small><small><small><small><small><small><small><small>Этот материал написал Михаил Конник aka virens и опубликовал на своём блоге <a href="http://mydebianblog.blogspot.com/">Записки дебианщика</a>.</small></small></small></small></small></small></small></small></span></span><br /><br />Советую сразу же ставить понятные и информативные ссылки, чтобы вы сами смогли потом понять, где то место, куда вы ссылаетесь. Не бойтесь ставить длииииииииииинные имена ссылок - лишь бы вам было удобно. Вот например, в этом тексте я поставил ссылку <span style="color: rgb(204, 0, 0);">\label</span>{<span style="color: rgb(0, 0, 153);">sec:textformatting</span>} на подраздел ``Начертание шрифта'' (см. подраздел 1.1.1), и я всегда могу на неё сослаться: ссылки на метки ставятся командой <span style="color: rgb(204, 0, 0);">\ref</span>{<span style="color: rgb(0, 0, 153);">Textssylki</span>}. Чтобы ссылка не уехала на другую строку в одиночестве, ставим к ней неразрывный пробел, как я уже говорил в разделе 1.1, вот так: раздел<span style="color: rgb(153, 0, 0);">~\ref</span>{<span style="color: rgb(0, 0, 153);">Textssylki</span>}.<br /><br />Многим говорят так: ``мне лень думать и я лучше поставлю ссылку <span style="color: rgb(153, 0, 0);">\label</span>{<span style="color: rgb(0, 0, 153);">UR1</span>}, а потом найду поиском''. Заканчивается это бардаком в документе. Ссылки на литературу, равно как и на уравнения, должны быть осмысленными. Не надо уподобляться вордописцам с их склонностью "быстрей да попроще" и переделыванием по сто раз. В общем, плохая ссылка на уравнение выглядит так: <span style="color: rgb(153, 0, 0);">\ref</span>{<span style="color: rgb(0, 0, 153);">ur2</span>}, а хорошая ссылка <span style="color: rgb(153, 0, 0);">\ref</span>{<span style="color: rgb(0, 0, 153);">eq:equation_of_convolution</span>}.<br /><br />То же самое, как я уже говорил, с ссылками на главы и разделы. Правила хорошего тона такие: метка на раздел<span style="color: rgb(153, 0, 0);"> \label</span>{<span style="color: rgb(0, 0, 153);">sec:opisanierazdela</span>}, метка на уравнение <span style="color: rgb(153, 0, 0);">\label</span>{<span style="color: rgb(0, 0, 153);">eq:opisanie</span>}, метка на таблицу <span style="color: rgb(153, 0, 0);">\label</span>{<span style="color: rgb(0, 0, 153);">tab:tabliza</span>}.<br />А теперь, товарищи, самый смак: все ссылки в наших ЛаТеХовских документах относительные, так что текст можно перетаскивать кусками по всему диплому, и при перекомпиляции документа всё автоматически за нас сделает LaTeX. <span class="fullpost"><br /><span style="color: rgb(192, 192, 192);"><small><small><small><small><small><small><small><small>Этот материал написал Михаил Конник aka virens и опубликовал на своём блоге <a href="http://mydebianblog.blogspot.com/">Записки дебианщика</a>.</small></small></small></small></small></small></small></small></span></span><br /><br /><br /><span style="color: rgb(153, 102, 51);"><b> Перечни<br /></b></span>В конце диплома у вас обязательно будут выводы - вот тут-то и пригодятся перечни. Делать их просто:<br /><span style="color: rgb(153, 0, 0);">\begin</span>{<span style="color: rgb(0, 0, 153);">enumerate</span>}<br /><span style="color: rgb(153, 0, 0);">\item</span> это первое,<br /><span style="color: rgb(153, 0, 0);">\item</span> а это второе,<br /><span style="color: rgb(153, 0, 0);">\item</span> и последнее.<br /><span style="color: rgb(153, 0, 0);">\end</span>{<span style="color: rgb(0, 0, 153);">enumerate</span>}<br /><br />В результате увидите следующее:<br />1. это первое,<br />2. а это второе,<br />3. и последнее.<br /><br /><br />Списки и перечни можно друг в друга вкладывать, то есть можно делать так:<br /><span style="color: rgb(153, 0, 0);">\begin</span>{<span style="color: rgb(0, 0, 153);">enumerate</span>}<br /><blockquote><span style="color: rgb(153, 0, 0);">\begin</span>{<span style="color: rgb(0, 0, 153);">enumerate</span>}<br /><span style="color: rgb(153, 0, 0);">\item</span> это первое,<br /><span style="color: rgb(153, 0, 0);">\item</span> а это второе,<br /><span style="color: rgb(153, 0, 0);">\item</span> и последнее.<br /><span style="color: rgb(153, 0, 0);">\end</span>{<span style="color: rgb(0, 0, 153);">enumerate</span>}<br /></blockquote> <span style="color: rgb(153, 0, 0);">\item</span> это первое,<br /><span style="color: rgb(153, 0, 0);">\item</span> а это второе,<br /><span style="color: rgb(153, 0, 0);">\item</span> и последнее.<br /><span style="color: rgb(153, 0, 0);">\end</span>{<span style="color: rgb(0, 0, 153);">enumerate</span>}<br /><br />В результате получим:<br />1. это первое,<br /><blockquote>1. это первое,<br />2. а это второе,<br />3. и последнее.<br /></blockquote>2. а это второе,<br />3. и последнее.<br /><br />Признаком хорошего тона являются отступы при наборе таких окружений: будет легче разобраться, что в каком порядке перечисляется.<br /><span class="fullpost"><br /><span style="color: rgb(192, 192, 192);"><small><small><small><small><small><small><small><small>Этот материал написал Михаил Конник aka virens и опубликовал на своём блоге <a href="http://mydebianblog.blogspot.com/">Записки дебианщика</a>.</small></small></small></small></small></small></small></small></span></span><br /><br />Ненумерованные списки в научно-технической литературе не в почёте, но всё-таки приведу их:<br /><br /><span style="color: rgb(153, 0, 0);">\begin</span>{<span style="color: rgb(0, 0, 153);">itemize</span>}<br /><span style="color: rgb(153, 0, 0);">\item</span> это первое,<br /><span style="color: rgb(153, 0, 0);">\item</span> а это второе,<br /><span style="color: rgb(153, 0, 0);">\item</span> и последнее.<br /><span style="color: rgb(153, 0, 0);">\end</span>{<span style="color: rgb(0, 0, 153);">itemize</span>}<br /><br />И получим вот что:<br /><ul><li>это первое, </li><li>а это второе, </li><li>и последнее. </li></ul> Ненумерованные списки можно использовать в презентациях, а в тексте обычно нежелательно.<br /><br /><br /><span style="color: rgb(153, 102, 51);"><b><big>Выводы<br /></big></b></span>Прочитав это ураганное введение, вы сможете без проблем написать весьма навороченный в оформительском плане диплом. Правда, без таблиц, формул и рисунков - ими мы займёмся далее. Но в плане набора текстов те команды, которые указаны выше, достаточны в 95% случаев.</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-31811553016874129?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com11tag:blogger.com,1999:blog-30744165.post-59271058802250086732008-12-03T04:36:00.001+03:002008-12-03T04:36:00.248+03:00Ограничение числа постов в RSS-лентеНекоторое время несколько читателей написали мне, что мой RSS-фид почему-то не обновляется. А смахнув пыль с моего аккаунта в ЖЖ я увидел, что синдицированный RSS-фид попросту не отправляется из-за слишком большого размера. Поэтому появилась проблема: как ограничить число постов в лентах FeedBurner?<span class="fullpost"><br /><br />Решение я нашёл пока такое ограничить оригинальную ленту блога при помощи следующего трюка:<br /><code>http://mydebianblog.blogspot.com/feeds/posts/default?orderby=published&amp;max-results=5</code><br /><br />То есть будут отданы в прожиг FeedBurner только <span style="font-weight: bold;">5 последних постов</span>. Как показывает статистика, более ранние посты особо никто и не читает.<br /><br /></span><span class="fullpost">Надеюсь, это устранит проблемы, связанные с невозможностью загрузить такой длинный фид. </span><span class="fullpost">Если что, я могу прожечь ещё одну ленту, в которой будет столько же постов, сколько и раньше - 20.<br /><br />Посему есть вопрос к уважаемым читателям - я таким ограничением (фид в 5 последних постов) никого не стесню? Если что - пишите в комментарии.<br /></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30744165-5927105880225008673?l=mydebianblog.blogspot.com'/></div>virenshttp://www.blogger.com/profile/12420257446841864325mydebianblog@gmail.com11