Как стать автором
Обновить

Obsidian: все что нужно знать о Callout

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров16K

Предисловие

В этой статье я подробно расскажу о возможностях использования Callout в Obsidian, покажу существующие решения, а также объясню, как создавать свои собственные, индивидуальные типы Callout-блоков. Дополнительно поделюсь полезными надстройками и шаблонами.


Слово благодарности

Я хочу поблагодарить всех пользователей оценивших и поучаствовавших в обсуждении моей дебютной статьи Obsidian: Типы данных.

Я был приятно удивлён, что она вызвала такой интерес и получила высокий рейтинг. На мой профиль подписалось более 20 человек. Увидев, что многим из них не хватает кармы для оценки публикаций и участия в обсуждениях на Хабр, я решил отблагодарить их, подняв карму. Надеюсь, этим мне удалось внести небольшой вклад в развитие сообщества.

Особую признательность выражаю andyblaster за интересную дискуссию и тезис о нецелесообразности ведения оперативного учета в статической среде. Я полностью согласен с этим выводом: потенциал Obsidian лучше раскрывается именно при управлении статическими данными (заметками, схемами, холстами).

Среди возможных сценариев применения я хотел бы выделить:

  • создание быстрых заметок:

    • добавление заметок в нужные папки, пример такой реализации обсуждался с proDream в комментариях );

    • сохранение информации по определенным шаблонам:

      • шпаргалки, в процессе обучения;

      • подготовка библиотеки референсов;

      • всевозможные личные картотеки;

      • и прочее.

  • работа с холстами:

    • создание mood board-ов и mind map-ов;

    • создание схем и прототипов интерфейсов различных приложений или скриптов;

    • визуализация различных данных.

  • систематизация рутинных задач по обработке текстовых данных:

    • совместное редактирование проектов статей;

    • подготовка и обновление файлов для Git, Wiki и GitHub Pages;

    • хранение рабочих процедур и инструкций;

    • анализ идей для улучшения процессов;

    • составление плана обучения;

    • и прочее.

  • интеграция с поисковыми системами в браузере (например, используя расширение Vault Lens);

  • ведение различных дневников:

  • и многое, многое другое

Также отмечу практический пример с интеграцией Obsidian и Pandoc. Я помог Arduinum настроить pipeline, конвертирующий файлы из формата .md в .docx с сохранением форматирования и вложений. Об этом опыте я напишу отдельную подробную статью.

Перечисленные сценарии помогут лучше понять возможности Obsidian и затрагивают проблемы, которые я сформулировал для эффективного решения повседневных задач. Соответственно в своих статьях я хотел бы рассказать как можно больше о необходимых для этого инструментах

Почему Callout-ы это здорово?

Когда я только начинал знакомиться с Obsidian, то мне не хватало "структуры" в моих заметках. Весь текст был одинаковым, списки мне казались урезанными, в связи с чем я начал искать решения, которые бы улучшили качество моих заметок.

Тогда я и познакомился с callout-блоками.

Плюсы

  • улучшение читаемости;

  • формирование визуальных блоков, которые помогают решить поставленную задачу;

  • можно настроить стиль callout-блоков под свои нужды, используя CSS;

  • существуют решения, значительно упрощающие взаимодействие и настройку callout-блоков;

Минусы

  • заголовки внутри callout-блоков не индексируются;

  • отсутствие встроенного инструмента для управления типами callout-блоков;

  • отсутствие встроенной возможности разделения callout-блоков на столбцы;

  • внешний вид callout-блока зависит от текущей темы, что иногда ограничивает визуальные возможности без дополнительных CSS-настроек;

  • не всегда корректно отображается в других редакторах Markdown, кроме Obsidian;

  • при экспорте заметок (например, в PDF или DOCX) callout-блоки могут терять изначальное оформление;

Но несмотря на все минусы, те преимущества, которые получает пользователь, используя callout-блоки однозначно делают этот инструмент обязательным для качественного ведения заметок.


Примеры использования callout-блоков:

  1. Главная страница хранилища

  2. Менеджер паролей

  3. Рецензирование статей своих друзей

  4. Менеджер вопросов

  5. "Быстрые заметки"

  6. Шаблон для обучения программированию


Связь между Callout'ами и стандартными цитатами (Blockquotes)

Перед знакомством с Callout-ами, важно понять "природу" его синтаксиса:

Синтаксис Callout

>[!warning]- Обратить внимание
>В этом блоке демонстрируется синтаксис `Callout`

