はい、承知いたしました。
**「提供されたリンクのうち、最初の2つを本文の前に、3つ目以降の残りのリンクを本文の後に配置する」**というルールを追加し、さらに明確な指示にブラッシュアップした【究極の完全版プロンプト】を作成しました。
次回以降、以下の内容をすべてコピーしてAIに渡すだけで、条件通りのHTMLが生成されます。
---
# Blogger / HTML化 テンプレート組み込み型・完全指示プロンプト
## 【HTMLテンプレート固定・本文&リンク交換・数式完全保持・インライン数式対応・初期文字22px】
あなたは、**HTML / CSS / JavaScript / MathJaxに精通したプロフェッショナルなフロントエンドエンジニア**です。
私が提供する【今回の本文】【今回のリンク】【今回のタイトル】を使用し、後述する**【ベースHTMLテンプレート】**の所定の場所(`<!-- ここに○○を挿入 -->`)に内容を流し込み、**デザイン・機能・レイアウトを維持した完全なHTMLを生成してください。**
---
# 1.最重要ルール
## 1-1. 古いデータを絶対に残さない
* テンプレート内のプレースホルダー(`<!-- ここに... -->`)は、**今回の入力内容**に完全に置き換える。
* 私が提供していない古いURLや本文を勝手に生成・混入させない。
## 1-2. 文字サイズ(絶対厳守)
* 初期値は必ず `22px`。
* テンプレートのCSS `--base-font-size: 22px;` および、スライダーの `value="22"` を絶対に変更しない。
## 1-3. インライン数式処理(絶対厳守)
* 本文中に `$t=0$` や `$\Delta t=1$` などが存在する場合、これは**インライン数式**である。
* 勝手に `t = 0` や `t = 0秒`、`\(t=0\)` などに変換せず、必ず原文の `$t=0$` をそのまま維持して `<p>` タグ内に埋め込むこと。
* 全角の `t=0` と半角の `$t=0$` を勝手に統一しない。原文のまま保持する。
## 1-4. 本文の原文保持
* 要約、言い換え、勝手な校正、勝手な単位(秒など)の追加は一切禁止。
* 本文を論理的なHTML(`<p>`, `<h3>`, `<ul>`, `<div class="code-container">` など)に構造化することは許可するが、文字や数式そのものは一文字も変えないこと。
## 1-5. リンクの配置ルール(絶対厳守)
* 提供されたリンク一覧のうち、**「先頭の2つのリンク」**は、必ず本文の前の `<!-- 先頭リンク -->`(`#top-links`)内に配置すること。
* **「3つ目以降の残りのリンク」**は、必ず本文の後の `<!-- 追加リンク -->`(`#additional-links`)内に配置すること。
* 残りのリンクが存在しない場合は `<li>特になし</li>` とすること。
---
# 2.ベースHTMLテンプレート
**以下のコードをベースとし、`<!-- ここに○○ -->` の部分を入力内容に応じて書き換えて出力してください。テンプレートのCSS・JS・UI構造は一切変更・省略してはいけません。**
```html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><!-- 【ここに今回のページタイトルを挿入】 --></title>
<script>
window.MathJax = {
tex: {
inlineMath: [['$', '$'], ['\\(', '\\)']],
displayMath: [['$$', '$$'], ['\\[', '\\]']]
}
};
</script>
<script id="MathJax-script" async src="<https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js>"></script>
<style>
:root {
--bg-color: #f8f9fa;
--text-color: #000;
--box-bg: #fff;
--box-border: #ddd;
--user-bg: #e6f7ff;
--ai-bg: #f6ffed;
--base-font-size: 22px;
}
body.dark-mode {
--bg-color: #121212;
--text-color: #ffffff;
--box-bg: #1e1e1e;
--box-border: #333;
--user-bg: #1a2a3a;
--ai-bg: #1e3a1e;
}
body {
font-size: var(--base-font-size, 22px);
background-color: var(--bg-color);
color: var(--text-color);
max-width: 800px;
margin: 0 auto;
padding: 20px;
line-height: 1.8;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans JP", "Yu Gothic", sans-serif;
box-sizing: border-box;
transition: background-color 0.3s, color 0.3s;
}
* {
box-sizing: border-box;
}
.settings-ui, .link-section, .message {
background-color: var(--box-bg);
border: 1px solid var(--box-border);
}
.settings-ui {
border-radius: 8px;
padding: 15px;
margin-bottom: 20px;
}
.settings-row {
display: flex;
align-items: center;
gap: 10px;
flex-wrap: wrap;
margin-bottom: 10px;
}
.settings-row:last-child {
margin-bottom: 0;
}
.settings-row label {
font-weight: bold;
}
input[type="range"] {
flex: 1;
min-width: 160px;
}
select, button {
font-size: 0.8em;
padding: 7px 10px;
border: 1px solid var(--box-border);
background-color: var(--box-bg);
color: var(--text-color);
border-radius: 5px;
cursor: pointer;
}
button:hover {
opacity: 0.8;
}
.link-section {
padding: 15px;
margin-bottom: 20px;
border-radius: 8px;
}
.link-section h3 {
margin-top: 0;
font-size: 1.1em;
border-bottom: 1px solid var(--box-border);
padding-bottom: 5px;
}
.link-section ul {
padding-left: 20px;
margin-bottom: 0;
}
.link-section li {
margin-bottom: 8px;
}
.link-section a {
color: #007bff;
word-break: break-all;
text-decoration: none;
}
.link-section a:hover {
text-decoration: underline;
}
body.dark-mode .link-section a {
color: #4da3ff;
}
.message {
padding: 20px;
margin-bottom: 20px;
border-radius: 10px;
}
.message h3 {
margin-top: 0;
border-bottom: 1px solid var(--box-border);
padding-bottom: 8px;
font-size: 1.2em;
}
.message h4 {
margin-top: 1.5em;
margin-bottom: 0.5em;
font-size: 1.1em;
}
.message p {
margin-bottom: 1em;
margin-top: 0;
}
.message blockquote {
border-left: 5px solid var(--box-border);
padding: 10px 15px;
margin: 10px 0;
background-color: rgba(0,0,0,0.03);
}
body.dark-mode .message blockquote {
background-color: rgba(255,255,255,0.05);
}
.code-container {
position: relative;
margin: 1em 0;
}
.code-container pre {
margin: 0;
padding: 40px 15px 15px 15px;
border: 1px solid var(--box-border);
background-color: #272822;
color: #f8f8f2;
border-radius: 6px;
overflow-x: auto;
font-family: monospace;
}
.copy-btn {
position: absolute;
top: 8px;
right: 8px;
z-index: 2;
background-color: #444;
color: #fff;
border: none;
padding: 5px 10px;
border-radius: 3px;
}
.copy-btn:hover {
background-color: #666;
opacity: 1;
}
body.force-inline mjx-container[display="true"] {
display: inline-block !important;
margin: 0 !important;
}
body.force-display mjx-container {
display: block !important;
text-align: center !important;
margin: 1em 0 !important;
}
/* テーブル用スタイル */
.data-table {
border-collapse: collapse;
width: 100%;
margin: 15px 0;
background-color: var(--box-bg);
}
.data-table th, .data-table td {
border: 1px solid var(--box-border);
padding: 10px;
text-align: center;
}
.data-table th {
background-color: rgba(0,0,0,0.03);
}
body.dark-mode .data-table th {
background-color: rgba(255,255,255,0.05);
}
@media (max-width: 600px) {
body { padding: 10px; }
.settings-row { align-items: flex-start; flex-direction: column; }
.settings-row input[type="range"] { width: 100%; }
}
</style>
</head>
<body class="dark-mode">
<div class="settings-ui">
<div class="settings-row">
<label for="font-size-slider">文字サイズ: <span id="font-size-display">22px</span></label>
<input type="range" id="font-size-slider" min="10" max="40" value="22" step="1">
</div>
<div class="settings-row">
<label for="math-style-selector">数式スタイル:</label>
<select id="math-style-selector">
<option value="default">標準(自動)</option>
<option value="force-inline">全てインライン(テキスト内埋め込み)</option>
<option value="force-display">全て独立行(ディスプレイ)</option>
</select>
</div>
<div class="settings-row">
<label for="ai-selector">AI選択:</label>
<select id="ai-selector">
<option value="AI Studio" selected>AI Studio</option>
<option value="ChatGPT">ChatGPT</option>
<option value="Claude">Claude</option>
<option value="Gemini">Gemini</option>
</select>
<button type="button" id="download-btn">この対話を保存</button>
<button type="button" id="dark-mode-btn">背景・文字色を反転</button>
</div>
</div>
<!-- 先頭リンク -->
<div class="link-section" id="top-links">
<h3>【提供したリンク】</h3>
<ul>
<!-- 【提供されたリンクのうち、先頭の1つ目と2つ目を <li><a href="URL" target="_blank" rel="noopener noreferrer">タイトルまたはURL</a></li> の形式でここに挿入】 -->
</ul>
</div>
<!-- 対話本文 -->
<div id="chat-content">
<!-- ユーザーメッセージ -->
<div class="message user" style="background-color: var(--user-bg);">
<h3>ユーザー</h3>
<!-- 【ここにユーザーの本文を段落 <p> や数式などを適用して挿入】 -->
</div>
<!-- AIメッセージ -->
<div class="message ai" style="background-color: var(--ai-bg);">
<h3>AI</h3>
<!-- 【ここにAIの本文を段落 <p> や見出し <h4>、数式などを適用して挿入】 -->
</div>
</div>
<!-- 追加リンク -->
<div class="link-section" id="additional-links">
<h3>【追加リンク】</h3>
<ul>
<!-- 【提供されたリンクのうち、3つ目以降の残りのリンクを <li><a href="...">...</a></li> 形式でここに挿入。なければ <li>特になし</li> とする】 -->
</ul>
</div>
<!-- 本文内のリンク -->
<div class="link-section" id="inline-links">
<h3>【本文内のリンク】</h3>
<ul>
<!-- 【本文中にURLがあればここに抽出して挿入。なければ <li>特になし</li> とする】 -->
</ul>
</div>
<script>
// 文字サイズ変更
const fontSizeSlider = document.getElementById('font-size-slider');
const fontSizeDisplay = document.getElementById('font-size-display');
fontSizeSlider.addEventListener('input', function() {
const value = this.value;
document.documentElement.style.setProperty('--base-font-size', value + 'px');
fontSizeDisplay.textContent = value + 'px';
});
// 数式スタイル変更
const mathStyleSelector = document.getElementById('math-style-selector');
mathStyleSelector.addEventListener('change', function() {
document.body.classList.remove('force-inline', 'force-display');
if (this.value === 'force-inline') {
document.body.classList.add('force-inline');
} else if (this.value === 'force-display') {
document.body.classList.add('force-display');
}
if (window.MathJax && MathJax.typesetPromise) {
MathJax.typesetPromise();
}
});
// ダークモード切替
const darkModeBtn = document.getElementById('dark-mode-btn');
darkModeBtn.addEventListener('click', function() {
document.body.classList.toggle('dark-mode');
});
// HTML保存
const downloadBtn = document.getElementById('download-btn');
const aiSelector = document.getElementById('ai-selector');
downloadBtn.addEventListener('click', function() {
const now = new Date();
const pad = num => String(num).padStart(2, '0');
const timestamp = now.getFullYear() + pad(now.getMonth() + 1) + pad(now.getDate()) +
pad(now.getHours()) + pad(now.getMinutes()) + pad(now.getSeconds());
const aiName = aiSelector.value.replace(/\s+/g, '_');
const fileName = '_' + aiName + '_' + timestamp + '.html';
const htmlContent = '<!DOCTYPE html>\n' + document.documentElement.outerHTML;
const blob = new Blob([htmlContent], { type: 'text/html;charset=utf-8' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url; a.download = fileName; document.body.appendChild(a); a.click();
document.body.removeChild(a); URL.revokeObjectURL(url);
});
// コードコピー
document.addEventListener('click', async function(event) {
const button = event.target.closest('.copy-btn');
if (!button) return;
const container = button.closest('.code-container');
if (!container) return;
const code = container.querySelector('pre code');
if (!code) return;
const text = code.innerText;
const originalText = button.textContent;
let copied = false;
try {
if (navigator.clipboard && window.isSecureContext) {
await navigator.clipboard.writeText(text); copied = true;
}
} catch (error) { copied = false; }
if (!copied) {
try {
const textarea = document.createElement('textarea');
textarea.value = text; textarea.setAttribute('readonly', '');
textarea.style.position = 'fixed'; textarea.style.left = '-9999px'; textarea.style.top = '-9999px';
document.body.appendChild(textarea); textarea.select();
textarea.setSelectionRange(0, textarea.value.length);
copied = document.execCommand('copy'); document.body.removeChild(textarea);
} catch (error) { copied = false; }
}
if (copied) {
button.textContent = 'コピーしました';
setTimeout(() => button.textContent = originalText, 2000);
} else {
button.textContent = 'コピーに失敗しました';
setTimeout(() => button.textContent = originalText, 3000);
}
});
</script>
</body>
</html>
【今回のページタイトル】
ここに今回のタイトル
【今回のリンク一覧】
(複数ある場合、そのまま箇条書きやURLの羅列で提供します。
AIは自動的に最初の2つを「提供したリンク(本文前)」へ、
3つ目以降を「追加リンク(本文後)」へ振り分けてください。)
1つ目のURL
2つ目のURL
3つ目のURL
4つ目のURL
【今回の本文】
(ユーザー発言とAI発言をここに貼り付ける)
テンプレートのコードを省略せず、指定箇所を埋めた完全なHTMLコードだけを出力してください。説明文は不要です。