generate-tour-report
关于
This skill generates comprehensive tour reports as self-contained HTML/PDF documents using Quarto. It creates detailed itineraries with embedded maps, logistics tables, and accommodation/transport details for offline travel use. Use it when compiling travel plans, creating offline guides, documenting trips, or producing professional tour proposals.
快速安装
Claude Code
推荐npx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/generate-tour-report在 Claude Code 中复制并粘贴此命令以安装该技能
技能文档
Generate Tour Report
Formatted tour report w/ maps, daily itineraries, logistics, travel info.
Use When
- Compile planned tour → shareable doc
- Offline travel guide
- Completed trip w/ photos, maps, stats
- Pro tour proposal
- Consolidate route + accom + transport
In
- Required: route data (waypoints, legs, distances, times)
- Required: dates + duration
- Optional: accom (name, address, conf#)
- Optional: transport (flights, trains, car)
- Optional: GPX tracks / spatial data
- Optional: budget info
- Optional: photos / images
Do
Step 1: Compile route + POI data
Data Sources to Compile:
┌────────────────────┬──────────────────────────────────────────┐
│ Category │ Required Fields │
├────────────────────┼──────────────────────────────────────────┤
│ Route legs │ From, To, distance_km, time_hrs, mode │
│ Waypoints │ Name, lat, lon, arrival, departure, notes│
│ Accommodation │ Name, address, check-in/out, cost, conf#│
│ Transport │ Type, operator, depart, arrive, ref# │
│ Activities │ Name, time, duration, cost, booking_req │
│ Emergency contacts │ Local emergency #, embassy, insurance │
│ POIs │ Name, category, lat, lon, description │
└────────────────────┴──────────────────────────────────────────┘
Organize by day:
- Group waypoints + activities by date
- Assign transport leg to day
- Match accom to overnight dates
- Daily totals (distance, time, cost)
→ Complete collection by day, no gaps (every night = accom, every leg = transport).
If err: incomplete → [TBD] placeholders + follow-up checklist. Dates misalign → flag + adjust.
Step 2: Structure daily sections
---
title: "Tour Name: Region/Country"
subtitle: "Date Range"
author: "Planner Name"
date: today
format:
html:
toc: true
toc-depth: 3
theme: cosmo
self-contained: true
code-fold: true
pdf:
documentclass: article
geometry: margin=2cm
toc: true
execute:
echo: false
warning: false
message: false
---
Structure:
Report Structure:
1. Overview
- Tour summary (dates, total distance, highlights)
- Overview map (all waypoints, full route)
- Quick reference table (key dates, bookings, contacts)
2. Day 1: [Title]
- Day summary (start, end, km, hours)
- Route map for the day
- Timeline / schedule table
- Accommodation details
- POIs and activities
3. Day 2: [Title]
... (repeat for each day)
N. Logistics Appendix
- Full accommodation table
- Transport bookings table
- Packing checklist
- Emergency contacts
- Budget summary
→ Complete .qmd skeleton w/ YAML + H2 headings + placeholders.
If err: >14 days → split weekly or tabset. PDF → no interactive widgets (static maps).
Step 3: Embed maps + charts
Overview map:
#| label: fig-overview-map
#| fig-cap: "Tour overview with all stops"
leaflet::leaflet() |>
leaflet::addProviderTiles("OpenTopoMap") |>
leaflet::addPolylines(data = full_route, color = "#2563eb", weight = 3) |>
leaflet::addMarkers(data = stops, popup = ~paste(name, "<br>", date))
Daily route map:
#| label: fig-day1-map
#| fig-cap: "Day 1 route: City A to City B"
day1_route <- full_route[full_route$day == 1, ]
leaflet::leaflet() |>
leaflet::addProviderTiles("OpenStreetMap") |>
leaflet::addPolylines(data = day1_route, color = "#2563eb", weight = 4) |>
leaflet::addCircleMarkers(data = day1_stops, radius = 6, popup = ~name)
Elevation profile (hike/cycle):
#| label: fig-day3-elevation
#| fig-cap: "Day 3 elevation profile"
ggplot2::ggplot(day3_elevation, ggplot2::aes(x = dist_km, y = elev_m)) +
ggplot2::geom_area(fill = "#bfdbfe", alpha = 0.5) +
ggplot2::geom_line(color = "#1d4ed8", linewidth = 0.7) +
ggplot2::theme_minimal() +
ggplot2::labs(x = "Distance (km)", y = "Elevation (m)")
→ Each day ≥ route map. Multi-modal = road + elevation. Overview = full tour map.
If err: leaflet fails PDF → fallback tmap::tmap_mode("plot") or ggplot2 + ggspatial::annotation_map_tile(). No spatial → text description.
Step 4: Logistics tables
Accommodation:
| Night | Date | Accommodation | Address | Check-in | Cost | Conf# |
|-------|------------|--------------------|--------------------|----------|--------|-------|
| 1 | 2025-07-01 | Hotel Alpine | Bergstrasse 12 | 15:00 | EUR 95 | AB123 |
| 2 | 2025-07-02 | Mountain Hut | Zugspitze Huette | 16:00 | EUR 45 | -- |
| 3 | 2025-07-03 | Pension Edelweiss | Dorfplatz 3 | 14:00 | EUR 72 | CD456 |
Transport:
| Date | Type | From | To | Depart | Arrive | Ref# |
|------------|-------|---------------|---------------|--------|--------|--------|
| 2025-07-01 | Train | Munich Hbf | Garmisch | 08:15 | 09:32 | DB1234 |
| 2025-07-03 | Bus | Zugspitze | Ehrwald | 10:00 | 10:25 | -- |
| 2025-07-04 | Train | Innsbruck | Munich Hbf | 16:45 | 18:30 | OBB567 |
Budget:
| Category | Estimated | Actual | Notes |
|-----------------|-----------|--------|-------------------------|
| Accommodation | EUR 212 | | 3 nights |
| Transport | EUR 85 | | Rail passes recommended |
| Food | EUR 150 | | EUR 50/day estimate |
| Activities | EUR 60 | | Cable car, museum |
| **Total** | **EUR 507** | | |
→ Complete logistics tables chronological, no missing dates, totals correct.
If err: unconfirmed → [TBD] + highlight row. Multi-currency → add column + footnote exchange rates.
Step 5: Render
# Render to self-contained HTML (best for offline use)
quarto render tour-report.qmd --to html
# Render to PDF (for printing)
quarto render tour-report.qmd --to pdf
# Preview with live reload during editing
quarto preview tour-report.qmd
Post-render checks:
- HTML opens, maps load
- TOC links work
- Images + charts render right sizes
- Self-contained HTML offline (disconnect + reload)
- PDF → page breaks logical (between days)
→ Complete self-contained doc, offline, navigable.
If err: render fails → check R console pkg errors (sf, leaflet, ggplot2). HTML >20 MB → reduce tile res or PNG screenshots. PDF LaTeX fail → quarto install tinytex.
Check
- Renders no err in target format
- Overview map = full route + stops
- Each day has route map + schedule
- Accom table = every night
- Transport table = all legs
- Budget totals accurate
- Self-contained HTML offline
- TOC navigates correctly
- No
[TBD](or intentionally flagged)
Traps
- Interactive maps in PDF: leaflet/widgets no render PDF. Provide static alternative.
- Oversized HTML: many tiles → huge file. Limit zoom or PNG screenshots.
- Missing TZ: international crosses TZ. Always specify depart/arrive TZ.
- Stale bookings: conf#/times change. "Last updated" date + remind verify.
- No offline fallback: web-tile maps → blank offline.
self-contained: trueor pre-render. - Inconsistent date fmt: ISO 8601 (YYYY-MM-DD) throughout.
→
plan-tour-route— route data fed into reportcreate-spatial-visualization— maps + chartscreate-quarto-report— general Quartoplan-hiking-tour— hiking-specific datacheck-hiking-gear— packing checklists
GitHub 仓库
相关推荐技能
content-collections
元Content Collections 是一个 TypeScript 优先的构建工具,可将本地 Markdown/MDX 文件转换为类型安全的数据集合。它专为构建博客、文档站和内容密集型 Vite+React 应用而设计,提供基于 Zod 的自动模式验证。该工具涵盖从 Vite 插件配置、MDX 编译到生产环境部署的完整工作流。
polymarket
元这个Claude Skill为开发者提供完整的Polymarket预测市场开发支持,涵盖API调用、交易执行和市场数据分析。关键特性包括实时WebSocket数据流,可监控实时交易、订单和市场动态。开发者可用它构建预测市场应用、实施交易策略并集成实时市场预测功能。
creating-opencode-plugins
元该Skill帮助开发者创建OpenCode插件,用于接入命令、文件、LSP等25+种事件。它提供了插件结构、事件API规范和JavaScript/TypeScript实现模式,适合需要拦截操作、扩展功能或自定义事件处理的场景。开发者可通过它快速构建响应式模块来增强OpenCode AI助手的能力。
sglang
元SGLang是一个专为LLM设计的高性能推理框架,特别适用于需要结构化输出的场景。它通过RadixAttention前缀缓存技术,在处理JSON、正则表达式、工具调用等具有重复前缀的复杂工作流时,能实现极速生成。如果你正在构建智能体或多轮对话系统,并追求远超vLLM的推理性能,SGLang是理想选择。
