Sociology Paper Generator
Create structured outlines for your sociology papers with theoretical frameworks.
Your Paper Title Will Appear Here
Configure your paper's parameters and click "Generate Paper" to see the outline here.
Paper Details
Sample Configuration (USA Context)
Title: The Digital Divide: Social Media's Impact on Political Polarization in the U.S.
Thesis: This paper argues that social media platforms, through algorithmic content curation and the formation of ideological echo chambers, have significantly exacerbated political polarization within the United States.
Theory: Conflict Theory
Paragraphs: 5
${intro}
`; textForPdf.push({ type: 'h3', content: 'Introduction' }, { type: 'p', content: intro }); // --- Body Paragraphs --- html += `Body Paragraphs
`; textForPdf.push({ type: 'h3', content: 'Body Paragraphs' }); for (let i = 1; i <= numParagraphs; i++) { let topicSentence = `This is placeholder text for body paragraph ${i}. This section should elaborate on a key aspect of the thesis, supported by evidence and analysis.`; switch (theory) { case 'functionalism': topicSentence = `From a structural functionalist perspective, paragraph ${i} could explore how a specific social institution contributes to the stability or instability of the whole social system in relation to the thesis. It analyzes the manifest and latent functions of the phenomena being studied.`; break; case 'conflict': topicSentence = `Applying Conflict Theory, paragraph ${i} would focus on the power differentials and inequalities inherent in the topic. It examines how competition for scarce resources (e.g., power, wealth, status) between different social groups shapes the social outcomes described in the thesis.`; break; case 'interactionism': topicSentence = `Through the lens of Symbolic Interactionism, paragraph ${i} should analyze the micro-level interactions and subjective meanings that individuals attach to their social world. This section would explore how shared symbols, language, and social constructions relate to the thesis statement.`; break; case 'feminist': topicSentence = `Utilizing a Feminist theoretical framework, paragraph ${i} would critically analyze the issue from the perspective of gender inequality. It would investigate how social structures and power dynamics perpetuate the subordination of women and how this intersects with the paper's main argument.`; break; } html += `${topicSentence}
`; textForPdf.push({ type: 'p', content: topicSentence }); } // --- Conclusion --- const conclusion = `In conclusion, this analysis, guided by ${paramTheory.options[paramTheory.selectedIndex].text}, has substantiated the thesis that ${thesis.toLowerCase()} The evidence presented across the body paragraphs highlights the complex interplay of social forces. Future research could expand on these findings by exploring [suggest a direction for future research].`; html += `Conclusion
${conclusion}
`; textForPdf.push({ type: 'h3', content: 'Conclusion' }, { type: 'p', content: conclusion }); // Update state and UI generatedContent = { title, html, text: textForPdf }; paperTitleOutput.textContent = title; paperBodyOutput.innerHTML = generatedContent.html; switchTab('paper'); }; // --- PDF Generation --- const generatePDF = () => { const { jsPDF } = window.jspdf; if (!generatedContent.title) { alert("Please generate a paper outline first."); return; } const doc = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4' }); // Set fonts (jsPDF has built-in serif fonts) const bodyFont = 'times'; const headingFont = 'helvetica'; // --- Page Numbering Footer --- const addFooter = () => { const pageCount = doc.internal.getNumberOfPages(); for (let i = 1; i <= pageCount; i++) { doc.setPage(i); doc.setFont(bodyFont, 'italic'); doc.setFontSize(10); doc.setTextColor(100); doc.text(String(i), doc.internal.pageSize.getWidth() / 2, 285, { align: 'center' }); } }; // --- Page 1: Title Page --- doc.setFont(headingFont, 'bold'); doc.setFontSize(18); doc.text(generatedContent.title, 105, 60, { align: 'center', maxWidth: 180 }); doc.setFont(bodyFont, 'normal'); doc.setFontSize(12); doc.text("by", 105, 80, { align: 'center' }); doc.text("A. N. Author", 105, 87, { align: 'center' }); doc.text("University of Sociology", 105, 100, { align: 'center' }); doc.text(`Date: ${new Date().toLocaleDateString('en-US')}`, 105, 107, { align: 'center' }); // --- Content Pages --- doc.addPage(); const leftMargin = 20; const rightMargin = 20; const usableWidth = doc.internal.pageSize.getWidth() - leftMargin - rightMargin; let yPosition = 30; generatedContent.text.forEach(item => { if (yPosition > 260) { // Check for page break before printing doc.addPage(); yPosition = 30; } if (item.type === 'h3') { doc.setFont(headingFont, 'bold'); doc.setFontSize(14); const lines = doc.splitTextToSize(item.content, usableWidth); doc.text(lines, leftMargin, yPosition); yPosition += (lines.length * 7) + 2; // Extra space after heading } else if (item.type === 'p') { doc.setFont(bodyFont, 'normal'); doc.setFontSize(12); const lines = doc.splitTextToSize(item.content, usableWidth); // Add paragraph indentation lines[0] = " " + lines[0]; doc.text(lines, leftMargin, yPosition); yPosition += (lines.length * 5.5) + 5; // Extra space after paragraph } }); addFooter(); doc.save(`${generatedContent.title.replace(/\s+/g, '_')}.pdf`); }; // --- Event Listeners --- tabPaper.addEventListener('click', () => switchTab('paper')); tabConfig.addEventListener('click', () => switchTab('config')); nextBtn.addEventListener('click', () => switchTab('config')); prevBtn.addEventListener('click', () => switchTab('paper')); generateBtn.addEventListener('click', generatePaperContent); downloadPdfBtn.addEventListener('click', generatePDF); loadSampleBtn.addEventListener('click', () => { const sampleContainer = document.getElementById('sample-data'); paramTitle.value = sampleContainer.querySelector('[data-id="title"]').textContent; paramThesis.value = sampleContainer.querySelector('[data-id="thesis"]').textContent; paramTheory.value = sampleContainer.querySelector('[data-id="theory"]').dataset.value; paramParagraphs.value = sampleContainer.querySelector('[data-id="paragraphs"]').textContent; }); // --- Initializer --- switchTab('paper'); // Start on the output tab });