Из этого примера видно, что структура Callout состоит из следующих элементов:

  1. Символ цитаты >, обозначающий принадлежность к типу Blockquote и задающий уровень вложенности.

  2. Идентификатор типа Callout (например, [!warning]), определяющий оформление блока.

  3. Свойство складываемости (опциональное):

    • - – блок может быть свернут (по умолчанию свернут);

    • + – блок изначально развернут, но его можно свернуть;

    • отсутствие символа – блок всегда развернут и не сворачивается.

  4. Идентификатор (заголовок), например «Обратить внимание».

  5. Основное содержимое блока Callout.


Вы также можете самостоятельно ознакомиться с информацией о Callout в документации Obsidian.

Синтаксис цитат в Markdown (Blockquotes)

Callout является расширением стандартной цитаты (Blockquote) и наследует её базовые свойства и оформление.

В руководстве посвященному основам синтаксиса Markdown указано:

  1. Для создания цитаты необходимо добавить символ > вначале параграфа;

  2. Цитата может включать несколько параграфов, но они должно быть объединены символом в начале параграфа - >;

  3. Цитата может включать вложенные цитаты - каждый уровень вложения отмечается дополнительным символом >;

  4. Цитата поддерживает форматирование внутри(заголовки, выделение текста, различные списки) на всех уровнях вложенности;

  5. Чтобы цитата работала стабильно - нужно добавлять пустые строки перед и после оформленной цитаты;

Пример стандартной цитаты Markdown:

>Обратить внимание
>В этом блоке демонстрируется синтаксис `цитаты`

Промежуточные итоги

В отличие от Callout, у цитат отсутствуют такие возможности, как:
• изменение стиля через типы;
• возможность сворачивания блока;
• отдельный идентификатор (заголовок).

Однако поскольку Callout построен на основе цитат, он сохраняет все их базовые возможности т.е. он:

  • может включать несколько параграфов, которые должны быть объединены символом >в начале параграфа;

  • может включать вложенные цитаты - каждый уровень вложения отмечается дополнительным символом >;

  • поддерживает форматирование внутри(заголовки, выделение текста, различные списки) на всех уровнях вложенности.


Стандартные типы Callout'ов

Исчерпывающий список стандартных типов Callout-ов вы также можете найти в документации Obsidian.

Что такое тип Callout'а и его идентификатор?

Как мы заметили ранее, тип Callout'a является одним из обязательных элементов, который необходим для определения стиля блока (например note, warning, info).

Идентификатор — опциональная строка текста после типа callout, выступает как уникальное имя или метка для ссылки на данный блок.

В примере >[!warning] Обратите внимание:

  • warning тип блока;

  • Обратите внимание - идентификатор блока.

Виды типов

Всего стандартных типов 25, но это не так много как может показаться, потому что уникальных всего 13. Это связано с тем, что у некоторых типов есть aliases (псевдонимы, которые выдают одинаковые типы блоков), например для success: check и done, а для warning: caution и attention.

