Cat

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

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

Obsidian для пользователя Vangeli 13 Март 2025 Просмотров: 82

Предисловие

В этой статье я подробно расскажу о возможностях использования 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-блоков:

  • Главная страница хранилища:
  • Менеджер паролей:
  • Менеджер вопросов:
  • Шаблон для обучения программированию:

Связь между 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']
>>```

Заключение

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

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

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

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

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

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

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

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

    Нет комментариев

    Реклама

Оглавление

Поделиться