From 55cc9952564cf31f23244904ab987270844c613b Mon Sep 17 00:00:00 2001 From: yeoam Date: Sun, 11 Oct 2026 02:27:21 +0900 Subject: [PATCH] Publish HTML only and remove PDF generation and download links --- .github/workflows/slides.yml | 2 -- .marprc.yml | 2 +- AGENTS.md | 4 ++++ DESIGN.md | 8 ++++++-- README.md | 2 +- SLIDES.md | 8 +++++--- docs/ot-live.md | 7 +++---- package.json | 3 +-- scripts/build-index.mjs | 6 +----- scripts/check-slides.test.mjs | 29 +++++++++++++++++++++++++++-- slides/ot-live/build-live.mjs | 2 +- slides/ot-live/guide.html | 4 ++-- 12 files changed, 52 insertions(+), 25 deletions(-) diff --git a/.github/workflows/slides.yml b/.github/workflows/slides.yml index ff4aca2..1f886fb 100644 --- a/.github/workflows/slides.yml +++ b/.github/workflows/slides.yml @@ -29,8 +29,6 @@ jobs: # 토큰이 테마에 반영됐는지 확인 (tokens.json만 고치고 sync를 잊은 PR 방지) - run: npm run tokens && git diff --exit-code tokens/tokens.css themes/causal-lab.css - run: npm run build - env: - CHROME_PATH: /usr/bin/google-chrome - uses: actions/upload-pages-artifact@v3 with: path: dist diff --git a/.marprc.yml b/.marprc.yml index 3a82277..e3dbac5 100644 --- a/.marprc.yml +++ b/.marprc.yml @@ -1,4 +1,4 @@ -# Marp CLI 설정 — `npm run build` / `npm run build:pdf` +# Marp CLI 설정 — `npm run build` (HTML 공개) inputDir: ./slides output: ./dist themeSet: ./themes diff --git a/AGENTS.md b/AGENTS.md index 0d55b70..2b96ea5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,3 +1,7 @@ +# 현재 공개 방식 (2026-10-11) + +사용자 결정으로 당분간 HTML만 공개합니다. PDF 생성 명령과 배포용 다운로드 링크를 제거했습니다. 아래 과거 인계 메모의 HTML/PDF 병행 결정은 현재 방식으로 대체됩니다. PDF 재개는 HTML과 스타일을 공유하고 페이지별 배치 비교를 통과한 뒤 검토합니다. + # 참여자 AI 튜터 모드 러너가 읽기·풀이·기록·GitHub 제출을 도와달라고 요청하면 먼저 [TUTOR.md](TUTOR.md)를 읽고 그 절차를 따릅니다. 러너의 생각과 확인한 근거를 함께 정리하고, 미확인 내용을 검증된 결과로 쓰지 않습니다. diff --git a/DESIGN.md b/DESIGN.md index 58d44cb..ac4bef4 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -1,7 +1,7 @@ # DESIGN.md — Causal-Lab 슬라이드 디자인 시스템 가짜연구소 인과추론팀(Causal-Lab) PPT 디자인을 마크다운 기반 템플릿으로 옮긴 문서입니다. 디자인만 담고 있으며 특정 발표 내용은 포함하지 않습니다. -발표자는 디자인을 신경 쓰지 않고 **내용만 `.md`로 쓰면** 같은 모양의 HTML(주) / PDF(부)가 만들어지는 것이 목표입니다. +발표자는 디자인을 신경 쓰지 않고 **내용만 `.md`로 쓰면** 같은 디자인의 HTML이 만들어지는 것이 현재 공개 목표입니다. PDF는 화면 배치가 달라져 2026-10-11부터 생성을 중단했습니다. - 디자인 토큰 원본: [`tokens/tokens.json`](tokens/tokens.json) (W3C Design Tokens 형식) - CSS 변수: [`tokens/tokens.css`](tokens/tokens.css) — 자동 생성 @@ -212,4 +212,8 @@ OT 화면의 크기·간격 조정은 덱 전용 `live.css`에 한정하며 공 ## 8. 공개 OT 화면 -공개 OT HTML은 읽기 전용입니다. 텍스트 편집·행 추가·체크 변경 기능을 제공하지 않습니다. 기존 하단 45px 도구 모음에는 이전·다음·현재 쪽수, PDF 저장과 사용 안내 링크를 둡니다. 화면 폭 480px 이하에서는 도구 모음을 12px 글자·6px 간격으로 줄입니다. 사용 안내는 `slides/ot-live/guide.html`을 같은 폴더에 배포하며 흰 배경·navy 제목·peach/blue 반반 구분선을 사용합니다. 본문은 18px, 문서 폭은 최대 800px이고 좁은 화면에서는 자연스럽게 줄바꿈합니다. +공개 OT HTML은 읽기 전용입니다. 텍스트 편집·행 추가·체크 변경 기능을 제공하지 않습니다. 기존 하단 45px 도구 모음에는 이전·다음·현재 쪽수와 사용 안내 링크를 둡니다. 화면 폭 480px 이하에서는 도구 모음을 12px 글자·6px 간격으로 줄입니다. 사용 안내는 `slides/ot-live/guide.html`을 같은 폴더에 배포하며 흰 배경·navy 제목·peach/blue 반반 구분선을 사용합니다. 본문은 18px, 문서 폭은 최대 800px이고 좁은 화면에서는 자연스럽게 줄바꿈합니다. + +## 9. HTML 전용 공개 + +전체 빌드는 HTML만 생성하며 자료 목록과 OT 도구 모음에 PDF 다운로드를 표시하지 않습니다. 로컬의 기존 PDF 파일은 자동 삭제하지 않습니다. CI는 새 작업 폴더에서 HTML을 빌드하므로 기존 공개 PDF는 다음 Pages 배포에서 제외됩니다. PDF를 재개하려면 OT 전용 스타일을 포함해 HTML과 인쇄 스타일을 공유하고, 글꼴 로딩·줄바꿈·표 경계·페이지별 배치 비교를 통과해야 합니다. diff --git a/README.md b/README.md index e58a959..9a83253 100644 --- a/README.md +++ b/README.md @@ -273,7 +273,7 @@ ChatGPT·Claude·Gemini 등 AI 도구를 활용할 수 있습니다. 코드와 ## 발표 슬라이드 작성 -마크다운으로 Causal-Lab 디자인의 HTML/PDF 발표 자료를 만들 수 있습니다. [작성 안내](SLIDES.md)와 [디자인 규칙](DESIGN.md)을 참고하세요. +마크다운으로 Causal-Lab 디자인의 HTML 발표 자료를 만들 수 있습니다. [작성 안내](SLIDES.md)와 [디자인 규칙](DESIGN.md)을 참고하세요. ## 데이터셋 후보 보고서 diff --git a/SLIDES.md b/SLIDES.md index da78768..aa43cc9 100644 --- a/SLIDES.md +++ b/SLIDES.md @@ -1,8 +1,10 @@ # Causal-Lab 슬라이드 템플릿 -마크다운으로 발표 자료를 쓰면 Causal-Lab 디자인이 적용된 HTML과 PDF가 만들어지는 템플릿입니다. +마크다운으로 발표 자료를 쓰면 Causal-Lab 디자인이 적용된 HTML이 만들어지는 템플릿입니다. GitHub Actions가 빌드해서 GitHub Pages에 올립니다. +현재는 HTML로만 공개합니다. PDF 변환은 화면 배치가 달라지는 문제로 중단했으며, HTML과의 페이지별 비교를 통과한 뒤 재개를 검토합니다. + OT 자료를 보거나 수정하려면 [OT 사용 안내](docs/ot-live.md)를 참고하세요. 공개 HTML은 읽기 전용이며 원본 수정 PR이 병합된 뒤 다시 배포됩니다. ## 챕터 오너의 내용과 선택 슬라이드 @@ -28,7 +30,7 @@ OT 자료를 보거나 수정하려면 [OT 사용 안내](docs/ot-live.md)를 ## 파일 배치 자동 검사 -PR의 CI와 HTML·PDF·OT·보고서 빌드, 로컬 미리보기 시작 전에 같은 파일 배치 검사를 실행합니다. +PR의 CI와 HTML·OT·보고서 빌드, 로컬 미리보기 시작 전에 같은 파일 배치 검사를 실행합니다. - 발표 폴더에는 파일 이름이 정확히 `index.md`인 파일이 있어야 합니다. - `slides/<발표 폴더>/index.md` 외의 마크다운은 허용하지 않습니다. `README.md`, `INDEX.MD`, `img/notes.md`나 `.markdown`·`.mdown`·`.markdn` 파일도 차단합니다. @@ -55,7 +57,7 @@ GitHub 웹에서 제출하는 순서(Fork, branch, 파일 올리기, PR)는 [TUT - **VS Code**: 추천 확장(Marp for VS Code)을 설치하면 이 테마로 바로 미리보기 됩니다. - **로컬 서버**: `npm ci` 후 `npm run dev` -- **전체 빌드**: `npm run build` → `dist/`에 덱별 `index.html`, `index.pdf`와 목록 페이지 (Chrome 필요) +- **전체 빌드**: `npm run build` → `dist/`에 덱별 `index.html`과 목록 페이지 러너와 챕터 오너는 설치 없이 GitHub 웹만으로 제출할 수 있습니다. 로컬 미리보기는 선택입니다. diff --git a/docs/ot-live.md b/docs/ot-live.md index 39929b0..74a68fb 100644 --- a/docs/ot-live.md +++ b/docs/ot-live.md @@ -3,7 +3,6 @@ ## 자료 보기와 저장 - [Pages에서 OT 보기](https://causalinferencelab.github.io/data-still-does-not-speak/ot-live/): 하단 이전·다음 버튼 또는 방향키·Page Up/Down으로 이동합니다. Home은 첫 장, End는 마지막 장입니다. -- [PDF 저장](https://causalinferencelab.github.io/data-still-does-not-speak/ot-live/index.pdf): PDF 화면의 다운로드 버튼으로 저장할 수 있습니다. - [GitHub에서 원본 내용 읽기](../slides/ot-live/index.md): 문서 형식이며, 발표 화면은 Pages에서 봅니다. - HTML을 보관하려면 OT 화면에서 브라우저의 **페이지 다른 이름으로 저장 → 웹페이지, 전체**를 선택하고 HTML과 생성된 이미지 폴더를 함께 보관합니다. @@ -16,17 +15,17 @@ 3. **Commit changes**로 작업 브랜치에 저장하고 **Contribute → Open pull request**로 원본 `main`에 제안합니다. 4. 검토·병합 후 배포가 완료되면 Pages에 반영됩니다. PR을 여는 것만으로는 반영되지 않습니다. -자세한 화면별 절차는 [제출 안내](../CONTRIBUTING.md)를 참고하세요. 생성된 HTML·PDF는 직접 커밋하지 않습니다. +자세한 화면별 절차는 [제출 안내](../CONTRIBUTING.md)를 참고하세요. 생성된 HTML는 직접 커밋하지 않습니다. ## 유지보수자 빌드 - 원본: `slides/ot-live/index.md` - 전용 화면 스타일: `slides/ot-live/live.css` -- 생성 결과: `dist/ot-live/index.html`, `dist/ot-live/index.pdf` +- 생성 결과: `dist/ot-live/index.html` - 전체 빌드: `npm run build` - OT HTML만 다시 생성: `npm run build:ot-live` (기존 의존성이 설치된 환경) -화면 전용 CSS는 HTML 발표용입니다. PDF는 공통 Marp 테마로 생성하는 보조 출력입니다. +현재 자료는 HTML로만 공개합니다. PDF 생성과 공개 다운로드를 중단했습니다. 기존 PDF는 OT 전용 HTML 스타일 없이 공통 Marp 테마로 다시 변환되어 화면 배치가 달라졌습니다. PDF 재개 시에는 HTML과 공유하는 스타일·인쇄 레이아웃·폰트 로딩을 점검하고 페이지별 시각 비교를 통과해야 합니다. ## 이름·LinkedIn·목표 한 줄 diff --git a/package.json b/package.json index 2c7c865..57758e3 100644 --- a/package.json +++ b/package.json @@ -8,9 +8,8 @@ "tokens": "node scripts/sync-tokens.mjs", "dev": "npm run check:slides && marp --no-stdin --server ./slides", "build:html": "npm run check:slides && marp --no-stdin", - "build:pdf": "npm run check:slides && marp --no-stdin --pdf", "build:reports": "npm run check:slides && node scripts/build-index.mjs", - "build": "npm run check:slides && npm run tokens && npm run build:html && npm run build:pdf && node scripts/copy-assets.mjs && npm run build:ot-live && node scripts/build-index.mjs", + "build": "npm run check:slides && npm run tokens && npm run build:html && node scripts/copy-assets.mjs && npm run build:ot-live && node scripts/build-index.mjs", "build:ot-live": "npm run check:slides && node slides/ot-live/build-live.mjs" }, "devDependencies": { diff --git a/scripts/build-index.mjs b/scripts/build-index.mjs index e4b68a2..ee0a375 100644 --- a/scripts/build-index.mjs +++ b/scripts/build-index.mjs @@ -32,16 +32,13 @@ const decks = readdirSync("slides") dir: d, title: pick("title") ?? d, presenter: pick("presenter") ?? "", - pdf: existsSync(join("dist", d, "index.pdf")), }; }); const esc = (s) => s.replace(/[&<>"]/g, (c) => ({ "&": "&", "<": "<", ">": ">", '"': """ })[c]); const rows = decks .map( - (d) => `
  • ${esc(d.title)}${d.presenter ? `${esc(d.presenter)}` : ""}${ - d.pdf ? ` PDF` : "" - }
  • ` + (d) => `
  • ${esc(d.title)}${d.presenter ? `${esc(d.presenter)}` : ""}
  • ` ) .join("\n"); const reportRows = reports.map((r) => `
  • ${esc(r.title)}
  • `).join("\n"); @@ -65,7 +62,6 @@ li{font-size:19px;margin:0 0 14px} li a{color:var(--color-text-primary);font-weight:700;text-decoration:none} li a:hover,li a:focus-visible{color:var(--color-brand-navy);text-decoration:underline} li span{color:var(--color-text-muted);margin-left:12px;font-size:16px} -a.pdf{font-size:13px;font-weight:700;color:var(--color-brand-navy);border:1px solid var(--color-brand-blue);padding:1px 6px;margin-left:10px} footer{position:fixed;bottom:0;left:0;right:0;height:36px;background:var(--color-brand-blue)}
    diff --git a/scripts/check-slides.test.mjs b/scripts/check-slides.test.mjs index 73699df..86039b2 100644 --- a/scripts/check-slides.test.mjs +++ b/scripts/check-slides.test.mjs @@ -1,5 +1,5 @@ import assert from 'node:assert/strict'; -import { cpSync, existsSync, mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs'; +import { cpSync, existsSync, mkdtempSync, mkdirSync, readFileSync, rmSync, symlinkSync, writeFileSync } from 'node:fs'; import { tmpdir } from 'node:os'; import { dirname, join } from 'node:path'; import { fileURLToPath } from 'node:url'; @@ -70,7 +70,7 @@ for (const path of [ }); } -for (const command of ['build', 'build:pdf', 'dev', 'build:ot-live', 'build:reports']) { +for (const command of ['build', 'dev', 'build:ot-live', 'build:reports']) { test(`${command} also blocks invalid Markdown before its build step`, () => { const result = build({ 'slides/demo/index.md': deck, 'slides/demo/README.md': '# Notes\n' }, command); assert.equal(result.status, 1, result.stdout + result.stderr); @@ -78,3 +78,28 @@ for (const command of ['build', 'build:pdf', 'dev', 'build:ot-live', 'build:repo assert.equal(result.html, null); }); } + +test('OT and listing publish HTML without PDF download links', () => { + const cwd = mkdtempSync(join(tmpdir(), 'slides-html-only-')); + try { + for (const name of ['package.json', '.marprc.yml', 'scripts', 'tokens', 'themes', 'assets', 'slides']) { + cpSync(join(root, name), join(cwd, name), { recursive: true }); + } + symlinkSync(join(root, 'node_modules'), join(cwd, 'node_modules'), 'dir'); + mkdirSync(join(cwd, 'dist/ot-live'), { recursive: true }); + writeFileSync(join(cwd, 'dist/ot-live/index.pdf'), 'old local PDF'); + const result = spawnSync('npm', ['run', 'build'], { cwd, encoding: 'utf8', timeout: 30000 }); + assert.equal(result.status, 0, result.stdout + result.stderr); + assert.equal(existsSync(join(cwd, 'dist/example/index.pdf')), false); + assert.equal(readFileSync(join(cwd, 'dist/ot-live/index.pdf'), 'utf8'), 'old local PDF'); + for (const name of ['dist/index.html', 'dist/ot-live/index.html', 'dist/ot-live/guide.html']) { + const html = readFileSync(join(cwd, name), 'utf8'); + assert.doesNotMatch(html, /href=["'][^"']*\.pdf/i); + } + const html = readFileSync(join(cwd, 'dist/ot-live/index.html'), 'utf8'); + assert.match(html, /','').replace(/lang="C"/g,'lang="ko"'); -const toolbar=`
    PDF 저장사용 안내
    `; +const toolbar=`
    사용 안내
    `; html=html.replace('',''); html=html.replace('',toolbar+''); writeFileSync(output,html); diff --git a/slides/ot-live/guide.html b/slides/ot-live/guide.html index 84687dc..0f87649 100644 --- a/slides/ot-live/guide.html +++ b/slides/ot-live/guide.html @@ -12,7 +12,7 @@

    OT 자료 사용 안내

    슬라이드 보기

    OT 열기에서 하단의 이전·다음 버튼으로 이동하세요. 키보드 방향키·Page Up·Page Down도 사용할 수 있습니다. Home은 첫 장, End는 마지막 장입니다.

    파일로 보관하기

    -

    OT PDF 저장을 누르세요. 브라우저에서 PDF가 열리면 PDF 화면의 다운로드 버튼으로 저장할 수 있습니다. 작은 화면에서는 PDF를 확대해 읽으세요.

    +

    현재 자료는 HTML로만 제공합니다. PDF 변환은 화면 배치가 달라지는 문제가 있어 당분간 제공하지 않습니다.

    HTML을 파일로 보관하려면 OT 화면에서 브라우저의 페이지 다른 이름으로 저장을 선택하고 웹페이지, 전체 형식으로 저장하세요. 생성된 HTML과 이미지 폴더를 함께 보관해야 식당 사진도 표시됩니다.

    GitHub에서 내용 확인·수정하기

      @@ -21,7 +21,7 @@

      GitHub에서 내용 확인·수정하기

    1. slides/ot-live/index.md의 연필 아이콘으로 수정하고 Commit changes로 작업 브랜치에 저장합니다. 맨 위 설정과 슬라이드 구분선 ---은 유지하세요.
    2. Contribute → Open pull request로 변경을 제안합니다. 대상은 원본 저장소의 main입니다. 단계별 제출 안내도 참고하세요.
    -

    PR이 검토·병합되고 배포가 완료되면 Pages에 반영됩니다. PR을 여는 즉시 공개 자료가 바뀌지는 않습니다. 생성된 HTML·PDF를 직접 수정하거나 커밋하지 않습니다.

    +

    PR이 검토·병합되고 배포가 완료되면 Pages에 반영됩니다. PR을 여는 즉시 공개 자료가 바뀌지는 않습니다. 생성된 HTML를 직접 수정하거나 커밋하지 않습니다.

    이름·LinkedIn·목표 한 줄

    빌더가 공유하는 Google 폼으로 제출하고, 응답을 모아 한 번에 반영합니다. 공개 OT 화면에는 입력하지 않습니다.