У каждого типа своя иконка и при желании их можно изменить (в этой статье мы рассмотрим как можно назначать свои иконки и управлять типами callout'ов), но настоятельно не рекомендую этого делать, поскольку на мой взгляд, важно уместно использовать пользовательские и базовые типыcallout-блоков в своей работе.

Например:

В нашем Open Source проекте Taigram мы используем Obsidian для обмена заметками, рецензирования статей и хранения важных данных. У меня много пользовательских Callout-ов, но я понимаю, что другие пользователи увидят их как обычный [!note]. Поэтому я всегда использую стандартные типы при совместной работе.

Полный перечень стандартных типов:

Note, Abstract, Summary, TLDR, Info, Todo, Tip, Success, Check, Done, Question, Help, Faq, Warning, Caution, Attention, Failure, Fail, Missing, Danger, Error, Bug, Example, Quote, Cite

Что будет, если указать не зарегистрированный тип?

Если указать незарегистрированный тип (например [!pupsidian]), то такой блок отобразится с настройками типа [!note]. Если при этом не указать отдельный заголовок (идентификатор), в качестве заголовка будет использовано название самого типа.


Создание и настройка пользовательских Callout-блоков

Ранее я отметил, что можно изменить стандартные типы callout-ов и они станут "пользовательскими", но также можно создать и полностью "кастомные" типы.

В этом разделе мы рассмотрим как можно управлять (добавлять/удалять/изменять) типами callout-блоков:

  • вручную, с помощью CSS;

  • полу-автоматически, с помощью плагина Obsidian Callout Manager.

Ручное управление

Поскольку Obsidian построен на базе Electron, он позволяет кастомизировать почти все с помощью css и callout-блоки - не исключение.

Управление через .css

Для того, чтобы добавить или изменить уже существующий тип нам необходимо:

  1. Создать .css файл (его название нам не так важно);

  2. Добавить блок, в котором мы укажем:

    1. CSS-класс: .callout;

    2. Атрибут: data_callout;

    3. Тип callout-блока: можете указать любое название на латинице, например(castle);

    4. Цвет: значение цвета в RGB (например, 37, 150, 190);

    5. Иконку, в формате:

      • Lucide: lucide-... (например, lucide-castle);

      • SVG: '<svg>...custom svg...</svg>'.

Готовый пример .css

.callout[data-callout="castle"] { --callout-color: 37, 150, 190; --callout-icon: lucide-castle; }

  1. Поместить его в директории вашего хранилища по пути: {vault}/.obsidian/snippets ;

Примечание:
дирректории начинающиеся с . являются скрытыми по умолчанию. Для этого вам необходимо включить отображение скрытых папок в своей системе

  1. В настройках хранилища Obsidian перейти в раздел "Оформление" > "Фрагменты CSS кода " > включить добавленный .css;

Использование в заметках

Теперь новый тип Callout-блока будет доступен для использования в вашем хранилище, если в заметке будет такой блок:

>[!castle] Добавленный вручную тип Callout-а
>Ничего сложного, правда?

Недостатки ручного управления

Но такой способ управления типами callout-блоков на мой взгляд не самый удобный, потому что у него есть ряд ограничений:

  1. Чтобы получить список доступных типов - нужно открыть соответствующий .css файл;

  2. Мы не видим цвет, а только его код;

  3. Мы не видим корректно ли указали название иконки;

Эти проблемы решаются использованием полу-автоматического решения: плагина Obsidian Callout Manager.

Управление сallout-блоками через плагин

Мы также можем использовать сторонний плагин сообщества: Obsidian Callout Manager, с его помощью мы получаем удобный интерфейс для управления типами callout-блоков.

Установка плагина

Для этого нам необходимо установить плагин: "Настройки" > "Сторонние плагины" > "Плагины сообщества" > "Обзор" > в строке поиска введите "Callout Manager" > установить, а затем "Включить".

Управление типами callout-блоков

В меню настроек самого плагина перейдите в раздел Manage Callouts, там будут отображены все доступные типы callout-блоков.

Мы можем:

  • найти конкретный тип callout-блока по его названию из списка уже существующих;

  • добавлять новые типы;

  • редактировать существующие типы;

  • вставлять существующие типы (если у вас открыта заметка и вы находитесь в режиме редактирования);

Создание пользовательского типа с помощью плагина

Для создания пользовательского типа нам необходимо перейти в меню настроек самого плагина > Manage Callouts > +.

После чего пользователю будет предложено ввести название типа callout-блока, который в последующем будет вызываться в заметках (если ошиблись, то ничего страшного, т.к. всегда можно исправить) и подтвердить создание.

Когда пользователь подтвердит создание, то ему будет доступно меню, в котором он сможет в удобном формате:

  • изменить название;

  • установить иконку;

  • установить цвет;

  • установить цвет для конкретного типа темы (светлой/темной);

Интерфейс плагина покажет, как созданный Callout-блок будет выглядеть непосредственно в ваших заметках.

Как поделиться настроенными типами?

Вы можете без проблем поделиться созданными типами callout-блоков несмотря на то, какой способ для настройки вы выбрали:

Если вы добавили собственные стили, используя .css:

Перейдите к файлу .css по пути {vault}/.obsidian/snippets и отправьте его товарищам/коллегам.

Те, в свою очередь, должны просто поместить файл по аналогичному пути, затем перейти в настройках хранилища Obsidian > перейти в раздел "Оформление" > "Фрагменты CSS кода " > включить добавленный .css

Если вы используете Obsidian Callout Manager:

При необходимости, вы сможете поделиться с товарищами/коллегами своими настройками отправив им файлик data.json, в котором хранятся добавленные типы блоков, если у них предустановлен плагин Callout Manager. Найти этот файлик можно по пути: {vault}/.obsidian/plugins/callout-manager/data.json.

В случае, если у ваших товарищей/коллег не установлен плагин, то можете скинуть им целиком папку с {vault}/.obsidian/pluggins/callout-manager/ или только файл data.json, при условии что они самостоятельно установят плагин в своем хранилище.

Промежуточные итоги

Таким образом вы можете выбрать наиболее подходящий для вас способ управления типами callout-блоков для настройки стилей, лично я рекомендую использовать плагин, так как это существенно упрощает работу и позволяет сосредоточиться на содержимом заметок.

Продвинутые инструменты

Как я сказал выше, поначалу мне не хватало структуры в моих заметках и я искал способы как можно улучшить визуальное оформление моих заметок, тогда сообщество порекомендовало освоить надстройку от efemka.

Основные преимущества:

  • широкая страница: используя cssclasses: wide-page я получаю возможность использовать всю ширину своего экрана, для отображения заметки. Мне это очень понравилось и стало одной из основных надстроек, которые я использую повседневно;

  • добавление столбцов внутри callout-блоков: используя тип блока [!multi-column]все вложенные блоки располагаются по столбцам в указанном порядке, а также есть возможность управления шириной для каждого столбца внутри блока [!multi-column].

Как установить надстройку от efemka?

Представленная настройка - это .css сниппеты, которые необходимо загрузить и поместить в ваше хранилище по пути {vault}/.obsidian/snippets

А затем включить в настройках вашего хранилища Obsidian: "Оформление" > "Фрагменты CSS кода " > включить загруженный .css

Создание столбцов внутри Callout-блоков

На теории все понятно, но вот на практике в сообществе часто возникают вопросы, как реализовать "сложную структуру" callout-блоков. Давайте рассмотрим на примере:

Предположим, мы хотим создать блок, в котором будем хранить логин и пароль от какого-то сервиса, это может понадобиться нам в какой-то из заметок, а в последующем захотим автоматизировать этот процесс, написав несложный Templater шаблон, который будет вызывать модальное окно для ввода данных, а потом сохранять полученные значения в том виде, в каком мы хотим.

Для того, чтобы реализовать такой блок создадим "родительский блок":

>[!info]+ Учетная запись

Вспомним, что callout-блоки поддерживают вложенные структуры, а это значит, что весь секрет "красивой заметки со сложным callout" заключается именно в корректной работе со вложенными структурами.

Для использования блока типа multi-column, нам необходимо обозначить, что multi-column является вложенным объектом, благодаря чему форматирование и рендер такого объекта будут происходить корректно.

>>[!multi-column]

В последующем: нам важно добавлять содержимое учитывая текущий уровень вложенности. Поскольку мы хотим добавить столбцы, то нам необходимо задавать новые уровни вложенности для новых типов, а чтобы явно указать, что блок [!login] должен находится в разных столбцах с блоком [!password], то мы должны возвращаться к уровю вложенности [!multi-column].

>>>[!login]
>>>admin
>>
>>>[!password]
>>>password

Сейчас, скорее всего, звучит непонятно и запутано, но давайте разберемся

>[!info]+ Учетная запись     # Создаем блок "Учетная запись" с типом [!info]
>>[!multi-column]            # Создаем вложенную структуру [!multi-column] 
>>>[!login]                  # Создаем столбец с типом [!login]
>>>admin                     # Содержимое блока
>>                           # Возвращаемся к уровню вложенности multi-column
>>>[!password]               # Создаем столбец с типом [!password]
>>>password                  # Содержимое блока

Давайте усложним пример и добавим внутрь блоков еще разделение на роли пользователей, например администратор и пользователь:

>[!info] Учетная запись     # Создаем блок `Учетная запись` с типом `[!info]`
>
>>[!multi-column]           # Создаем вложенную структуру `[!multi-column]`
>>
>>>[!admins]                # Создаем столбец `Администратор`
>>>>[!multi-column]         # Создаем вложенную структуру `[!multi-column]`
>>>>
>>>>>[!login]               # Создаем столбец `[!login]` для `admins`
>>>>                        # Возвращаемся к уровню вложенности `admins`
>>>>>[!password]            # Создаем столбец `[!password]` для `admins`
>>>>>
>>                          # Возвращаемся к уровню вложенности `info`
>>                          
>>>[!user]                  # Создаем столбец `Пользователь`
>>>>[!multi-column]         # Создаем вложенную структуру `[!multi-column]`
>>>>>[!login]               # Создаем столбец `[!login]` для `user`
>>>>                        # Возвращаемся к уровню вложенности `user`
>>>>>[!password]            # Создаем столбец `[!password]` для `user`

Логика уровней вложенности:

• Уровень вложенности определяется количеством символов > перед блоком.
• Блок [!multi-column] всегда является родительским для столбцов, которые располагаются внутри него.

Полный цикл создания вложенных блоков

Обратите внимание, что цикл создания вложенного блока включает следующие этапы:

  1. Определеяем родительский блок;

  2. В рамках родительского блока создаем вложенный блок [!multi-column];

  3. Для каждого вложенного блока [!multi-column] создаем необходимое количество вложенных блоков, границы которых определяем символами >, количество которых соответствует уровню вложенности [!multi-column].

Шаблон для конспектирования

В свое время, я подготовил удобный шаблон для создания заметок/шпаргалок, которые помогали мне запоминать и находить информацию.

Я подготовил структуру типовой заметки, которая содержала:

  • название строкового метода в python;

  • параметры, которые он принимает;

  • что возвращает данный метод;

  • пример синтаксиса;

  • пример использования такого метода.

Для этого я использовал описанный в предыдущем подразделе "полный цикл создания вложенных callout-блоков", а затем подготовил Templater шаблон, который вызывал модальное окно, подготовленное в плагине Modal forms и создавал заполненную заметку.

При необходимости, можно адаптировать этот шаблон таким образом, чтобы он стал более универсальным или создать "разветвления" на его основе для других "профильных" случаев.

В любом случае, мне кажется это хороший пример пользовательского сценария :)

