LaTeX新float宏包:创建自定义浮动环境的中文教程

需积分: 10 0 下载量 35 浏览量 更新于2024-09-03 收藏 129KB PDF 举报
"LaTeX中的newfloat宏包是一个强大的工具,它允许用户在LaTeX文档中自定义浮动元素,类似于标准的figure和table环境,但具有更大的灵活性。此宏包由Axel Sommerfeldt开发,并在GitLab上托管。CottLi完成了这份宏包的中文翻译,以供学习者参考和交流。 newfloat宏包的核心是\DeclareFloatingEnvironment命令,它允许用户通过指定不同的选项来定义新的浮动体环境。这些选项包括: 1. `within`选项:用于设定浮动体环境的计数器,如`within=chapter`会让每个章节内的浮动体从0开始计数,而`within=section`则会在每个section内独立编号。如果设置为`none`,则在整个文档中连续编号。 2. `chapterlistsgap`选项:控制图目录和表目录中不同章节间的间距,默认值为10pt。这个选项只在支持章节结构的文档类(如book或report)中有效。 除了基本的选项,宏包还提供了其他辅助功能,如\SetupFloatingEnvironment用于调整特定环境的细节,如字体大小、标题样式等;\ForEachFloatingEnvironment则允许对所有已声明的浮动体环境进行遍历;\PrepareListOf函数则用于准备列表,如图目录和表目录。 在使用newfloat时,需确保在文档的开头使用`\usepackage[⟨options⟩]{newfloat}`加载宏包,并可以随后使用`\newfloatsetup`动态修改设置。通过灵活运用这些命令,用户能够定制出满足特定需求的个性化浮动体环境,提升LaTeX文档的排版质量和可维护性。 newfloat宏包对于LaTeX排版者来说是一个不可或缺的扩展工具,它扩展了LaTeX的浮动对象管理能力,让设计更加细致和高效。翻译成中文,使得非英语背景的用户也能方便地理解和使用这个强大工具。" 注意:在实际操作中,根据文档的具体需求,可能需要查阅宏包文档以获取更详细的用法示例和具体选项解释。

请详细解释下这段代码Rect<float> Framer::ComputeActiveCropRegion(int frame_number) { const float min_crop_size = 1.0f / options_.max_zoom_ratio; const float new_x_crop_size = std::clamp(region_of_interest_.width * options_.target_crop_to_roi_ratio, min_crop_size, 1.0f); const float new_y_crop_size = std::clamp(region_of_interest_.height * options_.target_crop_to_roi_ratio, min_crop_size, 1.0f); // We expand the raw crop region to match the desired output aspect ratio. const float target_aspect_ratio = static_cast<float>(options_.input_size.height) / static_cast<float>(options_.input_size.width) * static_cast<float>(options_.target_aspect_ratio_x) / static_cast<float>(options_.target_aspect_ratio_y); Rect<float> new_crop; if (new_x_crop_size <= new_y_crop_size * target_aspect_ratio) { new_crop.width = std::min(new_y_crop_size * target_aspect_ratio, 1.0f); new_crop.height = new_crop.width / target_aspect_ratio; } else { new_crop.height = std::min(new_x_crop_size / target_aspect_ratio, 1.0f); new_crop.width = new_crop.height * target_aspect_ratio; } const float roi_x_mid = region_of_interest_.left + (region_of_interest_.width / 2); const float roi_y_mid = region_of_interest_.top + (region_of_interest_.height / 2); new_crop.left = std::clamp(roi_x_mid - (new_crop.width / 2), 0.0f, 1.0f - new_crop.width); new_crop.top = std::clamp(roi_y_mid - (new_crop.height / 2), 0.0f, 1.0f - new_crop.height); const float normalized_crop_strength = std::powf(options_.crop_filter_strength, ElapsedTimeMs(timestamp_) / kUnitTimeSlice); active_crop_region_.left = IirFilter(active_crop_region_.left, new_crop.left, normalized_crop_strength); active_crop_region_.top = IirFilter(active_crop_region_.top, new_crop.top, normalized_crop_strength); active_crop_region_.width = IirFilter( active_crop_region_.width, new_crop.width, normalized_crop_strength); active_crop_region_.height = IirFilter( active_crop_region_.height, new_crop.height, normalized_crop_strength); timestamp_ = base::TimeTicks::Now(); if (VLOG_IS_ON(2)) { DVLOGFID(2, frame_number) << "region_of_interest=" << region_of_interest_; DVLOGFID(2, frame_number) << "new_crop_region=" << new_crop; DVLOGFID(2, frame_number) << "active_crop_region=" << active_crop_region_; } return active_crop_region_; }

2023-06-09 上传