Пример заметки:

## Метод split() > [!info] .split() >>[!multi-column] >>>[!info] Параметры Метод split() >>> - sep (необязательный): Разделитель, по которому строка будет разделена. Если не указан, строка разделяется по пробелам. >>> - maxsplit (необязательный): Максимальное количество разбиений (по умолчанию — все вхождения). >> >>> [!info] Возвращаемое значение >>> Метод возвращает список подстрок, полученных после разбиения строки по указанному разделителю. > >> [!info] Синтаксис метода: >> ``python >> string.split([sep[, maxsplit]]) >> ` > >> [!info] Примеры: >>`python > > string = "hello world" > > print(string.split()) > > # ['hello', 'world'] > > > > string = "a,b,c" > > print(string.split(',')) > > # ['a', 'b', 'c'] >>``

!Рис. 12.png

Заключение

Главная мысль, которую мне хотелось бы донести заключается в том, что не стоит бояться эксперементировать в создании удобных форм ведения заметок. Только вы определяете какая структура и какое оформление для вас наиболее удобно.

Создавайте столько типов callout-блоков, сколько хотите. Назначайте им такие цвета и иконки, какие хотите. Называйте их так, как считаете удобным. Важно, чтобы инструмент был настроен под ваши потребности, а не наоборот.

В одном из комментариев к прошлой статье Роман Щёкин озвучил очень важное, на мой взгляд, мнение, поэтому я хотел бы процитировать его полностью:

Главное, что я понял про Obsidian спустя годы использования - до всего нужно дойти самому. Нет никакой практической пользы в том, чтобы взять чей-то шаблон, набор плагинов, способ организации заметок и т.д. Все должно исходить из собственных потребностей, подстроено под себя и под свои нужды.

Это не значит, что статья бесполезна - она способствует расширению горизонтов и даёт понимание глубине возможных кастомизаций. Но "как есть" ваш рецепт вряд ли кто-то сможет применить, ибо для новичка оверкилл, а продвинутые пользователи зашли в свой "локальный минимум" удобства.

Какие бы тонкости я ни рассматривал в своих статьях, вне контекста ваших задач они остаются всего лишь теорией. Я хотел бы, чтобы вся эта рубрика, и данная статья в частности, дали вам идеи, как сделать взаимодействие с заметками в Obsidian удобнее и эффективнее.

Буду рад, если в комментариях вы поделитесь практическими задачами, которые хотели бы решать с помощью Obsidian, или опишите интересные решения, которые вам уже удалось реализовать.

Мне также было бы приятно, если бы вы положительно оценили эту статью и участвовали в обсуждении.

Теги:
Хабы:
+43
Комментарии41

Публикации

Истории

Ближайшие события

19 марта – 28 апреля
Экспедиция «Рэйдикс»
Нижний НовгородЕкатеринбургНовосибирскВладивостокИжевскКазаньТюменьУфаИркутскЧелябинскСамараХабаровскКрасноярскОмск
22 апреля
VK Видео Meetup 2025
МоскваОнлайн
23 апреля
Meetup DevOps 43Tech
Санкт-ПетербургОнлайн
24 апреля
VK Go Meetup 2025
Санкт-ПетербургОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область